關於RS485通訊數據遺失

各位先進您們好:

我是接觸labview不久的初學者,最近撰寫程式遇到一些問題,想請教各位。
日前購入一台附有RS-485通訊埠的工業電腦,本想利用它對電表進行溝通,但他的485為COM2,需要控制MODEN Control Register中的DTR(位於bit0),記憶體位址為2FC,以控制RS-485埠狀態是接受或是傳送。
目前結果是可以對電表進行溝通,但是PC端接收的電表回授字串不太穩定,時常會接到空字串或是不完整的字串,在此附上程式,希望先進們可以指點,感謝。

程式為使用8.0版編寫。RS-485測試1.viHide39354.454375

因為版本差我沒辦法看

不過!!你檢查一下通訊埠協定看看!! 正常來說應該是9600,n,8,1

不過最近我有遇到接8051的時候他的單晶片脈衝頻率為1/2

變成電腦設定9600, 8051設定為19200才能接收到正常的訊號

另外!! Buffer設定也看看有沒有夠

 

謝謝您的回覆,版本我不會轉換@@;但是以這個電表來說,它標準協定為9600,n,8,2。

所以我labview是採相同設定,訊號目前來說是正常,只是很容易出現回傳字串遺失,以錯誤頻率來說,大概2-3次會出現一次錯誤字串。Buffer部分我是用Property Node元件中的Bytes at Port 輸出直接送到VISA Read元件,應該是足夠。

Trace2656的意思應該是要你加入以下buffer的vi試看看,另外我開啟你的程式發現你的stop bits是設定為1,我想你在執行時應該是設定為2,如果可以請把它預設為2

![](upload://vpOcf2PsGmIk30rvfwsXBdGPoZ6.jpeg)

謝謝ancle的提醒,我忘記預設為2了,剛剛有試了一下上圖這種寫法,但是程式在接收時仍會產生誤動作,有時候是字串數不足,有時候是抓到空字串,非常謝謝大家的指教,我會繼續努力。

1.你如何知道資料正不正確?

2.你可以試著將delay 500 ms改為100 ms看看

我想知道為何需要雙回圈,同一個裝置同時讀取不會是好事

[QUOTE=ancle]

1.你如何知道資料正不正確?

2.你可以試著將delay 500 ms改為100 ms看看

[/QUOTE]
我有使用modbus的測試軟體,再利用RS-485 to USB轉接器來得到電表回傳值的格式,利用轉接器功能就不用控制DTR,它會顯示01 03 04 00 00 00 00 00 FA 33,但多採購一個轉接器來使用會花多餘的成本,所以才改採有RS-485埠的低階工業電腦。
剛剛是試著將delay改成100ms來操作,會減少抓到空字串的出現,但是字串不全的狀況一直沒有改善,又改成更短(<100ms)以後,狀況好像也是差不多了,謝謝提供意見,很高興又學到東西了。

[QUOTE=IanTsai]我想知道為何需要雙回圈,同一個裝置同時讀取不會是好事[/QUOTE]

雙回圈只是測試用的。想知道它記憶體是不是有順利切換,我會把它砍掉看看,謝謝。

我也遇過同樣的問題,剛開始根本查不出來,後來的心得分享出來討論看看

我的方法(1)是換converter(Edam-8520a 需吃電,有隔離,價格昂貴),

不過換了以後大大降低出現錯誤字串的機會

我的方法(2)是程式中加入retry的功能,意思就是將回傳字串跟checksum做比對

不正確的話就再做一次,可將retry次數放大,試到正確為止

 

謝謝 jutjy67 提供的意見,我目前程式會出現的誤動作頻率很低,所以將程式改為上文中(2)的作法,也就是將回傳值再做檢查,目前測試起來算是可以用了。過幾天會再並聯上更多RS-485組件,再來測試程式回傳值的穩定度,感謝各位前輩提供資訊,謝謝您們。