Modbus-RTU的字符时间是发送一个字节数据的时间吗

摘要:Modbus-RTU协议中有一个字符时间的概念。Modbus-RTU总线是通过时间间隔来判断一帧数据结束的,3.5个字符时间内没有收到新的数据,则认为这一帧数据结束。那这个字符时间到底是多少呢?确切地说,应该是在偶校验的情况下发送一个byte数据的时间。

在RTU (Remote Terminal Unit) 模式下,串行链路是以byte为单位进行发送数据的。但Modbus-RTU协议中有一个字符时间的概念,Modbus-RTU总线是通过时间间隔来判断一帧数据结束的,3.5个字符时间内没有收到新的数据,则认为这一帧数据结束。为什么这个时间叫“字符时间”,而不叫“字节时间”呢,这不就是串口发送一个字节(byte)的时间吗?

的确,这个“字符时间”就是串口发送一个字节(byte)数据所用的实际时间,但孔丙火(公众号:孔丙火)认为,这种说法又不确切,原因如下。根据Modbus国家标准中关于RTU传输模式的规定,传输一个字节(byte)的数据,需要占用11位bit,1个起始位,8个数据位,1个校验位,1个停止位。且偶校验是要求的,默认模式必须为偶校验,但为了增加设备的兼容性,奇校验和无校验也是允许的,但在无校验的情况下,停止位必须设为2位。由此可见,一个字符时间是发送11位bit的时间。如果这样说就准确了:“字符时间”就是串口在偶校验的情况下发送一个字节(byte)数据所用的实际时间,即11个bit的时间。

延伸一下,Modbus-RTU通信中有时把通信参数设为8位数据位,1位停止位,无校验,其实是不严谨的,虽然也能通信成功。如果所有Modbus设备都严格遵循11个bit的字符时间,相当于大家统一了判断帧结束的时间间隔的标准,有利于Modbus通信的稳定。

文章在公众号(孔丙火)同步推出,欢迎查看更多系列文章。

单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,以实际项目为单元阐述知识点,一起分享,共同交流。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用PHP解包Modbus-RTU数据,您需要使用以下步骤: 1. 打开串口连接,以便从Modbus设备接收数据。 2. 读取原始数据,这通常是一个二进制字符串。 3. 将原始数据解析为Modbus帧。这通常涉及到将字节解码为指定的数据类型,例如16位无符号整数或32位有符号整数。 4. 分析Modbus帧以确定操作码和数据内容。 5. 根据操作码和数据内容执行适当的操作,例如读取或写入寄存器值。 下面是一个基本的PHP代码示例,用于从Modbus设备读取寄存器值: ```php // 打开串口连接 $serial = fopen('/dev/ttyUSB0', 'r+'); // 读取原始数据 $data = fread($serial, 8); // 解析Modbus帧 $frame = unpack('C*', $data); $address = $frame[1]; $function = $frame[2]; $register = ($frame[3] << 8) | $frame[4]; $count = ($frame[5] << 8) | $frame[6]; // 发送读取寄存器请求帧 fwrite($serial, pack('C*', $address, 0x03, ($register >> 8), ($register & 0xFF), ($count >> 8), ($count & 0xFF))); // 读取响应帧 $data = fread($serial, 5 + 2 * $count); // 解析响应帧 $frame = unpack('C*', $data); $function = $frame[2]; $count = $frame[3]; for ($i = 0; $i < $count; $i++) { $register = ($frame[4 + 2 * $i] << 8) | $frame[5 + 2 * $i]; echo "Register $register: " . $frame[4 + 2 * $i] . " " . $frame[5 + 2 * $i] . "\n"; } // 关闭串口连接 fclose($serial); ``` 请注意,这只是一个基本示例,您需要根据您的具体设备和要执行的操作来调整代码。也请注意,这里没有包含任何错误处理代码,因此您需要自己添加适当的错误检查和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值