ฉันจะตั้งค่า“ พร็อกซี USB” สำหรับ / dev / ttyUSB0 ผ่านเครือข่ายได้อย่างไร


14

ฉันมีอุปกรณ์ภายใต้การทดสอบ (DUT) และผมวัดการใช้พลังงานของตนโดยใช้เครื่องวิเคราะห์พลังงานไฟฟ้า Datalogger/dev/ttyUSB0โดยใช้ข้อมูลจาก

ปัญหาคือตอนนี้ DUT อยู่ในระยะไกลจากเวิร์กสเตชันที่ฉันใช้รวบรวมข้อมูลด้วย แต่ในเครือข่ายเดียวกันฉันต้องใช้พีซีเครื่องที่สองซึ่งเชื่อมต่อโดยตรงผ่าน USB ไปยัง Power Anlayzer เป็นพร็อกซี USB และ ssh เพื่อสร้างลิงค์สัญลักษณ์บนเครื่องวัด USB ของเครื่อง "proxy"

ป้อนคำอธิบายรูปภาพที่นี่

ป.ร. ให้ไว้แผนภาพด้านบนวิธีที่สามารถ 1 เซนต์เข้าถึงเครื่องคอมพิวเตอร์/dev/ttyUSB02 ครั้งเครื่องคอมพิวเตอร์ที่เชื่อมต่อโดยตรงในทางที่โปรแกรมอ่านกระแสจาก 1 เซนต์พีซีจะไม่เห็นความแตกต่างกันอย่างไร

คำตอบ:


19

socat อาจทำงานที่นี่

บนพีซีเครื่องที่สองคุณสามารถให้socatฟังข้อมูล/dev/ttyUSB0และให้บริการกับพอร์ต tcp เช่น:

socat /dev/ttyUSB0,raw,echo=0 tcp-listen:8888,reuseaddr

จากนั้นในพีซีเครื่องที่ 1 คุณสามารถเชื่อมต่อกับพีซีเครื่องที่สองด้วย socat และให้ข้อมูลบนเทอร์มินัลหลอก/dev/ttyVUSB0สำหรับแอปพลิเคชันของคุณ:

socat PTY,raw,echo=0,link=/dev/ttyVUSB0 tcp:<ip_of_pc2>:8888

นี่ไม่ใช่การทดสอบและsocatสนับสนุนตัวเลือกมากมายดังนั้นอาจจำเป็นต้องมีการปรับแต่ง


3
ขอบคุณ! สภาพแวดล้อมการทดสอบในตัวเทียบท่าบนแล็ปท็อป -> อุโมงค์ SSH -> พีซีในห้องสะอาด -> โปรแกรมเมอร์ AVR และตัวบันทึก FTDI ในห้องสะอาด
Mark K Cowan

2

คุณสามารถใช้การรวมกันของและser2net socatตัวอย่างเช่นฉันมีหุ่นยนต์ที่เชื่อมต่อกับราสเบอร์รี่ pi ผ่านพอร์ตอนุกรม ราสเบอร์รี่ pi เชื่อมต่อกับเครือข่ายท้องถิ่นของฉัน (เทียบเท่ากับพีซีเครื่องที่สองของคุณ) และแล็ปท็อปของฉันเชื่อมต่อกับเครือข่ายท้องถิ่นเดียวกัน (เทียบเท่ากับพีซีเครื่องที่ 1 ของคุณ) จากนั้นฉันใช้ ser2net เพื่อส่งต่อพอร์ตอนุกรมผ่าน TCP จากพีซีเครื่องที่สองและสร้างไฟล์อุปกรณ์พร็อกซีอนุกรมที่ใช้socatบนพีซีเครื่องที่ 1

การตั้งค่านี้อาจใช้ได้สำหรับคุณเช่นกัน โซลูชันที่เสนอ:

ขั้นตอนที่ 1: ติดตั้งแพ็คเกจ ser2net บนพีซีเครื่องที่ 2 ของคุณ (ตามแผนภาพ)

sudo apt-get install ser2net

ser2net ฟังพอร์ต TCP และสามารถไพพ์ข้อมูลเข้าและออกจากพอร์ตอนุกรมผ่านพอร์ต TCP คุณสามารถตั้งค่าซึ่งพอร์ตอนุกรมคุณต้องการที่จะสร้าง "ผู้รับมอบฉันทะ" /etc/ser2net.confผ่านทางไฟล์การกำหนดค่าของมัน

ขั้นตอนที่ 2: กำหนดค่า ser2net ในพีซีเครื่องที่สอง

ตัวอย่างเช่นหากคุณมีอุปกรณ์ที่เชื่อมต่อ/dev/ttyACM0ด้วย baudrate 115200และต้องการให้บริการจาก localhost พอร์ต 3333 จากนั้นคุณสามารถเพิ่มบรรทัดต่อไปนี้/etc/ser2net.conf

3333:raw:0:/dev/ttyACM0:115200,remctl

หลังจากสร้างไฟล์การกำหนดค่าแล้วเริ่ม ser2net โดยรันบนพีซีเครื่องที่สอง:

ser2net

หรือ (ถ้ามันยังทำงานอยู่ให้รีสตาร์ทดังด้านล่าง)

/etc/init.d/ser2net restart

