企业简介

北京世纪长秋科技有限公司是从事工业自动化软件研发的高新技术企业,提供软件开发、销售、服务及工业自动化系统集成等整套服务,以创新为本的理念,为用户提供量身定做的解决方案。

  • 公司类型:供应商

联系方式
  • 北京世纪长秋科技有限公司
  • 地址:北京市朝阳区惠新东街8号设计大厦14层
  • 邮编:100029
  • 电话:010-84645656
  • 传真:010-84646515
  • 网址:http://www.chncla.com
  • Email:info@chncla.com
  • 联系人:
案例详细
标题MODBUS协议在世纪星组态软件中的应用
技术领域仪器仪表
行业
简介
内容


作者简介:曾慧(1985- ),女,新疆昌吉人,毕业于上海同济大学电气工程及其自动化专业,从事于硬件设备与世纪星组态软件通信的驱动开发工作。

    摘  要:作为工业控制领域常用的通信协议——Modbus,有方便易用,性价比高,传输高速、高效等优点。Modbus技术以其先进性、开放性、成熟性广泛适用于各种工厂自动化领域中,已被众多厂家接受和采用。本文简要介绍了Modbus协议在世纪星中的应用,以及它的基本内容。

    关键词:Modbus;组态软件
 
    1  引言

    随着工业自动化的发展,MODBUS成为了工业控制系统中的一种通用协议。由于该协议的简单且通用,得到了众多仪表厂商的支持,成为仪表及智能终端的一项工业标准,在工业监控系统中得到了广泛的应用。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以进行通信。它的开放性、可扩充性和标准化使不同厂商生产的控制设备可以简单可靠地连成工业网络,进行系统的集中监控,从而成为最流行的协议之一。同样,世纪星组态软件也提供了支持上位机和下位设备进行MODBUS通信的驱动程序,使用户可以方便使用装有世纪星软件的上位机和下位的设备进行通信。

    2
  MODBUS通信协议

    MODBUS协议是莫迪康公司1978年发明的一种用于电子控制器进行控制和通信的协议。此协议支持传统的RS232、RS422、RS485标准和以太网设备。不同厂商生产的符合MODBUS协议的控制设备可以连成工业网络,进行集中监控。MODBUS协议采用主从(master-slave)技术,是一种问答方式的通信协议。每次通信均由主机发出数据请求信息,从机接收到正确消息后就可以发送数据到主机以响应请求;主机也可以直接发信息修改从机的数据,实现双向读写。

    MODBUS协议支持两种数据传送模式,即ASCII码和MODBUS-RTU。

    (1)    MODBUS-RTU

                    表1  主机询问数据帧报文
从机地址     功能码     数据起始地址     数据量     冗余校验
Slave         Func      Start   Start    Num Num    CRC  CRC
Add           Code      Add H  Add L     H   L      -16H  -16L

                    表2  从机回答数据帧报文
从机地址     功能码     字节量        数据         冗余校验
Slave        Func       Byte       Data …Data     CRC  CRC
Add          Code       Count      Byte1  Byte n   -16H  -16L
 
     (2)  ASCII码
 
 
                    表3  主机询问数据帧报文

起始符    从机地址  功能码   数据起始地址   数据量    冗余校验  结束符     
start      Slave     Func    Start Start    Num Num    LRC LRC   Stop
character  Add       Code    Add H Add L    H   L     -16H -16L  character
 
                    表4  从机回答数据帧报文

