2012-07-24 70 views
2

我使用socat來創建幾個虛擬串行端口。一個我用一個簡單的C程序(使用termios)連接,另一個我想用一個名爲Ardupilot Mega Planner的程序連接到(用於RC的東西)。但是,規劃人員不能識別虛擬端口(列在/ dev/pts下),只能識別tty設備和/ dev/serial設備。我是否需要做一些特殊裝載才能工作?或者有沒有可以嘗試的解決方法?我嘗試了「鏈接」現有串行端口(例如ttyS0),但是如果我嘗試任何類型的虛擬端口(真實端口到真實端口,真正端口到真正端口),我會得到一個「不適當的ioctl」錯誤。有任何想法嗎?Socatate虛擬串行端口不被識別

編輯:在查看該程序的源代碼(Mission Planner)之後,它似乎只能「識別」(或添加所有/ dev/ttyS *設備的端口),/ dev/serial/by -id/*設備,/ dev/USB0和/ dev/ACM0。因此,無論我需要編輯源代碼還是找到一種「驗證」ttyS *端口的方法。看起來Mission Mission只是不會連接到S1或S0以外的任何ttyS *設備。有任何想法嗎?我有一種感覺,那是因爲他們沒有正確配置,不知何故。

編輯2:我終於抓住了ArdupilotMega Planner源代碼,並將其更改爲包含/ dev/pts /中的設備。但是,我仍然遇到同樣的問題。規劃人員在打開該端口時會遇到某些問題。是否有一些設置需要檢查/更改從一個程序能夠連接到它的蝙蝠?去研究並試圖更深入地瞭解串口通信...

回答

0

您是否嘗試鏈接到更高的ttyS,例如ttyS10或更高。這些通常不分配給任何東西。 編輯:也是你用什麼命令來創建串行端口

+0

好的,這是我用於使虛擬端口的命令: '須藤socat -d -d PTY,生,回聲= 0 PTY,鏈接=的/ dev/ttyS10,生,回聲= 0' 然後我嘗試用我的程序連接到它,它會拋出一個I/O異常(有關無效參數的東西)。對不起,作爲一個串口設備的新手,但我需要安裝該端口或任何東西? – 2012-07-25 16:09:16

+0

我擔心SerialPort對象不能與socat虛擬COM端口一起使用(無效的參數異常)。我會將我的代碼切換到文件流並查看是否有效。 – josef 2014-03-24 04:52:42

2

對,剛剛發現我無法評論我的答案,因爲我沒有一個帳戶。無論如何,試試這個命令:

socat PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS11 

並將您的程序鏈接到ttyS10和ttyS11。

+0

好的,現在試過了。我的程序(APM Mission Planner)似乎還沒有認識到socat鏈接的任何串行端口。我無法連接到ttyS10,儘管我使用了上面給出的確切命令(儘管我必須像這樣使用它:'socat -d -d PTY,link =/dev/ttyS10 PTY,link =/dev/ttyS11'。否則,如果我沒有放入「-d -d」,窗口就會凍結。反正我不知道socat是幹什麼的,但程序似乎並不喜歡它。對於這個建議, – 2012-07-25 19:37:19

+0

另外:Mission Planner似乎並不想連接到ttyS10,即使socat沒有做任何事情(通常它會嘗試連接它識別的端口,即使沒有插入任何東西進入他們/連接到他們)。所以我不知道這是否與socat有問題,儘管我的系統不認識ttyS10和/或ttyS11(儘管termios似乎接受它們就好)。 – 2012-07-25 20:02:09

+0

對不起,我不知道是什麼導致了這個問題。關於so​​cat命令的一切都很好。我想這是APM任務計劃員計劃的一部分。 – 2012-07-26 19:13:35

2

我有同樣的問題,並通過TCP發送串行的東西解決了這個問題:

socat tcp-l:5760 /dev/YOURPORT,raw,echo=0,bHEREBAUDRATE 

然後在策劃者的Misson選擇 「TCP」,服務器:127.0.0.1,端口:5760

我可以用這種方式成功連接到模擬串行端口。