9600和960有什么区别,960跟950差距大吗

首页 > 经验 > 作者:YD1662022-11-03 22:15:34

在MODBUS通信协议下,不同的命令功能码它的帧结构不尽相同。对于读寄存器命令,MODBUS的主站帧结构是:2个字节的地址码,1个字节的功能码,2个字节的数据地址码,2个字节的CRC校验码;MODBUS的从站回应帧结构是:2个字节的功能码,1个字节的回应区字节总数,N个字节的回应数据,2个字节的CRC校验码。

虽然物理层协议与数据链路层协议不同,但数据链路层协议的执行必须建立在通信双方物理层连接已经符合要求,并且已经可以无障碍地实现信息交互的基础上。

这个规则在ISO/OSI模型的七层协议中必须完全彻底地得到执行。在ISO/OSI模型中,通信双方的低层次协议必须为上层协议建立透明的无故障的连接和信息交换关系。也就是说,各层次的上下级关系必须是绝对的。

从数据链路层再往上,就是网络层了。它的任务是构成现场总线的信息交换网。

网络层的功能包括:把通信帧打包成数据分组,然后把数据分组发送给对方。

由于通信双方的网络结构可能不同,于是对于同种网就需要用网桥来连接,而异种网则需要用网关来连接。

网络之间的信道可能有多条。数据分组在发送时有多种路径可以选择。负责选择路径的元件称为路由器。路由器不但决定了真实的数据交换网络路径,还可以构建虚拟的网络路径,还要决定数据分组的发送秩序。因此,路由器是网络层中最复杂最关键的装备。

OSI模型中,把物理层 数据链路层 网络层合并称为现场总线,其通信接口就是8针的RJ45水晶头。显见,RJ45与RS232/RS485/RA422完全不是一回事。

网络层的数据分组是数据帧的组合。通俗地说,数据分组是一篇短文,或者是一页待传递的数据组合单元。

网络层在发送数据分组时,其路由问题和接收组合问题见下图:

9600和960有什么区别,960跟950差距大吗(5)

9600和960有什么区别,960跟950差距大吗(6)

我们看到网络层在通信时先由路由器确定路由路径,然后把分组发送到对方。对方接收到分组后,把分组按前后秩序组合起来,再解包为实际文档。

值得注意的是:由于网络层有了路由器,因此网络层支持星形网络结构。

现在我们来关注一下ISO/OSI的7层模型,如下:

9600和960有什么区别,960跟950差距大吗(7)

需要明确的是:从网络层再往上,各层之间发送的信息单位已经是完整的报文了。OSI模型也规定了报文的语法结构,限于篇幅给予忽略。

值得注意的是:RS232/RS485/RS422通信接口以及它们的定义,是非常明确的。包括管脚的电平,管脚的功能定义,以及接口在信息发送和接收信息时的数据流时序关系,这些都必须准确和严格,否则就无法执行信息交换。

当PLC与某电力仪表交换信息,并且这些电力仪表符合RS485/MODBUS-RTU通信规范。我们要做什么事呢?

第一,我们按菊花瓣结构的通信链路要求去接线,将PLC的通信接口与N个电力仪表接口连接起来。最后一个电力仪表的末端要配100欧的终端电阻。

第二,我们把这N个电力仪表按地址递增的原则确定各自的地址,例如01H、02H、1FH等等。这里的H表示是16进制,1F表示16 15=31。

第三,我们在PLC编程软件中设定好电力仪表规定的通信速率。

第四,我们在PLC编程软件中按电力仪表的数据区地址码设定好MODBUS通信码,以及各个子站的循环关系。

注意,这里的MODBUS通信码满足PLC的IEC 61131-3编程模块要求,一般的PLC梯形图没有此功能。梯形图满足IEC 61131-1要求,但不满足IEC 61131-3要求。

第五,在PLC的内存中开辟专用数据区,存放从电力仪表读取到并处理后的信息,以便让更高层的总站来读取信息。此数据区有一个名称,叫做数据点表,有时也简称通信协议。

最后,当然就是开机测试了。其中的内容很多,限于篇幅不再介绍。

我们来看一个在RS485网络上用MODBUS-RTU读取数据的例子,如下:

某电力仪表,地址是01H。在电力仪表内存第2000的位置上,放置了三相电流和三相电压等6个数据,每个数据占用两个字节,共12个字节。

此电力仪表的通信速率是9600bps。什么意思呢?bps表示一个0/1,也就是比特,这说明每秒钟这条总线上可以发送9600个比特。我们已经知道一个字节有8个数据位,1个起始位,1个奇偶校验位,刚好10位或者10个比特,所以,如果电力仪表的通信速率是9600bps,那么1秒钟就可以发送:9600/10=960个字节。

我们还知道,主站的读数据的帧结构(下行帧)中,有1个字节的地址,1个字节的功能码,2个字节的内存地址,2个字节的数据数量,2个字节的CRC校验码,总共有8个字节,所以主站发送读数据MODBUS通信帧占用的时间是:8X10/9600=8.33毫秒。

对于本例,我们知道MODBUS-RUT读数据的命令是0X03H,也即03命令。注意这里的写法:0X是字头,中间的03是命令,最后的H表示是16进制。

具体通信帧的是:01 03 07 D0 00 06 C5 45,其中0X01H是地址,0X03H是命令,0X07D0H是内存地址2000,0X0006H表示读取连续6个字,也即内存中的电流和电压参数,0XC545H是01 03 07 D0 00 06的CRC校验码。

那么电力仪表的回应帧(上行帧)的帧结构是:1个字节的地址,1个字节的功能码,1个字节的数据区字节数,12个字节的数据,2个字节的CRC校验码,总共17个字节,占用时间是:17X10/9600=17.7毫秒。

具体的仪表回应通信帧是:01 03 0C 00 64 0064 0064 00 DC 00 DC 00 DC D6 F5,其中0X01H和0X03H的意义同前,0X0CH表示上传数据区有12个字节,0X0064H表示A相电流为100A,后面的两组为B相和C相电流,均为100A,0X00DCH表示A相电压为220V,其后两组为B相和C相电压,均为220V,最后0XD6F5H为CRC校验码。

从主站发起下行通信帧,再等待10毫秒让从站回应,再接收到从站发还的上行通信帧,总历时为:

9600和960有什么区别,960跟950差距大吗(8)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.