RS232、RS485、RJ45、Modbus协议傻傻分不清楚?看完这篇豁然开朗
cac55 2024-10-03 17:41 20 浏览 0 评论
设想直流电源,它的输出端插座接口有三个管脚,分别是正极、负极和接地极。相应地,负载的插头也应当有三个管脚与电源侧一一对应,这样才能正确地获得电能供应。
注意到这里有三个必须满足的条件:
第一是插头和插座管脚的形状、大小和插针直径及长度必须一一对应,否则无法完成接插操作。这一点规定了插头组合的物理结构和管脚定义。
第二是电源的输出电压值必须满足载侧的需求值,否则无法完成电参量的要求。这一点决定了插头组合的电平规范。
第三是电源的输出阻抗与负载的输入阻抗必须匹配,否则不能实现完善的供电。这一点决定了电源的工作性质。
这三点其实就是电源插头组合在物理层面上的规范性协议。
再看通信接口。在有关计算机信息交换的ISO/OSI模型里,物理层是最底层(第一层),它规定了接口的机械外形、接口管脚定义、接口电平和字节格式。
这里的字节格式,指的是一个字节中有几个数据位,有几个起始位/停止位,有几个奇偶校验位。一般地,一个字节有8个数据位,1个起始位(停止位),和1个奇偶校验位。注意:起始位和停止位可以合并。
再看通信接口和通信网络的工作制问题。
当我们拿手机挂电话时,我们发现通信双方在通话的同时也可以接听,这叫做全双工(双向工作制);如果说话的时候不能听,而接听的时候不能说,但任何一方都具有说和听的能力,也就是对讲机的通话型式,这叫做半双工。
RS422接口和RS232接口是全双工接口,而RS485则是半双工接口。
对于半双工接口,显然需要有通信的发起者,所以RS485接口和网络一定具有主站和若干从站,并且从站的数量也有规定。一般地,从站的数量是32个。
RS485主站与从站的关系问题,看似只是通信工作制的不同,其本质是通信各方对通信总线控制权的合理分配。
我们再看总线连接的问题。
我们还是以电源为例。我们可以从电源引出一条主干线,然后再并联若干个支路并分别送到若干个负载。只要满足电源的功率要求,显然这是可行的。
如果我们用同样的方法来引出RS485的通信线,是否可行呢?答案是否定的。我们必须从通信主站先引一条线到第一个通信子站,再从第一子站引第二条线到第二子站,如此循环直到最后一个子站。在通信线的终端,还要配一个终端电阻。在这条通信线路上,任何一点如果发生断路,则后续的通信链路上的通信也就断了。这种接线方法形象地被称为菊花瓣连接方法,或者链形连接方法,而电源的接线方法则被称为星形连接方法。
我们发现,从电气接线来看,链路是并联的。但从通信来看,链路是菊花瓣的,属于一个接一个的有秩序的连接。
现在我们可以总结一下了:
RS485的总线网络接线方式必须是链形菊花瓣的接线方式,并且属于半双工的通信方式;RS232是点到点的接线方式,属于全双工通信。不管是RS232接口,还是RS485接口,它们必须符合物理层的通信规约。
再看MODBUS-RTU通信协议:
有了物理层通信接口,是不是就能通信呢?答案是否定的。物理层通信接口只是使得通信双方具备通信条件而已。但若双方说的话谁都听不懂,或者通信双方的说话方式及语法结构不相符,显然这也无法通信。
在OSI模型中,物理层之上是数据链路层。MODBUS-RTU协议就是数据链路层协议,只要通信双方都采用了MODBUS-RTU协议,则能确保通信语言是双方都能听得懂的语句格式。
注意这里的词汇“语句”。物理层定义的是字节,相当于语言中的字,数据链路层则把字节组织成语句,也即帧。帧规定了通信双方所用语句的语法结构。
MODBUS也是主从式的。和物理层的总线控制是一样的,这里的主从关系,就是对通信总线的控制权做了规定。主站先下达命令,占用总线;接着把总线空置,交给从站去写回应码;从站完成后,再把总线还给主站。
现在我们来看看ISO的HDLC规定的帧结构,也即通信语句的语法结构,如下:
在MODBUS通信协议下,不同的命令功能码它的帧结构不尽相同。对于读寄存器命令,MODBUS的主站帧结构是:2个字节的地址码,1个字节的功能码,2个字节的数据地址码,2个字节的CRC校验码;MODBUS的从站回应帧结构是:2个字节的功能码,1个字节的回应区字节总数,N个字节的回应数据,2个字节的CRC校验码。
虽然物理层协议与数据链路层协议不同,但数据链路层协议的执行必须建立在通信双方物理层连接已经符合要求,并且已经可以无障碍地实现信息交互的基础上。
这个规则在ISO/OSI模型的七层协议中必须完全彻底地得到执行。在ISO/OSI模型中,通信双方的低层次协议必须为上层协议建立透明的无故障的连接和信息交换关系。也就是说,各层次的上下级关系必须是绝对的。
从数据链路层再往上,就是网络层了。它的任务是构成现场总线的信息交换网。
网络层的功能包括:把通信帧打包成数据分组,然后把数据分组发送给对方。
由于通信双方的网络结构可能不同,于是对于同种网就需要用网桥来连接,而异种网则需要用网关来连接。
网络之间的信道可能有多条。数据分组在发送时有多种路径可以选择。负责选择路径的元件称为路由器。路由器不但决定了真实的数据交换网络路径,还可以构建虚拟的网络路径,还要决定数据分组的发送秩序。因此,路由器是网络层中最复杂最关键的装备。
OSI模型中,把物理层+数据链路层+网络层合并称为现场总线,其通信接口就是8针的RJ45水晶头。显见,RJ45与RS232/RS485/RA422完全不是一回事。
网络层的数据分组是数据帧的组合。通俗地说,数据分组是一篇短文,或者是一页待传递的数据组合单元。
网络层在发送数据分组时,其路由问题和接收组合问题见下图:
我们看到网络层在通信时先由路由器确定路由路径,然后把分组发送到对方。对方接收到分组后,把分组按前后秩序组合起来,再解包为实际文档。
值得注意的是:由于网络层有了路由器,因此网络层支持星形网络结构。
现在我们来关注一下ISO/OSI的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毫秒让从站回应,再接收到从站发还的上行通信帧,总历时为:
如果有31个相同的仪表等待主站一一访问,则主站从访问第一个仪表开始,到最后回应完毕,总历时:
这里的1.12秒就是在通信速率为9600bps下这31台仪表的读数据循环周期,且忽略了主站再次发送下行通信帧的等待时间,实际时间会略微再长一些。
相信,看到这里,大家对MODBUS-RTU下的通信帧应当有了较为深刻的认识。
提醒大家:一个字有两个字节。一般地,字节只能用来表达8个开关量。但对于模拟量,则要用字来表达。例如电流1250A,16进制下是04E2H,要用2个字节才能表达完整。也因此,各种电力仪表中,模拟量都是用字来表达的。
以下是MODBUS的部分常用功能码,也即命令码:
以下是PLC在读取双投开关ASCO控制器的数据点表的下行和上行通信帧范例:
几个相关的问题解释一下:
1)有些现场总线,用令牌解决了总线的控制权问题。
大家很容易想到,如果从站有紧急事项需要主站来服务,可是MODBUS规定了轮询规则,等到自己的时候,可能会太迟了。于是许多现场总线就发明了一个特殊的东西,叫做令牌。令牌很短,只有一个字节,它可以很快地在总线上传递。令牌在各站点中传递,谁拿到令牌,谁就是主站,就可以发布信息。如果本站没有事情需要发布,就把令牌交给下一个站点,由此解决了总线占用问题。
2)当链路发生断路时,为了避免出现通信中断,可采用双主站措施。双主站(PLC的两个主站RS485接口)之间用握手线连接,平时主用RS485开通,而辅助RS485浮空。浮空的RS485虽然接在总线上,但它处于高阻态等效于完全脱离。当发生断路时,从站确认后立即开通通信,从链路两头进行连接通信。
有时,还采取环状通信措施。限于篇幅,不做介绍。
3)MODBUS可工作在网络层,此时协议变为MODBUS-TCP,但还是符合主从结构。
4)MODBUS协议是美国莫迪康公司发明的,该公司的宗旨是:MODBUS协议为不收费的公开协议。后来莫迪康公司被施耐德公司收购了,施耐德公司继承了莫迪康公司的做法,MODBUS是不收费的公开协议。既然MODBUS已经成为施耐德的协议,施耐德把它延伸到网络层,构建了网络层的MODBUS-TCP协议,以及内部专用的MODBUS-PLUS协议。限于篇幅,对于这两个协议的描述此处从略。
5)关于RS232和RS485的区别
学过模电和数电的人都知道差分电路。差分电路具有共模抑制比,能够消除共模误差。RS485接口就具有此特征。因此RS232接口的传输距离仅为十几米,而RS485/RS422接口的传输距离为1200米。
我们从图中看到,虽然RS232和RS485接口的外形是一致的,但它们的性能和信息交换模式不同,因此抗干扰能力也不同。
6)当距离很长的时候,RS485接口还可以接入光纤,但需要配备1对光纤转换器。之所以要1对,是因为其中一只用于电转光,而第二只则用于光转电。光纤收发器中间的通信介质就是光缆或者光纤。(注意哦,光纤是光缆的芯线,不要以为是两种东西)
光纤分为单模和多模。单模的光纤较细,光在传输过程中反射较少,因而失真小,其传输距离可达15km以上;多模的光纤较粗,光在传输过程中反射较多,因而失真大,其传输距离为1.5km。
7)CRC校验码是二进制不借位的除法,用以做接收信息是否出错的检验。
注意这里的f(x)就是除去CRC校验码的MODBUS通信帧,除数是CRC16。帧中的CRC是运算后的余数。
主站在发送帧之前,把帧先做CRC计算,再把CRC运算的余数附在帧尾发送给从站。从站接收到帧后,先对帧除去CRC的部分做CRC运算来检验是否正确,若不正确,从站要求主站重发。
同理,当从站发送信息给主站时,主站也根据CRC来检查数据的正确性。若发现错误,则要求从站重发。
8)关于MODBUS-RTU、MODBUS-ASC和MODBUS-TCP
如果MODBUS中字节表达数据的方式采取BCD码,则被称为MODBUS-RTU;如果MODBUS中字节表达数据的方式采取ASCII码,则被称为MODBUS-ASC;如果MODBUS运行在网络层上,则被称为MODBUS-TCP。
ASCII码的内容如下:
MODBUS在实际使用中,大多数都采用BCD码,因此MODBUS-RTU得到广泛应用。
BCD码如下:
值得注意的是:在协议使用中,数据帧中的数值都是用16进制数来表达的。例如100A电流写成0X64H,而380V电压则写成0X17CH。
9)关于RS485网络使用的双绞通信线和接地
我们知道,两条平行的线缆之间会有分布电容,而分布电容会削弱信号的强度。为了消除分布电容,通信线的两条平行线需要按一定长度互相旋转对绞,这种线被称为双绞线。双绞线的对绞长度有规范,它与通信速率密切相关。在实际使用时,要按通信速率来选择合适的双绞线。
双绞线的外层有屏蔽层。屏蔽层必须单点接地,不得在线头线尾同时接地,防止地电流流过引起干扰。在实际布线时,采取各线段独立接地,切忌采用所有线段的屏蔽层前后连接统一接地的做法。
10)关于菊花瓣的通信链路连接方式
绝对的菊花瓣链形网络是不存在的。事实上,我们用菊花瓣链形接线方法构建的通信网络中,各个节点是接线端子,由接线端子通过双绞线连接到各个子站,这些双绞线就构成了类似的星形结构,我们不妨把这种接线方式称为链形网络下的准星形接线。
在工程实践中证明,准星形接线的长度不得超过70cm。一旦超过,则可能出现通信不稳定状态。
事实上,70cm也成为行业中的一条不成文的质检规范。
100欧终端电阻在通信速率低时可加可不加,但当通信速率较高时(高于19.2kbps),建议一定要加。例如PROFIBUS下的RS485网络,终端电阻已经植入终端设备中,只需拨动开关即可加入或者撤离。
终端电阻的用途是吸收反射波。
我们在两棵树间紧紧地绑上一根绳子,接着敲击绳子的某一侧,我们会看到有传导波向另一端传去,并能看到反射波。如果敲击的频率适当,则在绳子中间出现波的不动点,这叫做驻波。
对于通信来说,不管是反射波还是驻波,将严重影响通信质量。终端电阻用于吸收反射波,并且可提升最终子站的电平水平。
RS485和MODBUS这两个概念,都需要通过实践去掌握它们,单单凭着阅读文本,很难理解和掌握。如果这篇小文能给大家的实践活动带来益处,我会感到分外欣慰。
来源:知乎问答,张白帆老师
相关推荐
- 用闲置电脑当软路由安装OpenWRT(小白教程)
-
话说软路由系统OpenWRT用起来真是香,里面的好多功能都是普通路由无法实现的,由于众所周知的原因,在这里就不细说,等安装完自己体验吧。今天就介绍用一台闲置的电脑(自带两个网口)充当软路由,安装Ope...
- 一招把废旧路由器改成交换机(用旧路由器做交换机)
-
家里面的路由器用个几年,就会WIFI变卡,新路由器买回来,旧路由器就没什么用了?我在这里教大家把老路由器变成交换机。近两年新出的路由器,基本都是2个LAN口,接网络设备还需要买交换机,淘汰下来的路由器...
- 如何将PC电脑变成web服务器:将内网主机映射到外网实现远程访问
-
我是艾西,今天跟大家分享内容还是比较多人问的一个问题:如何将PC电脑变成web服务器。内网主机作为web服务器,内容包括本地内网映射、多层内网映射解决方案、绕过电信80端口封锁、DDNS功能的实现(非...
- 电脑怎么改Wi-Fi密码(电脑怎么改wifi密码视频教程)
-
一.电脑打开“任意浏览器ie/google浏览器等”——>地址栏里输入管理ip地址然后按“回车键”打开该地址,如下图所示。二.输入正确的管理员密码——>点击“登录”即可(下图是PC版本的路...
- 旧路由器不要扔,可当电脑无线网卡使用,你还不知道吧!
-
家里有旧路由器,卖二手又不值钱,扔了又可惜。想不到路由器还有以下这些功能:扩大Wifi覆盖范围;充当电脑无线网卡;把这个技巧学起来,提升网络冲浪的幸福感!导航栏路由器恢复出厂设置(通用教程)有线桥接无...
- 硬件大师AIDA64 5.60.3716更新下载:“认准”Win10
-
著名硬件测试工具AIDA64更新至5.60.3716Beta版,本次更新修复了Win10Build版本号检测错误问题,识别更准确。另外还添加了对ITEIT8738F传感器、ASRock主板、NVI...
- 互联网病毒木马与盗版软件流量产业链(一)
-
A.相关地下产业链整体深度分析可能很多用户都有这样的经历,就是不管打开什么网站,甚至根本就没有打开浏览器,都会跳出来一堆的弹窗广告。那么,这个用户要么是中的病毒木马,或者是使用了盗版软件。不管是...
- 穿越火线tenparty.dat文件损坏怎么办?
-
很多玩家在玩火线的时候经常会因弹出错误代码,而被退出游戏。下面就教大家一些常见错误代码的解决方案。方法/步骤1SX提示码提示说明:您的电脑出现1,xxx,0(xxx代表任意数字)提示码,存在游...
- 办公小技巧015:如何关闭Windows Defender安全中心
-
WindowsDefenderWindowsDefender是Widows中自带杀毒软件,可以检测及清除潜藏在操作系统里的间谍软件及广告软件。为电脑提供最高强度的安全防护,也被誉为Windows的...
- Win7/8.1/10团灭:微软发现严重漏洞
-
据外媒报道称,微软已经停止为Windows7发布新的安全更新了,理由是IE存在严重漏洞。存在严重漏洞的IE按照微软的说法,这个远程代码执行漏洞存在于IE浏览器处理脚本引擎对象的内存中。该漏洞可能以一...
- WinCC flexible 2008 SP4 的安装步骤及系统要求
-
1、软件安装过程安装注意事项(必须严格遵守):软件仅支持以下操作系统(必须是微软原版的操作系统,Ghost版系统不支持,如番茄花园、雨林木风、电脑城装机版等):WinCCflexible2008...
- Windows三方杀毒防护软件可能问题以及使用建议
-
在处理ECSWindows相关案例中,我们遇到很多奇怪的操作系统问题,例如软件安装失败,无法激活操作系统,无法访问本地磁盘,网络访问受到影响,系统蓝屏,系统Hang等,排查发现这与客户安装的各类杀...
- 杀毒软件被指泄露个人隐私(杀毒软件查出来一定是毒吗)
-
最近的多篇报道显示,你使用的杀毒软件在监视着你,而不仅仅是你计算机上的文件。2014年的一项研究使用虚拟机监视了杀毒软件产品向企业发送了什么信息。他们发现,所有测试的杀毒软件都给电脑分配了一个唯一的识...
- 开源杀毒软件ClamAV在推出约20年后终于到达1.0版本
-
ClamAV是一个开源的反病毒引擎,用于检测木马、病毒、恶意软件和其他恶意威胁。与商业Windows反恶意软件程序相比,它的检测水平相当低,但开发工作已经持续了几十年。该工具可用于所有平台,尽管它主要...
- 【Excel函数使用】时分秒时间怎么转换成秒?(二)
-
本节主要分享的函数是IFERROR和NUMBERVALUE上回我们用MID和FIND函数已经将数值提取出来,但是一些错误的返回值显示“#VALUE!”,此时我们需要检验错误返回值,并将错误值返回指定值...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)