สิ่งสำคัญอย่างหนึ่งที่นี่คือตัวเลือก remctl ช่วยให้ฝั่งไคลเอ็นต์ (พีซีเครื่องที่ 1 ในแผนภาพของคุณ) เชื่อมต่อกับอุปกรณ์และเลือกตัวเลือกการเชื่อมต่อแบบอนุกรมได้อย่างอิสระ ฉันคิดว่าวิธีนี้การสื่อสารแบบอนุกรมนั้นโปร่งใสอย่างสมบูรณ์จากมุมมองเวิร์กสเปซการรวบรวมข้อมูล ดูรายละเอียดเพิ่มเติมได้ที่นี่

ขั้นตอนที่ 3: ตั้งค่าไฟล์อุปกรณ์อนุกรมพร็อกซีบนเวิร์กสเตชันการรวบรวมข้อมูล (พีซีที่ 1)

(ถ้าคุณไม่มี socat sudo apt-get install socat)

สุดท้ายในเทอร์มินัลบนพีซีเครื่องที่ 1 ให้socatสร้างพอร์ตอนุกรมของพร็อกซี่ที่จะรับฟังจากพอร์ต tcp:

socat pty,link=$HOME/MyProxySerialPort,waitslave tcp:$ip:$port,forever,reuseaddr,keepalive

ในตัวอย่างนี้ip=<2nd-PC-IP-address>และport=3333(หรืออะไรก็ตามที่คุณเลือกเมื่อติดตั้ง/etc/ser2net.confบนพีซีเครื่องที่สอง)

ขั้นตอนที่ 4: เชื่อมต่อกับ MyProxySerialPort

ตอนนี้คุณควรจะสามารถเปิดการเชื่อมต่อแบบอนุกรมกับอุปกรณ์ที่อยู่$HOME/MyProxySerialPortบนพีซีเครื่องที่ 1 ได้แล้ว

โพสต์บล็อกนี้มีข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่านี้ด้วย: http://techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/


คำตอบโดยละเอียดมาก +1
Eduard Florinescu

1

ในเคอร์เนล linux ที่ใช้ลิงก์สัญลักษณ์จาก/ dev / bus / usb / BUS_ID / DEV_IDถึง/ dev / char / MAJOR: SOCAT เล็กน้อยไม่สามารถเปิดอุปกรณ์ดังกล่าวได้เนื่องจากข้อผิดพลาด IOCTL ที่ไม่เหมาะสม!
ดังนั้นวิธีนี้ดูเหมือนจะไม่ทำงานบนอุปกรณ์ USB โดยตรง

ฉันลองusbipซึ่งเป็นการนำมาใช้อย่างใกล้ชิด แต่รองรับเฉพาะกับเมล็ดที่แก่กว่าเท่านั้น

เนื่องจากโซลูชันของฉันเกี่ยวกับเครื่องอ่านการ์ดที่เชื่อมต่อผ่าน pcsc-lite จึงมีทางออกที่ดีกว่าโดยใช้ตัวแปรสภาพแวดล้อมสำหรับลูกค้าlibpcsclite

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

วิธีนี้สามารถระบุซ็อกเก็ตโดเมนยูนิกซ์ที่แตกต่างกันได้ และอันนี้สามารถส่งต่อไปยังซ็อกเก็ตเครื่องอ่านการ์ดบนโฮสต์ระยะไกลโดยใช้socat :

เรียกใช้สิ่งนี้บนโฮสต์เพื่อแทนที่เครื่องอ่านการ์ด

socat tcp:$CARD_READER_HOST:8888 UNIX-LISTEN:$PCSCLITE_CSOCK_NAME,fork

รันสิ่งนี้บนโฮสต์ CARD_READER_HOST ที่เชื่อมต่อกับตัวอ่านการ์ด pcsc

socat UNIX-CONNECT:/var/run/pcscd/pcscd.comm tcp-listen:8888,fork,reuseaddr

1
สวัสดีและยินดีต้อนรับ :) นี่เป็นข้อมูลที่น่าสนใจ แต่ไม่เกี่ยวข้องกับคำถาม/dev/ttyUSB0หรือตัววิเคราะห์พลังงานที่ไม่ได้ใช้ PCSCLITE หากคุณต้องการโพสต์ข้อมูลนี้จะเป็นการดีกว่าสำหรับคำถามแยกต่างหาก คุณได้รับอนุญาตและสนับสนุนให้โพสต์คำถามในหัวข้อที่คุณมีคำตอบที่ตามมาทันที
sourcejedi

3
ฉันลองมันและข้อมูลที่เกี่ยวข้องคือคำตอบที่เสนอไม่ทำงาน! ฉันคิดว่าข้อมูลนี้ต้องมีการแบ่งปัน ส่วนที่เหลือไม่เกี่ยวข้องโดยตรงอย่างแท้จริง แต่มีวิธีการที่แตกต่างกันสำหรับปัญหาที่เกี่ยวข้อง
UV

นี่อาจเป็นเพราะ:ตัวละครในเส้นทางหรือไม่ หน้า man-socat ส่วน "ข้อมูลจำเพาะที่อยู่" มีย่อหน้าเกี่ยวกับวิธีการหลีกเลี่ยงอักขระ (v1.5.0 เป็นต้นไป)
David Knipe

ประเด็นที่น่าสนใจ แต่โครงการนี้ได้รับการบรรจุกระป๋องแล้วดังนั้นจึงไม่มีวิธีตรวจสอบอีกต่อไป: (
UV
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.