Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215

Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215
通讯分析 陈志文 – 扎老铁
Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215

Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215
Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215
class="post-52942 post type-post status-publish format-standard hentry">

通讯分析 陈志文

通讯分析 陈志文ModBus基础

image

通信数据例子:02 03 00 64 00 01 C5 E6

02 地址域

03 功能码(此例为读取)

00 64 00 01 厂商约定数据构式

C5 E6 差错校验(此项目中的校验方式为CRC16)

厂商约定数据构式分析

读取:02 03 00 64 00 01 C5 E6

其中的数据为 00 64 00 01:

00 64 为要读取的存储地址位,类似于C/C++中的指针。地址位列表参考电子表格,把windows计算器调开,方便把16制转为10进制。

00 01 为要读取的数据长度,单位“线圈”(1个线圈=2个byte)

读取命令设备回复:02 03 02 00 64 FD AF

读到的数据为:02 00 64

02 :数据长度,因为上一个命令发送了1个线圈,所以设备回复了“2”(2个byte)

00 64:读取到的数据,00 64 根据该属类的数据类型,通过编、解码转换回来得到值“100”。

写入:02 10 00 64 00 01 02 00 64 BB 6F

02:从机地址

10:功能码(此例为写入)

BB 6F:校验

数据为:00 64 00 01 02 00 64

00 64:写入的地址位,同“读取”。

00 01:写入的线圈数量。

02:写入的数据长度

00 64:写入的数据(值为100)

写入命令设备回复:02 10 00 4F 00 01 30 2D

写入命令没有对其数据进行详细分析,因为看起来用不上,如果需要详尽资料,可以咨询一下产商。

广播:

广播实际上就是把从机地址换为“00”,就是广播了。只发送,不接收,一般用于批量写入,比如说系统时间同步什么的。

读取时可以一次读取N个地址相邻的属性,比如连续读:02 03 00 00 00 78 45 DB

数据为:00 00 00 78

00 00:为开始的地址

00 78:为要读的线圈数量,这里是120个(10进制)。你现在看到的78是16进制数。(推荐最大120个线圈,推荐最大120个线圈,推荐最大120个线圈,重要的事说三遍。因为太大了,会直接没结果,如果120个还是没结果了,那就调小一点)

连续读返回数据:

02 03 F0 00 00 00 02 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 01 06 01 09 01 12 01 00 00 20 17 03 02 18 48 00 03 00 00 00 00 00 00 00 01 00 00 00 00 00 3C 00 A0 00 78 00 FF 00 3C 00 A0 00 0A 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 96 00 64 00 02 00 00 00 00 00 96 00 64 00 02 00 00 00 00 00 96 00 64 00 02 00 01 00 01 02 EE 00 64 00 02 00 00 00 20 00 20 00 00 00 00 00 00 00 32 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 02 EE 00 64 00 02 00 64 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 C2 11 02 EE 64 20 00 00 00 00 00 00 00 00 00 00 47 D3

其中的数据为红色字体,数据的第一位F0为数据长度(240个),剩下的数据就对应电子表格里属性的数据类型截取和解析。

备注:“读取所有属性”功能,就是拆成两个命令执行的,发送的读取命令会别为:

02 03 00 00 00 78 45 DB

02 03 00 78 00 08 C4 26

重要:连续读还有一个固定命令:03 03 01 00 00 78 45 F6

注意,数据01 00 00 78中的地址位01 00这里是固定的,这是产商放进去的,返回的结果曾让我分析的怀疑人生,最后就不分析了,具体看编、解码代码中的相关部份。被这命令坑了几天:)。

 

通讯分析 陈志文

发表评论

电子邮件地址不会被公开。