Foxtable(狐表)用户栏目专家坐堂 → 关于modbus rtu通讯协议


  共有11267人关注过本帖树形打印复制链接

主题:关于modbus rtu通讯协议

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/21 10:29:00 [显示全部帖子]

以下是引用精彩世界在2014-4-21 10:24:00的发言:
狐表当然接触过了,现在我要解决的是发送与接收的问题,用图片说明,如果在回复中加入图片?

 

字节收发呗,数据传输实际上不是都是这样的么,对发送/收到的字节进行一下截取和处理。这个应该在你设备那里有说明的吧?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/21 10:55:00 [显示全部帖子]

以下是引用精彩世界在2014-4-21 10:46:00的发言:
Dim Val() As Byte = New Byte() {49,50,51,52}
Ports
("COM2").Write(Val0Val.Length)

如果用这样写的话:我是不是应该把{49,50,51,52}换成{01,03,00,00,00,0A,C5,CD}呢,应该不对吧,Byte是微整型啊,那么指令到底应该怎么发送呢

 

设备是否有帮助文档说明?或者设备是否提供二次开发工具包?

 

如果没有,你就得去了解下 ModBus RTU 协议 和 此设备数据传输的指令所代表的内容


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/21 11:38:00 [显示全部帖子]

以下是引用精彩世界在2014-4-21 11:18:00的发言:
狐表如何实现发送指令与接收是关键啊.不知道应该用何种格式,帮助文件中没有RTU传输模式,此仪表要求RTU传输模式.
这种传输,我的理解是必须向仪表发送指令,仪表才会返回结果,
我在论坛里找到一个电子称的贴子,好像那个贴子中,电子称不需要发送指令,直接读取就行,
但我这个仪表必须发送指令,不然读取的是空值.
[此贴子已经被作者于2014-4-21 11:21:01编辑过]

 

我看了一下内容,问题没有那么复杂。

 

你先看看特别是 SendModbusData 和 GetModbusData 方法,对数据打包一下,发送,然后接收回来的内容,便可。

 

http://guangrou.blog.51cto.com/404164/1087885

 

 

哪里理解不了,再问。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/21 12:02:00 [显示全部帖子]

 回复18楼,这个是c#的代码。你只需要参考里面对数据打包的代码就行了。

 

 取数据,可以直接用Ports("Com3").Read(x, y, z)

 

 打包数据的时候,处理一下,再Ports("Com3").Write(x, y, z)


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/21 12:11:00 [显示全部帖子]

 那没办法,没有谁开始就会的。这个问题不搞懂,即便你取到字节了,你也不知道怎么截取和转换数据。

[此贴子已经被作者于2014-4-21 12:11:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/21 14:06:00 [显示全部帖子]

以下是引用精彩世界在2014-4-21 13:51:00的发言:
问题的关键还是指令发送,
Va = New Byte()  {01,03,00,00,00,02,196,11}  '指令01 03 00 00 00 02 C4 0B
将十六进制转换后十进制发送就行了

 

也可以这这样写

 

Dim b_sent(7) As Byte
b_sent(0) = &H01
b_sent(1) = &H03
b_sent(2) = &H00
b_sent(3) = &H00
b_sent(4) = &H00
b_sent(5) = &H02
b_sent(6) = &HC4
b_sent(7) = &H0B

Ports("COM3").Write(b_sent, 0, b_sent.length)

 

或者

 

Dim b_sent() As Byte = {&H01, &H03, &H00, &H00, &H00, &H02, &HC4, &H0B}

Ports("COM3").Write(b_sent, 0, b_sent.length)


 回到顶部