起始符   从机地址  功能码   字节量     数据       冗余校验     结束符
start     Slave     Func    Byte    Data …Data   LRC  LRC     Stop
character  Add      Code    Count   Byte1 Byte n  -16H -16L    character
 
    3  MODBUS在世纪星中的应用

    在世纪星中,除了支持MODBUS-RTU和ASCII码两种数据传送模式外,还支持MODBUS TCP/IP 传送方式。事实上,MODBUS TCP/IP的命令格式和MODBUS-RUT是很相似的,MODBUS TCP/IP只是缺少两个字节的CRC校验。在MODBUS协议中,是根据不同的功能码来完成不同的读写功能的,世纪星中支持的功能码及其功能如表5所示。

                     表5  世纪星所支持的功能码

  功能码         寄存器名                 功能
   01H             0x                  读取线圈状态
   02H             1x                  读取输入状态
   03H             4x                  读取一个或多个保持寄存器
   04H             3x                  读取一个或多个输入寄存器
   05H             0x                  强置一个逻辑线圈的通断状态
   06H             4x                  预置一个寄存器(数据类型为UINT/INT/BCD)
   10H             4x                  预置两个寄存器(数据类型为LONG/FLOAT)
 
    在硬件设备中,数据存储在寄存器内,每个存储数据的寄存器对应一个寄存器地址,上位机就是根据这些地址组织命令去读写寄存器里的数据。一个两个字节的整型数据存储在一个寄存器地址中,一个四字节的整型或浮点型数据则要存储在连续的两个寄存器地址中,通常都是高地址存放数据的高字,低地址存放数据的低字。

    由于很多用MODBUS协议的仪表厂家都在以自己的方式来说明仪表上的参数以及它对应的寄存器地址,所以一部分厂家是以十六进制来标记寄存器地址,而另一部分厂家用十进制。为了使用户在工程里建立变量时方便的和仪表上的寄存器连接,世纪星分别在MODBUS-RTU和ASCII码两种通信方式下,支持十六进制通道号和十进制通道号两种变量连接方式,因此,就免去了用户做很多的十六进制和十进制之间转换的工作。

    在设备的说明书中,一般会指定寄存器地址,数据类型,该地址的寄存器支持的功能码等要素,以MODBUS-RTU 十六进制的驱动为例,如果寄存器地址为0005H,数据类型为两个字节的整形,支持03H功能码读数据,则对应到世纪星软件中需要连接的变量为4x0005,变量类型为I/O整数,数据类型可以分为有符号的INT或无符号的UINT 或者BCD码,在进行通信时,世纪星发送的以及设备返回的命令如下表所示。

    主机发送:

从机地址     功能码     数据起始地址      数据量     冗余校验  
  01           03          00  05          00 01      94  0B

    从机返回:

从机地址     功能码        字节量          数据      冗余校验
  01           03            02            00 1A      39  8F
 
    由设备返回的命令,可以知道设备返回了两个字节的有效数据(00 1A),则寄存器地址为0005H里的数据为001AH=26。

    如果寄存器地址为0009H,数据类型为两个字节的整型,支持06H功能码写数据,则对应到世纪星软件中需要连接的变量为4x0009,变量类型为I/O整数,数据类型可以为有符号的INT或无符号的UINT 或者BCD码,在通信时,世纪星发送的以及设备返回的命令如下表所示(写入数据258=0102H):

    主机发送:

从机地址     功能码     数据起始地址     写入数据     冗余校验
  01           06         00  09          01 02        D9  99

    从机返回:
 
从机地址     功能码     数据起始地址     写入数据     冗余校验
  01           06         00  09          01 02        D9  99

    经过发送上表中的命令,0102H便成功写入到寄存器地址为0009H号的寄存器中。

    如果寄存器地址为0010H,数据类型为四个字节的整型或浮点型,支持10H功能码写数据,则对应到世纪星软件中需要连接的变量为4x0010,变量类型为I/O实数,数据类型可以为有整型的LONG或浮点型的FLOAT,在通信时,世纪星发送的以及设备返回的命令如下表所示(写入数据258=0102H):

    主机发送:

从机地址  功能码   起始地址   寄存器个数  字节个数  写入数据   冗余校验
   01       10      00 10       00 02        04     01 02 00   00  DA AC

    从机返回:

从机地址    功能码    数据起始地址    写入字节个数    冗余校验
  01         10         00  10          00  04        C0 0f

    经过发送上表中的命令,0102H便成功写入到寄存器地址为0010H号的寄存器中,0000H成功写入了寄存器地址为0011H号的寄存器中。

    上述内容就是在世纪星中根据设备说明书连接保持寄存器的变量连接方式,以及通信的过程,其它的例如输入寄存器,输入线圈等都和保持寄存器是类似的,通过特定的功能码对特定地址的寄存器进行读写操作,这里就不一一介绍了。

    4
  小结

    在平时用户使用世纪星和支持MODBUS协议的仪表进行通信的过程中,在多数情况下,世纪星都能很正常的和仪表进行通信,但现在还是避免不了的一种情况是,有些用户的仪表支持的并不是标准的MODBUS协议。MODBUS是一种通用的协议,但就细节来说,很多厂家还是各有各的用法,这使笔者认识到了这里的MODBUS通信还是缺少一些灵活性,而世纪长秋一定会针对这种情况做一些改进工作,力求更多的使用MODBUS协议的客户能够方便使用世纪长秋的软件和仪表高效可靠的通信。

                                                                      ——转自《自动化博览》