關於protocol的問題

不好意思,問個與LabVIEW較無關的問題, 相信有許多前輩用過comport 來做控制動作的經驗, 我個人有碰到一個關於comport的奇怪問題,希望有前輩提點一下

我是要用PLC控制馬達做動作, 而PC與PLC間的控制是以comport做連結, 依照說明書的作法,設定baud rate: 115200, data bits: 8 , Parity: odd , stop bits: 1 , Flow control: none , 一開始是以window通訊內的超級終端機作試驗是可以傳送指令也可以收到PLC的回應訊息.

但是當我用VB內的MSComm用相同設定時,就出現問題了, 在設定Parity為odd時只能送指令做動作卻不能收回應訊息,

而Parity改為none時就變成只能收回應訊息不能送指令了

後來,我再用NI的MAX去試驗,發現Parity在odd時傳收皆可但是用none時只能收.

因為我主要的程式是以VB寫成的,不希望用別的應用軟體重寫(花了幾星期) , 所以不知有哪位高手可以提供些意見如何處理protocol的問題, 謝謝

這個問題…好像真的跟LabVIEW比較沒有關係哦,在這邊問會不會有點@$#@*^*&

不過…不管是什麼問題,都是一起討論才會進步嘛…

關於你問的問題,我在想有可能是你在InputMode的設定上有問題吧…

不過這也只是猜測啦…下面是我使用MSComm時作的設定,你也可用來試試看…

' 設定並開啟連接埠
MSComm1.CommPort = 1
' 連線速度 9600 baud、無同位檢查、資料位元 8、停止位元 1
MSComm1.Settings = "9600,N,8,1"
'告訴控制項當使用 Input 時,讀取整個暫存區
MSComm1.InputLen = 0
' 設定 InputMode 以讀取二進位資料
MSComm1.InputMode = comInputModeBinary

而送出Binary的資料則沒有像InputMode的屬性,Output屬性是接Varant所以直接將ByteArray傳送出去就好了,
另外記得在開始讀取資料前跟讀取資料後都要對 MSComm1.PortOpen 作設定。

感謝您的回覆,我在VB的設定值就如你所寫的,只是setting是115200, O, 8 ,1 ;我現在的程式只能用不斷切換Odd與none,來分別作傳送與接收資料,但這種做法也擔心收送資料會有遺漏的問題(因為測試過程是要多次收送資料),不知是否是VB本身的物件就有這種問題或是有其解決的方法, 請各位前輩多多幫忙,謝謝