工业控制总线MODBUS

[复制链接]
查看1644 | 回复0 | 2011-9-14 19:34:32 | 显示全部楼层 |阅读模式
<

Modbus目前在自动化领域使用非常广泛,原因之一是它纯粹是一个"软"协议,不依赖于任何通讯介质和通讯设备.
MODBUS最早是由莫迪康(MODICON)公司研究开发的,该公司是世界知名的PLC生产厂家,因此它开发的协议自然与工业控制密切相关,目前该公司已经被施耐德集团收购,这必将进一步推动MODBUS的发展.
之所以说它是工业控制总线,是因为它不是为计算机和计算机通讯而设计的,它更适用与控制器和控制器之间的通讯.
目前,MODBUS和TCP/IP结合,充分利用了MODBUS和TCP/IP的特点,使计算机通过以太网控制工业分布设备成为一种流行趋势,自动化设备已经成为网络的一部分.
与MODBUS相反的是串口通讯仅仅定义的硬件的通讯规范,而没有具体的软件通讯协议,通常称之为自由协议,因此,大量的串口设备都借助于MODBUS实现了串口的协议通讯,我前文提到的XMT系列仪表就是采用这种方式.
MODBUS是典型的主从方式通讯模式,也就是说对话是由主控制器发出的,从控制器被动地返回主控制要求的信息或者执行主控制器要求的命令.
主控制器即可以单独和网络中的任何一个从控制器单独通讯也可以采用广播的方式,如果是单独通讯,则从设备返回信息,如果是广播方式,从设备不返回信息.
MODBUS定义了一个与硬件通讯层无关的简单协议通讯单元(PROTOCAL DATA UNIT),类似于祯结构,加上附加域构成了基本的应用数据单元.
1、地址域
指向需要通讯控制器的逻辑地址(一个字节),是由控制器本身规定的逻辑地址,用来区分需要通讯的控制器,对于一个符合MODBUS通讯协议的控制器,自身回提供地址设定功能,可能是由地址开关或者软件设置决定相应的地址.
2、功能码
长度一个字节,每一个功能码代表不同的命令,要求被通讯的控制器执行相应的动作.
3、数据区域
向控制传递数据或者接收数据.
4、CRC16校验
MODBUS通讯是主从关系,也可以看成是客户机和服务器的关系,客户机是主控制器,服务器是从控制器,由客户机发起请求,由服务器作出应答.
应答分成两种,一种是正常应答,另一种是错误应答(从控制器捕捉到错误,比如CRC16校验错误)
可见,MODBUS的通讯ADU非常小,特别适用与控制之间的实时通讯,其中最重要的两部分是功能码和数据两部分.
功能码由一个字节组成,因此最多可能是255个命令(实际规定的没有这么多)
数据部分根据功能码的不同有不同的含义,它支持下表的数据类型.
可以看出,它支持的数据类型非常特别,和一般通讯的数据类型不同.如果用过PLC的朋友就非常容易理解它的含义,毕竟MODBUS是工业控制总线,所以它的数据类型定义完全是针对设备控制的.
1、离散量输入,访问类型只读,长度一个位
针对的是设备的开关量(数字量输入),比如设备包括许多外部开关,而外部开关的状态完全取决与外部,设备本身无法控制,对设备来说是只读的,因此对与设备通讯的主控制器(客户机)来说,也是只读的
2、线圈,访问类型是读写,长度是位
PLC编程也有线圈的概念,可以理解数字量输出,比如设备控制一些继电器,对设备来说,它是位输出(数据采集中称做数字量或者开关量输出),它当然是可写的,因为我们必须能够控制继电器的通断状态,同时,也应该是可读的,因为有时我们必须知道当前线圈(继电器)是通状态还是断状态.
单片机的RAM中,一般都有位操作区,按字节分布,但字节中的每一位都是可以控制的,对应开关量,PLC中也是如此,我们既可以一次操作一个位,也可以一次操作一个字节(8位)或者一个字(2个字节一,16位),因此,离散量输入和线圈的概念实际就是数据采集中的数字量输入和数字量输出.
3、输入寄存器(只读,字,两个字节,无符号最大可以表示65535)
只读表示设备(从控制器)中寄存器的数据是不可以改写的,比如设备读取外部传感器,并把采集的结果存入到设备中的寄存器中,这样的数据当然不允许设备直接更改,完全取决于外部传感器返回的值.
4、保持寄存器(字,两个字节,最大可以表示65535,可读写)
比如PLC中有一个模拟量输出,模拟量输出的值肯定是设备写入的,因此比如是可写的,同时,我们也需要知道当前写入的值是什么,因此也必须是可读的.
以功能代码01(0X01)为例看以下功能代码和数据的组织格式,网络上有详细协议.
一次可以读取1到2000(0X7D00)个线圈的状态
NI的网站上免费提供了MODBUS库,使用非常方便,只需要填写必要的信息,就可以自动完成ADU的格式,包括CRC16校验,代码完全公开,可以结合协议仔细分析,有助于理解MODBUS.
热帖推荐
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则