1 引言WWW_PLCJS_COM-PLC-技.术_网
HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机[1]作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
2 Modbus通讯协议[4]
WWcW_PLCJS_COM-PLC-技.术_网
Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
Modbus协议提供了主—从原则,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。主设备查询的格式:设备地址(或广播,此时不需要回应)、功能代码、所有要发送的数据、和一错误检测域。从设备回应消息包括确认地址、功能码、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
控制器能设置为两种传输模式:ASCII和RTU,在同样的波特率下,RTU可比ASCII方式传送更多的数据,所以采用KTU模式。WWcW_PLCJS_COM-PLC-技.术_网
(1) 典型的RTU消息帧WWW_PLCJS_COM-PLC-技.术_网
典型的RTU消息帧如表1所示。WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
WWW_P※LCJS_COM-PLC-)技.术_网
WWW_P※LCJS_COM-PLC-)技.术_网
RTU消息帧的地址域包含8bit。可能的从设备地址是0...127(十进制)。其中地址0是用作广播地址,以使所有的从设备都能认识。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。WWW_PLC※JS_COM-PmLC-技.术_网
RTU消息帧中的功能代码域包含了8bits,当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为;当从设备回应时,它使用功能代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应,一般是将功能码的最高位由0改为1)。plcjs.技.术_网
从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的行为。这包括了像不连续的寄存器地址,要处理项的数目,域中实际数据字节数。如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。WWW_P※LCJS_COM-PLC-)技.术_网
当选用RTU模式作字符帧时,错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测(CRC)方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
(2) 所有的Modbus功能码WW.W_PLC※JS_C,OM-PL,C-技.术_网
Modbus的功能码定义如表2所示。WWW_PLCJS@_COM%-PLC-技.术_网
WWW.PLCJS.COM——可编程控制器技术门户
WWW_PLCJS@_COM%-PLC-技.术_网
3 常用功能通讯程序的设计[5]
WW.W_PLCJS_COM-PLC-技.术_网
本文介绍了几个Modbus常用功能程序的设计。笔者采用单片机作为主机,在单片机上编写程序实现单片机与PLC之间的通讯。由单片机向PLC发出命令信息,PLC自动作出回应。PLC通过单片机的串行通讯口通讯,程序用C51实现。程序的子函数及其功能:WWW_PLC※JS_COM-PmLC-技.术_网
(1) 串口初始化WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
void ProtocolInit(void)WWW_P※LCJS_COM-PLC-)技.术_网
函数功能:串口设置为异步通讯方式1(起始位1位,数据位8位,停止位1位);定时/计数器1设置为波特率发生器,通讯速率 9600bps;开串行中断,并把串行中断设置为高优先级。WWW_PLCJS@_COM%-PLC-技.术_网
(2) CRC简单函数WWcW_PLCJS_COM-PLC-技.术_网
unsigned char Crc16(unsigned char *puchMsg, unsigned char usDataLen) WWW_P※LCJS_CO※M-PLC-技-.术_网
函数功能:先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。WWW_PLCJS_COM-PLC-技.术_网