如何將 Array 用VISA 寫入 Modbus

各位先進好

我手邊是有一台量測儀器 他的輸出入溝通是以 RS485 + Modbus 來完成

求助於原廠的結果 得到測試程式 機器運作皆正常

原廠的程式 顯示 Command : 010300290002  CRC : 15C3

可我卡在 以 VISA 下Command的這個部分

原廠說 下Command的時候需要 "16進制 1Bit 長度8(index 0~7 )的陣列" 去下

 

可是VISA 好像只有接受 String 的輸入


想請教各位先進

1. 一般來說 在modbus 裡面如何下指令  (例如:Labview_ModBus.vi   取自站上某發問參考  假設這為一般的方法 PS. 可我以他的方式送出及傳回值 用Probe去看都是亂碼 或不可視字元)
2. 轉成16進制的部分該是如何轉換?? 整段Command不是都已經符合16進制嗎?
3. 如果一般的方法無法使用 必須使用陣列的方式 那該怎麼做呢?


已在論壇上參考了一部分 相關蒐尋 : modbus  RS485 Array
可還是不大明白 如有觀念錯誤 或 根本問題

還望各位先進前輩  不吝賜教

![](upload://3tjQOKJfP1dcNsNw8YEQlYtKZE1.jpeg)

這樣應該可以達到你要Array的效果,你可以看一下他的解釋。如果不行還可以再討論嚕

[QUOTE=knightsoul]

![](upload://3tjQOKJfP1dcNsNw8YEQlYtKZE1.jpeg)

這樣應該可以達到你要Array的效果,你可以看一下他的解釋。如果不行還可以再討論嚕

[/QUOTE]

 

謝謝 knightsoul 的回答

我測試結果 是有送出訊號 可是沒有回應  依照原本的範例去測試的話 還會有不可視字元 情況如附圖

是我應該再去做一些 字串轉換之類的寫法  還是連結字串並不能替代這個做法?

 

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

hiddingcat40041.3461689815

不好意思,我想請問除了一開始的五個Command,CRC代表的意思是什麼?

CRC 就是 由原來的 command 去解析 會得到所謂 確認碼



要將command + CRC 一起傳過去給機器 就會得到回傳

你的最後一個0Dx 不用前面送出去就可以了 

感覺起來~~~

你的機器應該是接受16bit 的數值,所以指令0103...應該是Hex code,但是因為你送的是字串,再轉成Hex 後就錯了,所以他不接受吧~~~

但是你一定會問,VISA 僅能接收字串輸入,問題如何解決呢~~~

我記得好像有一個VI 可以把數值轉字串輸出,這樣應該可以解決你的問題

試試看吧~~~

RobertCheng,說的應該是

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

這個問題其實有困擾我很久,雖然在LabVIEW的RS-232資料是輸入String!可是機器如果不是收String呢?

看看我下一張圖

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

我想這代表說,字串他其實已經可以代表16進位了!而不需要再轉換。

原PO大大,如果你不要加Enter呢?這樣可以收到訊號嗎?因為有的儀器是可以不用Enter的

你可以先去Example 找Basic Serial Writer and Read範例來用

CMD那邊打01030029000215C3需要是HEX方式

如圖

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

 

感謝<span =bold>Hanes
又讓我多學了一課

感謝各位大大 熱情的回應

我的問題已經解決!! 如Hanes 大大所說 只要調整成 HEX desplay 就沒有問題了

亂碼也會顯示成正確的 HEX字串  直接送入VISA 到機器也會有回傳

並不需要 "真的送入陣列"  看來這是 VI 和一般程式語言 不大相同的地方

此外 也感謝 knightsoul 大大   雖然我後來並不用加上那個 "Enter" (Carriage Return Constant)

也許別的儀器會需要使用也不一定 很有參考價值

謝謝大家!!  

 

這是解決以後的VI  歡迎使用

Labview_ModBus_mou_1.vi