Modbus+协议 - 图文
更新时间:2024-05-03 20:36:01 阅读量: 综合文库 文档下载
Modbus 协议
工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也
为网络管理提供了方便。Modbus就是工业控制器的网络协议中的一种。
一、 Modbus 协议简介
Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 1、在Modbus网络上转输
标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem组网。
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据做出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 2、在其它类型网络上转输
在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。
在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。 3、查询—回应周期 (1)查询
查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。 (2)回应
第 1 页 共 33 页
如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。
图1 主-从 查询-回应周期表
二、两种传输方式
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
ASCII模式
RTU模式
所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。
在其它网络上(象MAP和Modbus Plus)Modbus消息被转成与串行传输无关的帧。 1、ASCII模式
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。 代码系统
· 十六进制,ASCII字符0...9,A...F
· 消息中的每个ASCII字符都是一个十六进制字符组成
第 2 页 共 33 页
每个字节的位 · 1个起始位
· 7个数据位,最小的有效位先发送 · 1个奇偶校验位,无校验则无
CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。 CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。 CRC添加到消息中时,低字节先加入,然后高字节。 CRC简单函数如下:
unsigned short CRC16(puchMsg, usDataLen)
unsigned char *puchMsg ; /* 要进行CRC校验的消息 */ unsigned short usDataLen ; /* 消息中字节数 */ {
unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */ unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */ unsigned uIndex ; /* CRC循环中的索引 */ while (usDataLen--) /* 传输消息缓冲区 */ {
uIndex = uchCRCHi ^ *puchMsgg++ ; /* 计算CRC */ uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ; uchCRCLo = auchCRCLo[uIndex] ; }
return (uchCRCHi << 8 | uchCRCLo) ; }
/* CRC 高位字节值表 */
static unsigned char auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
第 3 页 共 33 页
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 } ;
/* CRC低位字节值表*/ static char auchCRCLo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
第 4 页 共 33 页
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 } ;
ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。下表1是ModBus的功能码定义。
表1 ModBus功能码 01 READ COIL STATUS 02 READ INPUT STATUS 03 READ HOLDING REGISTER 04 READ INPUT REGISTER 05 WRITE SINGLE COIL 06 WRITE SINGLE REGISTER 15 WRITE MULTIPLE COIL 16 WRITE MULTIPLE REGISTER
ModBus网络只是一个主机,所有通信都由他发出。网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。表2是ModBus各功能码对应的数据类型。
表2 Modbus功能与数据类型对应表
(1)ModBus的传输方式
在ModBus系统中有2种传输模式可选择。这2种传输模式与从机PC通信的能力是同等的。选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)这两种模式的定义见表3
表3 ASCII和RTU传输模式的特性
第 5 页 共 33 页
ASCII可打印字符便于故障检测,而且对于用高级语言(如Fortan)编程的主计算机及主PC很适宜。RTU则适用于机器语言编程的计算机和PC主机。
用RTU模式传输的数据是8位二进制字符。如欲转换为ASCII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。用以构成报文的ASCII字符都是十六进制字符。ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。 (2)ModBus的数据校验方式 CRC-16(循环冗余错误校验)
CRC-16错误校验程序如下:报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位(MSB)首选发送。报文先与X↑16相乘(左移16位),然后看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示为二进制数11000000000000101。整数商位忽略不记,16位余数加入该报文(MSB先发送),成为2个CRC校验字节。余数中的1全部初始化,以免所有的零成为一条报文被接收。经上述处理而含有CRC字节的报文,若无错误,到接收设备后再被同一多项式(X↑16+X↑15+X↑2+1)除,会得到一个零余数(接收设备核验这个CRC字节,并将其与被传送的CRC比较)。全部运算以2为模(无进位)。
习惯于成串发送数据的设备会首选送出字符的最右位(LSB-最低有效位)。而在生成CRC情况下,发送首位应是被除数的最高有效位MSB。由于在运算中不用进位,为便于操作起见,计算CRC时设MSB在最右位。生成多项式的位序也必须反过来,以保持一致。多项式的MSB略去不记,因其只对商有影响而不影响余数。 生成CRC-16校验字节的步骤如下: ①装如一个16位寄存器,所有数位均为1。
②该16位寄存器的高位字节与开始8位字节进行“异或”运算。运算结果放入这个16位寄存器。 ③把这个16寄存器向右移一位。
第 6 页 共 33 页
④若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行“异或”运算;若向右移出的数位是0,则返回③。 ⑤重复③和④,直至移出8位。
⑥另外8位与该十六位寄存器进行“异或”运算。
⑦重复③~⑥,直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。 ⑧这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。
另外,在某些非ModBus通信协议中也经常使用CRC16作为校验手段,而且产生了一些CRC16的变种,他们是使用CRC16多项式X↑16+X↑15+X↑2+1,单首次装入的16位寄存器为0000;使用CRC16的反序X↑16+X↑14+X↑1+1,首次装入寄存器值为0000或FFFFH。 LRC(纵向冗余错误校验)
LRC错误校验用于ASCII模式。这个错误校验是一个8位二进制数,可作为2个ASCII十六进制字节传送。把十六进制字符转换成二进制,加上无循环进位的二进制字符和二进制补码结果生成LRC错误校验(参见图)。这个LRC在接收设备进行核验,并与被传送的LRC进行比较,冒号(:)、回车符号(CR)、换行字符(LF)和置入的其他任何非ASCII十六进制字符在运算时忽略不计。
深圳市科立恒电子有限公司 http://www.szklh.com
详细介绍MODBUS 通讯协议的主要过程,通过DCS 系统与几种PLC 通讯的实例,介绍了MODBUS通讯接口在内蒙古岱海电厂DCS 中的应用。 关键词:
MODBUS;DCS;通讯
随着国内600MW发电机组自动化项目的实施,集散控制系统(DCS)在火电厂热工自动化领域已广泛使用,在众多的使用场合,普遍存在DCS与其他专用控制系统混合使用的情况,这些专用控制系统包括PLC、数据采集器和各种智能仪表。这种使用不仅由于DCS设备价格昂贵,更由于数据采集器,PLC等有比DCS更优的分散性、性价比和控制速度等性能,从而构成规模更大、性价比更优的控制系统,若将该混合系统融合成一个整体,使所有监视、控制都在DCS上进行,就涉及DCS与其他专用控制系统的通讯。本文着重介绍内蒙古岱海电厂#1机组使用MODBUS通讯接口实现上述通讯的方法。
第 7 页 共 33 页
控制系统之间的通讯历来让人望而生畏,如今值得欣慰的是几乎所有控制系统都具有MODBUS 通讯接口,使得系统间变得相对简单。MODBUS是GOULD INC注册的通讯协议商标,因为它有许多优点而被罗克韦尔(ROCKWELL)、通用电气(GE) 、西门子(SIEMENS)等国内外公司的产品广泛采用,作为与主系统(DCS)通讯的主要途径。 1.串行接口及MODBUS 通讯协议概述
MODBUS 通讯协议规定了2 种通讯方式。RTU(REMOTE TERMINAL UNIT)方式通讯采用8 位字节的二进制数据通讯,数据校验采用CRC 循环冗余校验,通讯速度较快;ASCII 方式采用7 位ASCII 码进行通讯,数据校验采用LRC 逻辑冗余校验,通讯速率较慢。在一个通讯系统中,只能选用一种通讯方式,两种方式不能并用。在我们的应用系统中一般使用RTU 的通讯方式,后面的叙述都是以RTU通讯方式为基础。MODBUS 通讯协议将通讯的双方规定为“主站”(MASTER)和“从站”(SLAVE)。每台从站都有自己的唯一编号,这个编号被称作从站地址,地址范围为1-255,通讯时先由主站发出通讯申请指令字符串,指令字符串由从站地址开头,从站只接受与自己地址相同的指令字符串,然后根据功能码类型,做出相应的回答,对发送给其他从站的指令字符串则不予理会。
MOSBUS 通讯时主站发出的指令字符串(报文)的通常格式如表1。
从站地址:主站指明的接收命令的从站地址。
功能码:功能码决定本次通讯要求从站执行的动作,功能码占1 个字节,表2 为MODBUS 协议规定的标准功能码,某些设备的MODBUS 协议只兼容其中的一部分功能码。
第 8 页 共 33 页
数据起始地址:通讯时读出、写入数据的起始地址。MODBUS 有多种批量数据操作功能码,可同时读出或写入多个具有连续地址的数据。数据起始地址占用2 个字节。 数据量:命令中进行读出或写入的数据数量,这些数据从起始地址开始连续地址排列,在对模拟量进行操作时,每个数据具有2 字节;在对数字量进行操作时每8 个数据为1 个字
第 9 页 共 33 页
节。数据量占用2 字节。
CRC 冗余校验:MODBUS 通讯协议采用CRC-16 冗余校验进行通讯错误校验,其校验方法是将整个通讯字符串(不包括最后两个校验字节)的所有字节进行移位并进行异或计算,接收方按同样的方法对收到的所有字符串进行校验,并将结果与收到的冗余校验结果进行比较,若一致则表明收到的字符串正确,否则接收到的字符串有错误,所传输的数据不会被采用。
MODBUS 通讯双方以寄存器地址将双方的数据对应起来,数据类型有数字量、模拟量两种,寄存器地址分下面四类。
1)内部数字量保持线圈,寄存器地址以1 开头,地址表示为1XXXX,内部数字量保持线圈(寄存器)可理解为设备的内部数字量中间寄存器,用于存放逻辑运算的中间结果,可读可写,与设备的I/O通道无关。
2)外部输入数字量线圈、继电器,寄存器地址以2 开头,寄存器地址表示为2XXXX,外部输入数字量线圈、继电器(寄存器),可理解为设备的数字量I/O 通道,每个寄存器和一个固定I/O 通道相对应,寄存器的状态代表数字量的状态,可读可写。
3)外部输入模拟量存储器,寄存器地址以3 开头,地址表示为3XXXX,外部输入模拟量存储器(寄存器) ,可理解为设备的模拟量I/O 通道,每个寄存器和一个固定I/O 通道相对应,寄存器的数值代表模拟量通道的数值,可读可写。
4)内部模拟量保持存储器,寄存器地址以4 开头,地址表示为4XXXX,内部模拟量保持存储器(寄存器) 可理解为设备的内部模拟量中间寄存器,用于存放数值运算的中间结果,可读可写,与设备的I/O 通道无关。 2. MODBUS的通讯过程
MODBUS是典型的主从式通讯协议,每个通讯网络中只能有一个主站,从站的数量不能超过255个,通讯时主站首先向从站发送通讯请求命令字符串,从站接收到命令字符串后,根据命令字符串中的命令码向主站做出相应的回答,完成一次通讯。整个的网络通讯都是由主站进行调度。下面举例说明几种常用功能码的通讯过程。
例1:假定主站要求17从站返回地址为0020~0056的内部数字量保持线圈的状态,主站发出的通讯请求命令字符串如表3。
第 10 页 共 33 页
从站地址:标明被读设备的地址,此例为地址为11。 功能码:此例为01。
数据起始地址:从站内部数字量保持线圈设定范围内的任何值,起始地址占2个字节,高位在前。此例为中为0013(MODBUS协议规定通讯字符串中的地址比实际地址小“1”)。 数据量:从起始数据地址开始,欲读取的连续地址的内部数字量的数量,该位占用2个字节。假定17从站制0020~0056地址的内部保持线圈状态如表4所示,则正常情况下从站回信字符串如表5。
第 11 页 共 33 页
从站地址和功能码与主站命令字符串相同。
字节量:所传数据字节的数量,每个数据字节包含8个数字量保持线圈状态。字节数量在1~250之间。本例中为5个字节。
数据状态:0020~0056地址的保持线圈状态,注意:每个字节中,高地址位在前。 例2:假定主站要求17从站传回地址为40108-40109的内部模拟量保持存储器的数值时,主站将发送如表6所示的通讯请求命令字符串,正常情况下从站回信字符串如表7。
第 12 页 共 33 页
数据状态1:地址为40108的内部模拟量保持存储器的内容为022B。 数据状态2:地址为40109的内部模拟量保持存储器的内容为0000。 例3:假定主站欲将17从站的173地址单元的内部数字量保持寄存器设置成“1”(ON),主站发送通讯请求命令码字符串如表8,正常情况下从站应答字符串如表9。
数据位(高位):开关状态值ON=FF/OFF=00。 数据位(低位):一直为00。
DCS与PLC之间通常采用支持MODBUS通讯协议的串行接口通讯方式。RS-232C是一种应用最广泛的串行通讯接口,在不使用调制解调器(MODEM) 时的通讯距离最远不超过15m。RS-422/485串行通讯接口在不使用MODEM时的通讯距离为1.2km,同RS-232C的区别只是在接口的电气规格方面。作为DCS工程师应该了解RS-232C的机械规格,通常规定数据终端设备DTE(Data Terminal Equipment)方的接口为25/9脚针式插座,数据电路终端设备DCE(Data Circuit terminating Equipment)方的接口为25/9脚孔式插头。RS-232C串行接口最常用的9针的信号定义如表10所示。通讯参数包括通讯波特率、起始位位数、字节位数、停止位位数、奇偶校验方式等,只有通讯双方的通讯参数设置相同,才能保
第 13 页 共 33 页
证正常通讯。
2.系统简介
内蒙古岱海发电有限责任公司位于内蒙古自治区乌兰察布盟凉城县境内的岱海湖南岸,厂址东距北京市370km,西距呼和浩特市110km,东南距丰镇市55km,在凉城县的西南方28km。岱海发电有限公司一期建设工程#1、#2 机组为两台600MW 亚临界参数燃煤发电机组,锅炉由北京巴布科克· 威尔科克斯有限公司供货,汽轮机由上海汽轮机厂供货,发电机由上海电机股份有限公司供货。
第 14 页 共 33 页
机组主要控制设备采用了西门子公司TELEPERM XP 分散控制系统。每台机组包括3 个电源柜、15 个系统柜(包括2 个APF 柜,1个扩展柜,1 个CM 通讯柜)、20 个端子接线柜、7 个继电器柜、1个ETS 机柜、2 个MEH 机柜,3 对冗余的过程站(PU)、1 对冗余的历史站(SU)、1 个工程师站(ES)、6个操作员站(OT)、1 台值长站及5 台打印机等组成。另有公用系统5 个机柜,其中包括1 个电源柜。
机组的其他控制系统较多且控制分散独立,如数字电液控制系统(DEH)采用西屋公司OVATION 系统,电气控制系统(FCS)采用国产南京东大金智DCAP-4000M 主控单元,远程I/O 采用无锡贝尔IDAS-2000 分散式智能数据采集网络,汽轮机安全控制系统(TSI)所配置的监视检测仪表是采用美国本特利·内华达公司的3500 系列,其他如锅炉吹灰,等离子点火,汽轮机旁路系统等PLC 的型号厂家繁多,因此将各系统进行集中监视和控制就成为必然,本工程设计采用了西门子公司的CM104 通讯模件作为DCS 与第三方PLC 或DCS 通讯,接口采用MODBUS 通讯协议。
如图2所示:锅炉吹灰(MODICON PLC,组态软件CONCEPT)、旁路系统(MODICON PLC,组态软件CONCEPT)、DEH 系统(西屋OVATION,组态软件OVATION)、FCS(国产通讯管理机)设计中按照厂方要求采用了双路通讯连接。尽管其他系统控制柜与DCS 控制
第 15 页 共 33 页
柜在同一电子间内,但通讯距离均超过15m,也就采用RS-485 远程通讯方式。DCS 系统通讯模件CM104 作为主站,第三方设备作为从站。每个CM 可以提供6 个9 针RS-232C 串行接口即可同时与6 套PLC 通讯,RS-232C 到RS-485 接口之间的转换使用PHOENIX 公司的产品。
第 16 页 共 33 页
3.应用实例介绍与分析
TELEPERM XP 与外围系统(这里统称为PLC)通讯用的模件处理器CM104,支持MODBUS 协议,工程中按照连接分为4 组共使用了6 个。岱海电厂使用的多种独立的PLC 及
第 17 页 共 33 页
成套的PLC 监控系统需要与DCS 通讯的,如表12 所列。CM104 的控制组态包括硬件及各类输入输出组态,在此不作介绍。
DCS 与PLC 的通讯大致可分为两种情况: 1)当PLC 与DCS 距离在15m 之内时,可将DCS 的CM104与PLC 的CPU 或者通讯模件采用RS-232C 直接连接方式。2)当PLC 与DCS 距离为数十米至1.2km 时,为了保证PLC 与DCS 的通讯效果,CM104 与PLC 之间将采用RS-232C 接口转化成RS-485/RS-422 接口。我们采用PHOENIX 公司的PSM-EG-RS-232C/RS-485-P/2D 模块作为RS-232C 转为RS-485 接口的适配器,其内部跳线设置:RS-485 BUS-END 为ON 即需要终端电阻,DTE/DCE 跳线设置为DCE 即数据电路终端设备方。CTS RTS / 和CTS RTS / 跳线设置为CTS RTS / 即硬件流控制模式。TELEPERM XP系统与PLC、FCS、IDAS 等第三方设备通讯连接概貌如图1 所示。在岱海电厂设计中所有通讯方式都是采用RS-485 远程方式。
第 18 页 共 33 页
3.1 锅炉吹灰及汽机旁路系统
设计中CM104 的MODBUS RS-232C 接口采用标准的9 芯RS-232C 串行接口,经过PHOENIX 公司的PSM-EG-RS-232C/RS-485-P/2D 接口适配器转为RS-485 接口,锅炉吹灰厂家自带ADAM-4520 模块也是RS-232C 转为RS-485/RS-422 接口的适配器。将PLC CPU11303 的MODBUS RS-232C 接口转为RS-485与DCS 通讯。实际使用中通讯经过两次的接口转换后连接不上。通过实验发现两个厂商接口转换适配器兼容性差。解决方法为使用同一厂商的适配器(ADAM-4520)后通讯连接正常。PLC 的通讯参数设置:Modbus Slave Address =1,Baud Rate = 9600 ,Data Bit = 8 (RTU 方式),Stop BIT = 1,Parity = Even Parity。由于其PLC 设计未使用冗余配置且理论上也不能实现双路的通讯连接。
汽机旁路系统采用的PLC 也是MODICON QUANTUM 系列,CPU 434 为冗余配置,每个CPU 有2 个MODBUS RS-232C 接口,可以实现通讯连接的冗余,即每个PLC 各送一路信号进同一个CM104,但由于冗余的CPU 之间并不能根据通讯的中断故障进行切换,所以实际应用中也不能实现双路的通讯连接。其接口同样需要从RS-232C 到RS-485 的转换, 接口适配器选用了PHOENIX 厂商的PSM-ME-RS-232C/RS-485-P,接口经过两次转换但不存在兼容性问题。这再次证明了DCS 与吹灰系统通讯故障的原因。PLC 的通讯参数设置:Modbus SlaveAddress =1 ,Baud Rate = 9600 ,Data Bit= 8 (RTU 方式),Stop BIT = 1 ,Parity = Even Parity。CM104与MODICON PLC通讯连接如图3。
第 19 页 共 33 页
3.2 数字电液控制系统(DEH)
数字电液控制系统(DEH)采用西屋公司OVATION控制系统。其通讯模件Link Controller Modules(LC:1C31169G02)提供了2个接口:J1口RS-232C为编程接口,J2口RS-485/422为通讯应用接口,设计中同样采用了RS-485远程通讯方式,正常施工接线后通讯却连接不上。经过与OVATION厂家的探讨,西屋公司对RS-485和RS-422的接线标准是相同的,即要采用4线制全双工串行连接。解决方法为选用RS-232C到RS-422的接口转换适配器,采用4线制全双工连接后通讯正常。LC模件通讯参数设置:Modbus Slave Address =1 ,Baud Rate =9600 ,Data Bit = 8 (RTU方式) ,Stop BIT = 1 ,Parity= Even Parity。由于其系统没有配置两块LC模件故实际没有实现双路的通讯连接。要注意的是OVATION系统不仅要在工程师站做通讯测点的相关组态。其LC模件也需要通过J1编程接口写入相应的通讯配置文件。CM104通过LC模块与OVATION系统进行RS-422通讯连接如图4.
第 20 页 共 33 页
3.3 BENTLY 3500 汽机安全监视系统(TSI)
Bently 3500汽机安全监视系统2套,其MODBUS通讯模块为通讯网关MODBUS RS-485输入/输出模块(卡件),同DCS的通讯采用一主二从(主方在终端位置)的4线制全双工接口方式。通讯电缆连接方式如图5所示。
第 21 页 共 33 页
在此TELEPERM XP的CM104下挂2套Bently 3500 ,故下列参数设置必须相同。Bently 3500系统:Modbus Slave Address 分别为1 ,2。Baud Rate = 19200 ,Data Bit = 8(RTU方式) ,Stop Bit =1 ,Parity = None。其MODBUS RS-485输入输出模件内置了终端拨码开关,因此把RACK2的通讯模块MODBUS 1接口下拨码开关RX-TERM为ENABLE即需要终端电阻。 3.4 锅炉等离子点火系统
等离子点火系统采用了西门子S7-300 系列PLC,用CP341 卡作为MODBUS 通讯模块。CP341 卡有1 个15 针串行接口,支持MODBUS 协议。PLC 通讯参数设置为Modbus Slave Address = 1 ,Baud Rate= 19200 ,Data Bit = 8(RTU 方式) ,Stop Bit = 1 ,Parity = None。主站DCS 的CM104 串口经过RS-232C 到RS-485 接口的转换后与CP341 通讯不正常, 检查PHOENIX 的PSM-EG-RS-232C/RS-485-P/ZD 接口转换适配器,只有数据发送请求指示灯RTS 正常显示。而从站的CP431 模件的通讯状态指示只有接收指示灯RxD 正常。通讯线路断开后,CM104 和CP341 分别连接笔记本电脑,使用MODSIM32 和MODSCAN32 软件分别模拟仿真通讯的“从站”和“主站”进行诊断,发现
第 22 页 共 33 页
数据经过接口适配器转换后报文格式不正确,导致从站没有响应而不能给主站返回数据。解决方法:更换其他厂家的RS-232C/RS-485 接口适配器后通讯正常。通讯连接如图6。
4.实施过程中的注意事项
当连接和组态工作正确无误后,PLC和DCS会进入正常的数据通讯状态。这可以从卡件的状态灯上反应出来。一般卡件上都会有表示错误状态、数据传送和数据接收的相应指示作为判断通讯状态和进行故障诊断的依据。
当通讯不正常时,卡件的状态指示灯会立即显示错误状态。此时应先检查硬件错误再检查软件错误,如通过软件组态功能块的诊断信息来查找故障原因。在软件编程方面,要注意以下两点:
1)要确保PLC和DCS的通讯速率一致,建议使用9600或19200常用的通讯速率,而且最好不要增加奇偶校验。
2)要保证通讯数据地址的有效性,如果有“地址错位”的情况,偏置可以在主站CM104中设置,而部分通讯第三方厂家也具有该功能,这也需要双方事先协调好。
在硬件方面,要注意以下方面:确保使用屏蔽的ITP电缆,同时注意在接线时一定要正端连接正端,避免接反。在接口适配器的选型上,由于各厂商设计规范不尽相同,尽量使用认可度高、实用效果好的产品;如果通讯经过两次接口转换,最好选用同厂商的同型号产品,
第 23 页 共 33 页
避免存在兼容性问题。 5.结束语
通讯实施后,在传输信号的质量上以及维护上都有了比较明显的改善,岱海电厂#1机组目前已经投入使用,PLC上所有监视、控制都可以在DCS上进行。通讯的实时性很好,但部分控制信号如发短脉冲指令时(<1秒)在精度上略显不足。对于DCS项目工程师在控制方面的设计与组态也许不会感到有什么困难,但对于把不同厂家的PLC与DCS连接起来则可能会感到很困难。以上是笔者在内蒙古岱海电厂一期2×600MW机组调试PLC与DCS通讯时的一点总结并具有一定的代表性,希望能给同行提供一些帮助。
第 24 页 共 33 页
1 引言
工业控制已从单机控制走向集中监控、集散控制,如今已进入网络集约制造时代。工业控制器连网也为网络管理提供了方便。Modbus就是工业控制器的网络协议中的一种。Modbus协议是应用于电子控制器上的一种通讯约规。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为主流的工业标准之一。他为符合Modbus协议的不同厂商生产的控制设备可以连成工业网络,进行集中监控。
2 Modbus RTU协议在S7-200中的应用原理 2.1 Modbus RTU协议与S7-200相互关系简介
S7-200 CPU上的通讯口Port0可以支持Modbus RTU协议,成为Modbus RTU从站。此功能是通过S7-200的自由口通讯模式实现,因此可以通过无线数据电台等慢速通讯设备传输。
如果想在S7-200 CPU与其他支持Modbus RTU的设备使用Modbus RTU协议通讯,需要由有S7-200 CPU做Modbus主站。S7-200 CPU做主站必须由用户自己用自由口模式,按相关协议编程。
在S7-200控制系统应用中,Modbus RTU从站指令库只支持CPU上的通讯0口(Port0)。要实现Modbus RTU通讯,需要Step7-Micro/WIN32 V3.2以上版本的编程软件,而且须安装Step7-Micro/WIN32 V3.2 Instruction Library(指令库)。Modbus RTU功能是通过指令库中预先编好的程序功能块实现的。
2.2 Modbus RTU协议在S7-200中应用的基本过程
(1) 首先检查S7-200控制系统中所用Micro/WIN的软件版本,应当是Step7-Micro/WIN V3.2以上版本。 (2) 检查Micro/WIN的指令树中是否存在Modbus RTU从站指令库(图1),库中应当包括MBUS_INIT和MBUS_SLAVE两个子程序。如果没有,须安装Micro/WIN32 V3.2 Instruction Library(指令库)软件包,如图1所示。
?
第 25 页 共 33 页
?
2
? 图1 指令树中的库指令
(3) 编程时使用SM0.1—调用子程序MBUS_INIT进行初始化,使用SM0.0—调用研究MBUS_SLAVE
并指定相应参数。关于参数的详细说明,可在子程序的局部变量表中找到。
? 2007-5-8 20:50 ?
回复
示例参见图2:
第 26 页 共 33 页
?
? ?
ikkoku01 2位粉丝
?
图2 调用MODBUS通
图2中参数意义如
●模式选择:启动/停止MODBUS
?
● 从站地址:MODBUS从站地
● 波特率:可选1200,2400,4800,960
● 奇偶校验:0=无校验;1=奇校● 延时:附加字符间延时,
●最大I/Q位:参与通讯的最大I/O点数,S7-200的
●最大AI字数:参与通讯的最大AI通
●最大保持寄存器区:参与通讯的
● 保持寄存器区起始地址:以&VBx
● 初始化完成标志:成功初
● 错误代码:0=无错
(4) 注意的问题
调用Step7-Mciro/WIN32 V3.2 Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库
分配库指令数据区,编译时会产生
由子程序参数HoldStart和MaxHold指定的保持寄存器区,是在S7-200 CPU的V数据存储区中分配
讯。注意Modbus 中的保持寄存器区按“字”寻址,即M
?
2007-5-8 20:51
? 回复
?
? ?
ikkoku01 2位粉丝
?
第 27 页 共 33 页
3 Modbus RTU协议测试
包含Modbus RTU从站指令库的项目编译、下载到CPU中后,在编程计算机(PG/PC)上运行一些Modbus测软件通过计算机串口(RS-232)和PC/PPI电缆连接CPU。 (以ModScan32测试软件为例作以检测说明) 3.1 测试软件
测试软件ModScan32如图3所示。
第 28 页 共 33 页
? ?
2007-5-8 20:51 回复
第 29 页 共 33 页
?
? ?
ikkoku01 2位粉丝
?
图3 Modbus RTU测试软件
图3中,ModScan32测试软件的画面
Address:ModBus中存储区
?
Device Id:PLC ModBus的Length:参与通讯的V存储
3.2 参数设置
对ModScan32测试软件的通讯参数进行相关设置,要与S7-200的Modbus RTU指令库MBUS_INIT
第 30 页 共 33 页
? ?
2007-5-8 20:52 回复
第 31 页 共 33 页
?
? ?
ikkoku01 2位粉丝
?
4 ModScan32通讯参数设置
4 MODBUS RTU地址与S7-200的地址对应关系
MODBUS地址总是以00001、30004之类的形式出现。S7-200内部的数据存储区与MODBUS的0、1、3、附表 MODBUS地址对应表
? ?
2007-5-8 20:52 回复
7楼
说明:其中T为S7-200中的缓冲区起始地址,即HoldStart。 如果已知S7-200中的V存储区地址,推算MODBUS地址的公
?
? ?
ikkoku01 2位粉丝
式如下:
MODBUS地址=40000+(T/2+1) 其中T为偶数。
5 结束语
Modbus RTU作为一种工业控制器的网络通讯协议,其在如今众多的控制器之间进行联网、监控、相互通讯等方面发挥着重大作用,本文以典型的S7-200控制系统为例,详述了如何应用Modbus RTU通讯协议以及检测方法,使得控制器之间的通讯
?
第 32 页 共 33 页
变得更加简易和清晰。
? ?
2007-5-8 20:52 回复
219.148.176.* 8楼
简单的喷泉程序怎么编
? ?
2007-6-10 20:33 回复
211.161.196.* 9楼
这个是MODbus通讯协议,不是RTU的 rtu的更加紧凑
? ?
2008-8-27 08:55 回复
218.69.98.* 10楼
上文提到的 调用Step7-Mciro/WIN32 V3.2 Instruction Library(指令库)需要分配库指令数据区(Library Memory)。 是如何操作的,我是新手请大家不要见笑.
第 33 页 共 33 页
正在阅读:
Modbus+协议 - 图文05-03
压力容器D1、D2级制造许可鉴定评审记录 - 图文12-20
假如世界没有大人作文700字06-22
大学生职业生涯规划大赛主持稿07-17
四年级数学思维训练:逻辑推理一10-09
安全生产知识答题学习提纲01-07
2011年纪委干部挂职锻炼个人工作总结09-27
开拓创新,推动社区工作新局面09-15
什么留在我的记忆深处作文700字06-23
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 协议
- 图文
- Modbus
- 2011山东临清三中数学必修1教学案:1.1.1-1集合的含义及其表示
- 酒店各部门的主要职能及规章制度
- 区角游戏
- 8、国家鼓励发展的资源节约综合利用和环境保护技术(国家发改委
- 中国总代理协议
- 室内自动喷水灭火系统安装施工工艺标准
- 国际贸易实务
- 浅析老庄与孔孟对中国现代社会的影响
- 584个锂电池企业及相关产业
- 课后部分习题参考答案
- 林学综合实习实习报告
- 湖北省黄冈市启黄中学2014届九年级第三次模拟考试生物试题
- 外国建筑史重点
- 八年级地理上册导学案、检测题1
- 基于单片机的温湿度监控系统
- VB语言程序设计实验
- 植物生产与环境第二单元模拟训练
- 会计手工流程操作试题
- 《中国教育简史》形考参考答案
- 2018年中国汽车物流行业调查分析报告目录