1引言PLC以其高可靠性、适应工业过程现场、强大的联网功能等特点被广泛使用,是机电一体化的发展方向。Windows以图形化界面给用户提供了良好的人机界面,并且被很多人所掌握,所以我们考虑使用PLC作为工业控制下位机,使用PC作为上位机进行人机交互界面。这就涉及了使用PC如何控制PLC,PC如何与PLC进行通讯的问题。以Schneider公司的TSXNeza系列PLC为例,上位PC机与PLC通讯进行一些探讨。2计算机与NezaPLC通讯方式。Neza系列PLC提供了三种通讯方式,分别为:Modbus方式、ASCII方式、Unitelway方式。(1)Modbus方式MODBUS是Schneider公司为该公司生产的PLC设计的一种通信协议,通过24种总线命令实现PLC与外界的信息交换。具有Modbus协议的PLC可以方便的进行组态。使用Modbus进行PLC通讯时需要使用PLC的扩展口,而多个PLC进行通讯时也要使用这唯一的扩展口,也就是如果使用Modbus进行通讯时PLC无法与其他PLC进行通讯。Schneider公司早期产品不支持该协议。(2)Unitelway方式Unitelway是基于Schneider公司的Xway通讯协议的,经过发展现在Neza使用的是UnitelwayV2,它与UnitelwayV1.1基本兼容。通过Unitelway提供的各项命令我们可以方便的访问PLC的各项资源,对PLC进行各项操作。在Modicon公司NAZA系列PLC中编好的程序就是使用Unitelway下载入PLC。Unitelway使用编程口并不占用扩展口。在通讯方式中Unitelway是最为理想的方式,但是Unitelway协议并没有完全公开,一般用户无法使用。(3)ASCII方式ASCII码方式在很多PLC上都可以使用名称也不一而足:ASCII方式、自由口模式等等。在自由口模式下,通信协议是由用户定义的。用户要根据自己的需要确定自己和PLC的通讯协议。自由码也是使用编程口与上位机进行通讯,并不占用扩展口。但是它的通讯协议需要自己确定,需要在PLC编程和上位机中确定唯一的通讯方法。3通讯过程每一次PC机和PLC数据交换有3个步骤,说明如下:(1)通讯是由在PLC中确定的时间触发,发送一组字符给PC机在Neza系列PLC使用ASCII通讯时,通讯是由在PLC中确定的时间触发的。在确定的时间到达后,PLC要求数据发送时,PLC会发送一组字符过去。通常该字符第一个字符就是前导码,PC机根据前导码确定是否应该读取该字符串、该字符属于哪一个命令集合,以及用什么格式去读取字符串等。前导码不会是一般的符号字符,通常是一些不可见的字符(位于ASCII码表的前30个)或极少被使用的符号字符,这是因为避免数据字符与前导码一样而发生错误判断。在前导码之后是站号,通常是以两个字符代表,单纯以RS232连接的单一设备也许不需要站号的设置,但是如果以RS485进行网络连接,就需要用站号来辨认命令是属于那一个设备。站号后面就是设备解读的命令或者数据。(本例为单机不需要站号)一般的通讯都需要进行数据的校验,在Neza系列PLC使用ASCII通讯中,PLC没有对数据的处理能力,所以没有设置校验位。为了保证通讯的正确,可以在PC中对数据进行一定处理。在数据后一般为这个帧的结束码,来保证数据帧的完整性。(2)PC收到要求的字符串,并判读当PC收到要求的字符串,并经过判读确定后,同样按照相同的协议,按照用户需要对PLC进行的操作送出数据,数据被送出时会在数据之前加上前导码和站号。数据中携带了PC机对PLC要求的操作。(3)PLC将数据发给PC在PLC收到PC发来的数据包后经过判读确定后,进行一定的操作然后在触发时间到达后将PLC的状态写入数据发给PC,这样就完成了一次数据交换。4应用实例下面介绍所开发的系统是由下位机(PLC)-上位机(PC)组成,系统框图如图1所示。程序使用VB6,整个程序设计分为四部分:上位机程序设计;下位机程序设计;通讯硬件设计;通讯协议。图1系统框图(1)通讯格式的确定作者使用的通讯参数:9600波特率,8位数据位、1位停止位,奇校验。本实例中定义整个帧长22个字节。帧格式:(2)上位机程序设计上位机程序设计包括两个模块:用户应用程序和串行通讯程序.用户应用程序是图形化的供用户操作的界面。串行通讯程序是底层运行的程序,它负责与下位机的通讯。上位机通讯程序:SubForm_Load()'窗体加载打开串口MSComm1.PortOpen=TrueMscomm1.settings=9600,o,8,1EndSubSubMSComm1_OnComm()'有数据输入IfMSComm1.CommEvent=comEvReceiveThenIfMSComm1.InBufferCount=22Thenbuffer=MSComm1.InputIfbuffer(0)=&HFFAndbuffer(1)=&HFFAndbuffer(21)=&HCCThenCallStateToBuffer'将读入的数据读入应'用程序处理CallIniState'初始化状态CallStateToBuffer'确定发送给PLC的'数据MSComm1.Output=Buffer'发出数据ElseMSComm1.InBufferCount=0EndIfElseMSComm1.InBufferCount=0MSComm1.PortOpen=False'通讯失败关闭串口'然后重新打开MSComm1.PortOpen=TrueEndIfEndSub(3)下位机程序设计下位机程序设计指使用PLC编程软件对PLC进行编程,实现对电机的控制。当TSXNeza处于ASCII模式时,状态位%S100置为1。发送与接受由%MSG模块与EXCH指令组成。%MSG模块用来控制数据交换,EXCH指令用来控制数据交换。发送或接收帧的最大为128字节。EXCH指令由控制区、发送区、接收区组成,如表1所示。EXCH指令有3个用途:发送;发送/接收;接收。表1EXCH指令控制区高位字节为命令,低位字节为发长度LgT/LgR,长度字节表示发送字符的长度(LgT),在接收的结尾被改写为接收字符的长度(LgR)。当接收到帧的末尾字节后结束接收。结束码可以为用户修改(系统字%SW68的低位字节)。该字节默认值为H0D。在使用EXCH指令的发送模式,仅需要有控制区与发送区,TSXNeza仅传送发送区的数据。在使用EXCH指令的发送/接收模式时,先发送,在发送结束时TSXNeza切换为等待接收的状态。如果接收状态正常且询问长度(LgT)和响应(LgR)的长度都小于%Mwi保留区(长度L),那么等接收到响应后,把它复制到与发送表相关的%Mwi区。如果不是这种情况,则位%MSG.E变为1。当检测到结束码或接收区满了时,接收结束。在使用EXCH指令的接收模式,仅需要有控制区和接收区,TSXNeza仅接收数据。等接收到响应后,把它复制到与发送表相关的%Mwi区。如果不是这种情况,则位%MSG.E变为1。当检测到结束码或接收区满了时,接收结束。我们使用内部字MW1作为控制区,MW2至MW11作为发送区,其中MW2、MW3作为前导码。MW12至MW17作为接受区。在PLC程序中读取内部字作为工作的判定条件。本实例PLC每450ms与PC机通讯一次。(4)硬件部分硬件包括RS232与RS485转换,如果上位机与下位机距离远的话,还要考虑485总线上的干扰问题。硬件设置:TER端口可以在PLC配置对话框中修改;类型:半双工;速率:9600bps;格式:1个起始位,8个数据位、1个停止位。校验:ODD。5结束语本实例已经在上海久事复兴大厦、兴业大厦污水处理系统中使用,效果良好。业主单位对上位机软件良好的人机界面和稳定的通讯功能表示非常满意。1引言PLC以其高可靠性、适应工业过程现场、强大的联网功能等特点被广泛使用,是机电一体化的发展方向。Windows以图形化界面给用户提供了良好的人机界面,并且被很多人所掌握,所以我们考虑使用PLC作为工业控制下位机,使用PC作为上位机进行人机交互界面。这就涉及了使用PC如何控制PLC,PC如何与PLC进行通讯的问题。以Schneider公司的TSXNeza系列PLC为例,上位PC机与PLC通讯进行一些探讨。2计算机与NezaPLC通讯方式。Neza系列PLC提供了三种通讯方式,分别为:Modbus方式、ASCII方式、Unitelway方式。(1)Modbus方式MODBUS是Schneider公司为该公司生产的PLC设计的一种通信协议,通过24种总线命令实现PLC与外界的信息交换。具有Modbus协议的PLC可以方便的进行组态。使用Modbus进行PLC通讯时需要使用PLC的扩展口,而多个PLC进行通讯时也要使用这唯一的扩展口,也就是如果使用Modbus进行通讯时PLC无法与其他PLC进行通讯。Schneider公司早期产品不支持该协议。(2)Unitelway方式Unitelway是基于Schneider公司的Xway通讯协议的,经过发展现在Neza使用的是UnitelwayV2,它与UnitelwayV1.1基本兼容。通过Unitelway提供的各项命令我们可以方便的访问PLC的各项资源,对PLC进行各项操作。在Modicon公司NAZA系列PLC中编好的程序就是使用Unitelway下载入PLC。Unitelway使用编程口并不占用扩展口。在通讯方式中Unitelway是最为理想的方式,但是Unitelway协议并没有完全公开,一般用户无法使用。(3)ASCII方式ASCII码方式在很多PLC上都可以使用名称也不一而足:ASCII方式、自由口模式等等。在自由口模式下,通信协议是由用户定义的。用户要根据自己的需要确定自己和PLC的通讯协议。自由码也是使用编程口与上位机进行通讯,并不占用扩展口。但是它的通讯协议需要自己确定,需要在PLC编程和上位机中确定唯一的通讯方法。3通讯过程每一次PC机和PLC数据交换有3个步骤,说明如下:(1)通讯是由在PLC中确定的时间触发,发送一组字符给PC机在Neza系列PLC使用ASCII通讯时,通讯是由在PLC中确定的时间触发的。在确定的时间到达后,PLC要求数据发送时,PLC会发送一组字符过去。通常该字符第一个字符就是前导码,PC机根据前导码确定是否应该读取该字符串、该字符属于哪一个命令集合,以及用什么格式去读取字符串等。前导码不会是一般的符号字符,通常是一些不可见的字符(位于ASCII码表的前30个)或极少被使用的符号字符,这是因为避免数据字符与前导码一样而发生错误判断。在前导码之后是站号,通常是以两个字符代表,单纯以RS232连接的单一设备也许不需要站号的设置,但是如果以RS485进行网络连接,就需要用站号来辨认命令是属于那一个设备。站号后面就是设备解读的命令或者数据。(本例为单机不需要站号)一般的通讯都需要进行数据的校验,在Neza系列PLC使用ASCII通讯中,PLC没有对数据的处理能力,所以没有设置校验位。为了保证通讯的正确,可以在PC中对数据进行一定处理。在数据后一般为这个帧的结束码,来保证数据帧的完整性。(2)PC收到要求的字符串,并判读当PC收到要求的字符串,并经过判读确定后,同样按照相同的协议,按照用户需要对PLC进行的操作送出数据,数据被送出时会在数据之前加上前导码和站号。数据中携带了PC机对PLC要求的操作。(3)PLC将数据发给PC在PLC收到PC发来的数据包后经过判读确定后,进行一定的操作然后在触发时间到达后将PLC的状态写入数据发给PC,这样就完成了一次数据交换。4应用实例下面介绍所开发的系统是由下位机(PLC)-上位机(PC)组成,系统框图如图1所示。程序使用VB6,整个程序设计分为四部分:上位机程序设计;下位机程序设计;通讯硬件设计;通讯协议。图1系统框图(1)通讯格式的确定作者使用的通讯参数:9600波特率,8位数据位、1位停止位,