modbus tcp主站和从站_ModBus的加深理解与实际应用举例

今天主要讲一下怎么更加用简单的方式去理解ModBus协议。

(一)什么是协议ModBus是一种协议,可以理解成一种语言。比如小王说的是汉语,小张说的是英语,如果小王和小张路上碰见了,那小王说了一堆,小张啥也听不懂。所以如果小王和小张想要交流沟通,弄清楚对方说什么话,首先他俩就得使用同一种语言。现在小王和小张现在都学会汉语了,准备沟通了,他俩可以说话沟通、可以打字微信聊天,都可以交流。说话沟通就可以理解成RTU通讯(屏蔽双绞线),打字聊天就可以理解成TCP通讯(网线)。他俩沟通的语言没有发生变化,仍然是汉语,只是沟通的方式变化了。沟通方式变化了,一个是说,一个是写,反应到ModBus协议就是一个是ModBus_RTU另一个是ModBus_TCP,两种接线也不一样。RTU就是串口接线,比如485、322、422,用屏蔽双绞线通过手拉手的方式进行连接;TCP就是RJ45以太网接口,就是水晶头网线。(二)模式举个例子:小明和4个小朋友准备用汉语交流说话。

a0f6f00e06195e70d5c55e43f76ee3aa.png

1、 小明和A说话,小明只有问了A,A听到后 才能去 回答 小明。 如果小明不问,A就不会回答。 这种模式就叫做“半双工”, 问了才能答,不问就不回答 。2、 小明准备挨个问ABCD4个小朋友一些问题,小明就是主站,ABCD就是从站。ABCD4个小朋友挨个进行编号,A就是1,B就是2,C就是3,D就是4,这1234就是从站的地址。 3、小明问了A,A开始回答,等A说完了,小明开始问B。A与B的间隔,这个就是“轮询间隔”。如果A还没说完,小明就是开始问B,那A说的话就听不完,数据就不完整。 4、小明问了A,他俩说话速度都特别快,这个说话的速度就是波特率,说的快了,小明就得离得A近点,要不就听不清楚;说的慢点,就可以离得远点。波特率9600传输速度就比19200传输速度慢,但是传输距离长。 三、使用方法 如果上面的知识都没有看懂,没关系,我们直接说方法。 1、确定仪表有ModBus协议,一般来说接线端子上“D+   D-”就是ModBus协议。 2、设置参数,设置仪表的波特率、停止位、校验位;然后设置上位机的参数,要与仪表一致。 3、(1)串口连接COM接口

4cb512906cdcd3275ec14c8437af415b.png

直接仪表的485线直接接到电脑主机后端的COM口,这个需要在串口里进行设置。 (2)通过串口服务器

c2303034a45afaddd0d8db8f8bfd1e5d.png

将仪表接到串口服务器的D+和D-接线端子,然后网线连接到上位机电脑。这个就是ModBus_RTU转TCP。相当于串口服务器就是主站,仪表就是分站。 这个时候我们就需要对串口服务器进行设置,以MOXA串口服务器举例2ecb7136507036b0dd3f4ec7ed32564c.png在浏览器输入moxa串口服务器的地址,默认是192.168.127.254,进入MOXA串口服务器设置页面。网页最左边文件夹类型的就是设置菜单,只说有用的:Network Settings:网络设置,在这里可以修改moxa串口服务器的网络地址。Serial Settings:端口设置,修改波特率、奇偶校验等参数,打开以后有port1就是端口1的意思。Operating Settings:模式设置,比如服务器、客户端的设置。 Network Settings: 网络设置

af0398305860e34f46862e81b5b79b9c.png

IP address:IP地址Netmask:子网掩码Gateway:网关 Serial  Settings: 端口设置

3ff126f6a4367d20b29dd936cefe3493.png

Baud rate:波特率,一般是9600Data bits:数据位,一般是8Stop bits:停止位,一般是1Parity:校验方式,一般是none无校验,另外偶校验EVEN,奇校验ODDFlow control:流量控制,一般不管,就默认RTS/CTSInterface:接线方式,一般是RS482 2wire,485两线制。

Operating Settings:模式设置(重点重点重点)

a5be97fad7dc35a96c716a93858a9565.png

Operation mode:模式,选择TCP Server Mode,服务器模式。TCP alive check time:网络连接检查时间。默认7min。什么时候用的到,就是在网络拥堵或是连接不稳定的时候用的到。串口服务器会每40s发送一个检测到上位机,上位机会回复一个数据,串口服务器就记住这个时间,然后每1分钟,串口服务器会取当前系统时间,与回复时间进行对比,如果对比值超过设定值,串口服务器就会强制断开TCP连接。Inactivity time:不活动时间。意思就是如果串口服务器有数据就建立TCP连接,如果没数据,就自动断开TCP连接。一般默认不用修改。Max connection:一般选择1,modbus协议也只能是一个上位机。 Packing length:打包长度。设置这个就是说一个从站发给主站一个数据包固定长度, 设置2字节,就是2个字节的数据一满,就发送数据,不用等 Force transmit:强制传输时间。 一般串口服务器收到串口数据会先放到缓冲区,等到缓冲区满或是强制时间到,就会打包发给以太网端口。比如30ms,就是说只要到30ms串口服务器就打包传输。默认0。这个设置需要计算尝试,如果设置时间过小,数据包未完整打包,有缺失,上位机就会重新给从站发指令,从站重发数据;如果时间过大,上位机的轮询间隔小,上位机就会认为从站无反应。 默认0。Local TCp port:端口号。1号端口就是4001,2号端口就是4002。 上面的参数设置完成后,一般来说就可以正常通讯了 4、设置上位机参数,我们以杰控软件为例。ce54c6419de9d8852debe0b9e2a2e7f3.png协议:MB_RTU/TCP 站号:从站地址 转换设备IP地址:MOXA串口服务器的IP地址 通讯超时:默认1000。通过设置这个时间就可以设置轮询间隔时间。比如1030,这个轮询间隔时间就是30*10=300ms;如果设置成1002,就是20ms的轮询间隔。 重试次数:默认 扫描级别:默认 本地IP地址:就是上位机电脑的IP地址。 通讯诗句 数据类型:这个就是选择ModBus的功能码,比如03功能码就是读数据的。 访问方式:读写 首地址:就是通讯点表的第一个数据是0还是1. 开始地址:就是准备从第几个点表的地址开始读。 长度:就是读多少个字节。这些都设置完成,基本上通讯就建立完成了。我们就可以在上位机组态里正常使用了。四、遇到的问题1、一般来说就是通讯硬件设置,仪表的和上位机必须一致,有一个地方不一样,就无法正常通讯。2、串口服务器最多只能联一个上位机,这是modbus协议本身的限制,只能有一个主站。3、modbus的轮询机制,注定了很多同时性比较差,只能一个一个读,如果数据量太大,就会影响到数据上传的实时更新,所以有时候不太适合实时性数据特别强的地方使用。4、modbus的优点就是简单便宜,大量的仪表厂家都在使用,通用性强,能解决很多十几年前的设备通讯问题,能够在自动化改造中,用最小的成本完成数据上传。