信捷PLC与计算机串口和以太网通信的VC++编程技术

2015-12-26 12:18朱向荣冯乔生施少捷吕苓芝
软件 2015年6期

朱向荣+冯乔生+施少捷+吕苓芝

摘要:信捷XC系列PLC是完全国产化的产品。若使其上位机程序能用通用高级语言而非只是该机模态软件编写,就能使XC系列PLC上位机控制程序与其它设备控制程序进行集成,有利于进一步促进PLC推广应用。本文研究了信捷XC系列PLC与计算机分别通过串口RS232和以太网进行通信的VC++编程技术,使得能在上位机VC++程序中发送与接收XC系列PLC的数据,从而实现了PC机通过VC++上位机程序对PLC的远程控制。

关键词:信捷XC系列PLC;RS232;PC机以太网卡;Modbus协议

中图分类号:TP393

文献标识码:A

DOI:10.3969/j.issn.1003-6970.2015.06.014

本文著录格式:朱向荣,冯乔生,施少捷,等,领域模型中关联语义的描述逻辑表示与应用[J].软件,2015,36(6):75-82TechniquesofCommunicationVC++pr02rammingforXinjiePLCwithPCthroughSerialCommunicationPortandEthernetAdapter

ZHUXiang-rong1,FENGQiao-sheng1,SHIShao-jie2,LVLing-zhj3

[Abstract]:XinjeXCseriesPLCisakindofcompletedomesticproduct.IftheirupperPCprogramscanbepro-grammedwiththegeneralhigh-levellanguage,ratherthantheirmodalsoftware,itisenabledtointegratetheupperPCcontrolprogramsofthePLCwiththecontrolprogramsofotherdevices,andXCseriesPLCcanthenbefurtherwidelyused.ThispaperproposedthetechniquesofVC++programmingofcommunicationsbetweenPCandXCseriesPLCthroughRS232andEthernetnetworkadapterrespectively,whichenabledtheVC++upperprogramstosenddatatotheXCseriesPLCorreceivethedatafromthem.TheremotecontrolsoftheXCseriesPLCcanthusbeimplementedbytheVC++upperPCprograms.

[Keywords]:XinjieXCseriesPLC;RS232;PCEthernetadapter;Modbusprotocol

0引言

本文的研究来源是针对昆明鑫辉检测有限公司对于多用途高空爬行器平台的研发。多用途高空爬行器平台具有超声波检测功能和对周围环境监控的功能,这就需要爬行器搭载相应的设备。信捷XC系列PLC通过模态软件开发控制程序,再与信捷电气股份有限公司自主研发的人机界面通信从而达到控制PLC的效果。然而对于多用途高空爬行器平台就有很大的限制,爬行器上位机监控程序不能与其它设备进行集成。本文研究XC系列PLC上位机监控程序的VC编程[1]技术,希望这项技术能应用于多用途爬行器平台的研发,实现通过VC程序来控制爬行器的运动,从而实现XC系列PLC上位机监控程序[2]与其它设备用户界面程序的有效集成。PLC与上位机PC的通信是开发PLC上位机监控程序的关键环节,按应用环境的不同,可采用RS-232通信方式,基于无线ZigBee[3]的近距离无线通信方式。和基于以太网的远距离通信方式。本文针对昆明鑫辉检测有限公司的应用需求,主要研究基于RS-232的通信与以太网的通信方式的VC编程技术。

1信捷XC系列PLC通讯功能

1.1概述

XC系列PLC都支持Modbus协议、自由协议通讯功能,其中XC5系列中48点与60点机型与XCC系列PLC还具有CANbus总线功能。XC系列PLC有2个通讯口(Portl、Port2)。通讯口1(Portl)为编程口,支持RS232方式,可以用来下载程序以及连接外接设备,此通讯口的通讯参数(波特率、数据位等)可以通过软件重新设置。通讯口2(Port2)为通讯口,可以用来下载程序以及连接外接设备,此通讯口的通讯参数(波特率、数据位等)可以通过软件重新设置,其中port2既支持RS232又支持RS485(RS485端子在输出端,A为485+、B为485-),但需注意两者不能同时使用。XC系列PLC通讯参数:站号1-254表示是Modbus通讯方式,255(FF)为自由格式通讯。波特率为300bps-115.2Kbps。数据位有8个和7个数据位两种。停止位有2个和1个停止位两种。有偶校验、奇校验、无校验三种。通讯口默认参数:站号为1、波特率19200bps、8个数据位、1个停止位、偶校验。信捷公司的XCPPro编程软件中集成了修改通讯口的模块,通过软件来修改通讯口参数,方便直观,且不易出错,修改完成后,重新上电才能生效。

1.2Modbus协议简介[4]

Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信,它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的,它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录,它制定了消息域格局和内容的公共格式。

当在一个Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。

1.2.1传输方式

通信传输方式是一个信息帧内一系列独立的数据结构以及用于传输数据的有限则,Modbus协议有两种传输方式,RTU方式和ASCII码字符串方式,以RTU模式在Modbus总线上进行通讯时,信息中的每8位字节分成2个4位16进制的字符,每个信息必须连续传输下面定义了与Modebus协议RTU方式相兼容的传输方式。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。信捷PLC按字符串方式与终端传感器通信,而按RTU方式与上位机通信,所以本文主要研究RTU方式和PLC通信的VC编程技术。

1.2.2RTU数据帧格式

ModbusRTU信息帧[5]如图1所示,所允许的最大长度为256个字节,即N的范围是大于等于零且小于等于252(N{O,252})。

地址域:信息帧地址域在帧的开始部分,由8位组成,有效的从机设备地址范围0-247,各从机设备的寻址范围为1-247。主机把从机地址放入信息帧的地址区,并向从机寻址。从机响应时,把自己的地址放入响应信息的地址区,让主机识别已作出响应的从机地址。地址0为广播地址,所有从机均能识别。

功能域:信息帧功能域代码告诉了被寻址到的终端执行何种功能。有效码范围1-225,有些代码是适用于所有控制器,有些适应于某种控制器,还有些保留以备后用,信捷XC系列PLC功能码对应的功能及对应的Modbus指令如下表1。当主机向从机发送信息时,功能代码向从机说明应执行的动作。如读一组离散式线圈或输入信号的ON/OFF状态,渎一组寄存器的数据,读从机的诊断状态,写线圈(或寄存器),允许下截、记录、确认从机内的程序等。当从机响应主机时,功能代码可说明从机正常响应或m现错误(即不正常响应),正常响应时,从机简单返回原始功能代码;不正常响应时,从机返回与原始代码相等效的一个码,并把最高有效位设定为“1”。

数据域:数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这些数据的内容可能是数值、参考地址或者极限值。它由数据区有2个16进制的数据位(2的8次方256),数据范围为OO-FF(16进制)。例如:功能域码告诉终端读取一个寄存器,数据域则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同能力而有所不同。若无错误出现,从机向主机的响应信息中包含了请求数据,若有错误出现,则数据中有一个不正常代码,使主机能判断并做出下一步的动作。信捷XC系列PLC线圈空间地址为表2,寄存器空间地址为表3。

CRC-16循环冗余校验码:目前较常用的CRC位数目有8和16以及32,在这里只讲述如何写CRC位数目为16的程序。CRC位数目越大,数据的错误检测率则越高,但必须多花一些时间进行数据的计算。CRC-16的计算方法有两种:查表法与计算法,在这里只介绍计算法。生成一个CRC的流程为:

Step1、预置一个16位寄存器为OFFFFH(全1),称之为CRC寄存器。

Step2、把数据帧中的第一个8位字节与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。

Step3、将CRC寄存器向右移一位,最高位填以0,最低位移出并检测。

Step4、如果最低位为0:重复第3步(下一次移位)。如果最低位为1:将CRC寄存器与一个预设的固定值(OAOOIH)进行异或运算。

Step5、重复第3步和第4步直到8次移位。这样处理完了一个完整的八位。

Step6、重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。

Step7、最终CRC寄存器得值就是CRC的值。

当信息帧到达终端设备时,它通过一个简单的“口”进入寻址到的设备,该设备去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将白己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。发生任何错误都不会有成功的响应。2VC++程序与XC系列PLC串口通信技术[6]2.1上位端PC机程序的设计

我们设计了CSearchDevices类[7]来进行计算机上串口的搜索、PC机与PLC的串口通信连接、命令与数据读写,即包括下列几个成员函数:

(1)voidSearchSerialCommPort(void)

该函数搜索上位机PC可用的串口。

(2)HANDLEOpenCommunicationDevice(intindex,boolwriteFlag,intbaudRate,intbyteSize,intparity,boolsynchrose)

该函数是打开和设置串口参数。第一个参数是串口的索引号。第二个参数是指定串口是按哪种方式打开(一种是可渎、可写,另一种是可读)。第三个参数是指定波特率的大小。第四个参数是发送和接收比特的字节数。第五个参数是指定校验方式(0表示无校验,1奇校验,2表示偶校验),本项目采用的是偶校验。第六个参数如果是TRUE,则通过CreateFile函数允许对文件进行重叠操作。

(3)voidCRCCodeing(BYTE*data,intnumBytes)