台灣最大程式設計社群網站
線上人數
798
 
會員總數:244227
討論主題:188566
歡迎您免費加入會員
討論區列表 >> C# >> MODBUS RTU 和 C# 對工業馬達做通訊
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
MODBUS RTU 和 C# 對工業馬達做通訊
價值 : 200 QP  點閱數:388 回應數:8

樓主

777
門外漢
0 18
178 21
發送站內信

想要用C#控制工業馬達。
目前已經在MODBUS RTU測試軟體 通訊成功。
馬達運轉指令為:01 06 20 03 00 01(TX)

我在思考是不是可以不用透過modbus rtu 通訊工業馬達。
可以直接利用c#內的serialport做通訊。
因此我這樣寫。




但很不幸,雖然沒有發生任何錯誤指令,但是馬達不會轉動,且rx也沒有任何回應。
麻煩各位前輩,提點一下 謝謝。

或者 能否提點一下 c#和MODBUS RTU互相通訊的方法 感恩。

搜尋相關Tags的文章: [ MODBUS RTU 和 C# 對工業馬達做通訊 ] ,
本篇文章發表於2018-12-17 16:24
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

春天
檢舉此回應
改成用Stream試試如何
C# Epson熱敏印表機列印 Pos機用
本篇文章回覆於2018-12-17 17:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

777
檢舉此回應
春天,您好
看了您附的文章,有個疑問,


請問一下 我應該如何將我需要傳的01 06 20 03 00 01,放入testbt內呢?
關於如何定義testbt的byte陣列,我沒有看懂。
本篇文章回覆於2018-12-17 17:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

春天
檢舉此回應
0x1D的前面加上0x表示這是16進制的數字1D = 16 * 1 + 13(D) = 29

所以假如指令是16進制
byte[] testbt = { 0x01, 0x06, 0x20, 0x03, 0x00, 0x01 };
sp.Write(testbt, 0, testbt.Length);

一般都是用16進制表示,但我不確定你的指令是10進制還是剛好都沒有ABCDEF
本篇文章回覆於2018-12-17 17:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

春天
檢舉此回應
補充一下 若是指令為10進制 那20 要寫成14
byte[] testbt = { 0x01, 0x06, 0x14, 0x03, 0x00, 0x01 };
本篇文章回覆於2018-12-17 17:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

777
檢舉此回應
春天您好,謝謝您的教學
我程式部分這樣寫,因為我不懂如何將PrintString(int Port, string val)、 PrintTest(int Port),兩種方法拿出來於button1_Click使用。
不過,我仍無法驅動馬達,但是COM5的連接都沒有問題,確實是馬達的COM Port。


本篇文章回覆於2018-12-17 18:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

ak41
檢舉此回應
標準ModBus RTU後面要CRC16吧 這明顯少了2個Byte
本篇文章回覆於2018-12-19 11:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

傻鈞
檢舉此回應
你好

應該是CRC問題了

利用現有工具驗證
https://dotblogs.com.tw/yc421206/2013/05/07/103067
https://www.modbustools.com/

testbt = { 0x01, 0x06, 0x00, 0x03, 0xA1, 0xD8 };//連接馬達
testbt2 = { 0x01, 0x06, 0x20, 0x03, 0xB8, 0x18 };//RUN
本篇文章回覆於2018-12-19 11:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
不錯的參考

傻鈞
檢舉此回應

AK41大大是對的

小弟剛剛七樓發的請忽略

CRC
http://cht.nahua.com.tw/software/crc16
本篇文章回覆於2018-12-19 12:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.