通讯协议
- 1 调试助手
- 1.1 crc计算助手
- 1.2 串口调试助手
- 2 使用serial节点读取数据
- 3 modbus协议
- 3.1 报文
- 3.2 功能号
- 3.2.1主机对从机写数据操作
- 3.2.2主机对从机读数据操作
- 3.3 MODBUS报文模型
- 4 Modbus tcp和Modbus rtu的区别和联系
- 5 协议
- 5.1 TCP协议
- 5.2 Modbus rtu
1 调试助手
1.1 crc计算助手
调参数注意红框!
1.2 串口调试助手
图中红框是上一个计算软件返回来的结果,所有的参数设置如图所示:串口号,波特率,hex发送,hex显示。发送以后得到图中篮框。
如果想自动发送,点击拓展,然后把返回值写到黄框内,然后点自动发送,其实上边的两行的结果也会显示,但由于不是hex,并不会有效。
填写完参数以后记得打开串口,串口打开后,在使用node-red时,要把串口关闭,不然显示串口被占用。同样node-red使用串口时,也要把串口关掉,打开cmd,调出红框即可。
2 使用serial节点读取数据
在 node-red中serial 流
打开serial节点:
红框中的9 代表的是接收到的字节长度是9位。把别的参数配置成图中的样子。
新建buffer:
新建buffer就是填写的是使用传输助手返回来的值。
构造函数:
构造函数是实现转换功能。
用黄线圈起来的就代表出来的一个buffer,它出来的数据就是和窗口助手蓝色框出来的一样,是16进制的数组。
接下来要做的就是把得到的数组变成有用的信息,就用到了函数节点。填写函数实现转换。
绿色代表从需要的数组里,选择出需要的数,黄色的代表这两个数进行拼接。红色的语句代表将取到的数变为10进制。b代表数,16代表当前的数b的进制。
最后的黄色框注意的是只能有一个返回值。可以把要显示的做一个对象,然后在输出。上边的小黄框代表拼接也可以用另一种语句写。和modbus的结合
在modbus节点中,我这个值选取的是2,则代表我需要用的温度湿度的值选取的是两个。所以导致左后的值是9位,其中包括2个校验位。
3 modbus协议
3.1 报文
Modbus一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现。
分析一条MODBUS-RTU报文:01 06 00 01 00 17 98 04
01 06 00 01 00 17 98 04
从机地址 功能号 数据地址 数据 CRC校验
这一串数据的意思是:把数据 0x0017(十进制23) 写入 1号从机地址 0x0001数据地址。
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。
意义:例如上面的 98 04 是它前面的数据(01 06 00 01 00 17)通过一算法计算出来的结果,其实就像是计算累加和那样。(累加和:就是010600010017加起来的值,然后它的算法就是加法)。
作用:在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确。比如主机发出01 06 00 01 00 17 98 04,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。
3.2 功能号
作用:指示具体的操作。
3.2.1主机对从机写数据操作
如果单片机接收到一个报文那么就对报文进行解析执行相应的处理,如上面报文:
01 06 00 01 00 17 98 04
从机地址 功能号 数据地址 数据 CRC校验
假如本机地址是 1 ,那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是: HoldDataReg[1] = 0x0017;
MODBUS主机就完成了一次对从机数据的写操作,实现了通讯。
3.2.2主机对从机读数据操作
01 03 00 01 00 01 D5 CA
从机地址 功能号 数据地址 读取数据个数 CRC校验
那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的:
返回内容:
01 03 02 00 17 F8 4A
从机地址,功能号,数据字节个数, 两个字节数据 ,CRC校验
MODBUS主机就完成了一次对从机数据的读操作,实现了通讯。
3.3 MODBUS报文模型
ADU: 应用数据单元
PDU: 协议数据单元
*
4 Modbus tcp和Modbus rtu的区别和联系
Modbus RTU一般采用串口RS232C或RS485/422,而Modbus TCP一般采用以太网口。现在市场上有很多协议转换器,可以轻松的将这些不同的协议相互转换 ∶Intesisbox可以把modbus rtu转换成 Modbus tcp,实际 上ModbusQ协议包括ASCII、RTU、TCP。
Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式。
Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCll模式采用LRC校验,RTU模式采用16位CRC校验.。ModbusTCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。
TCP和RTU协议非常类似,只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。
TCP通过网线,RTU通过USB接口, 485协议.连接
而Modbus TCP协议则是在RTU协议上加一个MBAP报文头,由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就不再需要,所以在Modbus TCP协议中是没有CRC校验码,用一句比较通俗的话说就是:Modbus TCP协议就是Modbus RTU协议在前面加上五个0以及一个6,然后去掉两个CRC校验码字节就OK.虽然这句话说得不是特别准确,但是也基本上把RTU与TCP之间的区别说得比较清楚了。
5 协议
5.1 TCP协议
图中画横线的,就根据第二张图片的ID,fc,地址,长度…依次填写就可以。
点击第一张图片的红色框,进入另一个设置界面:
黄色代表tcp协议,选择tcp。蓝色是串口:串口服务器里设置的多少就填多少。绿色指串口服务器的ip地址。
5.2 Modbus rtu
红色的框就是指每个传感器的ID,为了方便识别,比如TCP里边的就是3,。黑框调rtu的配置节点信息,配置信息如下: