【工控老马】.NET的计算机与S7-200 PLC自由口通信
PLC作为一种高效、灵活、可靠的控制器,已经广泛地应用在包括数字逻辑控制、运动控制、闭环过程控制、数据处理和联网通信等工业控制领域。在联网通信方面,PLC与上位计算机设备一起,可以组成“集中管理、分散控制”的分布式工业控制系统。在这种控制系统中,PLC与上位机的通信对系统整体性能有着较大的影响。面对众多厂家不同类型的PLC,它们在功能编程上没有统一的标准而且在通信协议上也是千差万别,选择一种即能满足通信要求又经济实用的通信协议是非常关键的。本文以S7-200PLC为对象,详细研究了S7-200PLC在自由端口模式下与PC之间的通信方法,并采用.net环境下的C#语言编写通信程序实现了计算机与PLC之间的通信。这种通信方式硬件投入低,通信协议灵活,可以在多个工业控制领域得到广泛的应用。
1 S7-200 PLC与上位机的通信方式
S7-200 系列PLC与上位机进行通信主要有以下几种方式:(1)通过S7-200 PLC的OPC服务器(pc
access)作为上位机的OPC服务器, 这种方式只须在OPC服务器中配置相应的测点数据,编程简单,但通信速率不高,用户不能自由修改通信协议;(2)利用触摸屏,这种方式需要根据触摸屏兼容的通信协议进行选择,通信可靠性高, 但灵活性差,触摸屏界面编程功能也不够强大;(3)利用通用编程软件实现,这种方法虽然系统开发工作量大,对技术人员的水平和经验都要求较高,但编程灵活,可以实现比较复杂的功能。本文采用了第三种通信方式,在开发通信软件时考虑了S7-200 PLC所特有的一种通信方式—自由口通信模式。在自由口模式下用户可自定义协议,利用串口和PLC的通信口来收发数据,通信功能完全由用户程序控制,通信任务和信息定义均需由用户编程实现,通过调用子程序来进行接收中断、发送中断、发送指令(XMT)、接收指令(RCV)等通信控制操作。
2 自由口通讯工作模式的定义
在中小规模系统,通信速率要求不是特别高的情况下,S7-200 PLC自带的编程口可以作为通信口使用。S7-200 PLC编程软件与PLC进行通信所利用的PPI协议实质也是一种RS-485通信,它可在多种模式下工作,其中自由口通信功能是S7-200 PLC的一个独特的功能。在自由口通信方式下,S7-200 PLC可以与任何协议公开的设备、控制器进行通信,最高波特率可达38.4kbit/s。一般上位机串行口符合RS-232C标准协议,为了与PLC的RS-485通信则必须进行协议转换。在PLC编程方面,自由口模式下的通讯协议主要就是自由口通信工作模式控制字的定义以及发送和接受数据指令的格式约定及其参数设置等。
2.2 接收指令(RCV)
RCV(接收指令)从S7-200 PLC的通讯口接收一个或多个数据字节。接收的数据字节保存在接收数据缓冲区中。接收指令完成后,会产生一个中断事件(对Port0为中断事件23,对Port1为中断事件24)。启动接收指令后,CPU的通讯控制器就处于接收状态。使用接收指令时需要设置消息起始和结束的判断条件,通讯控制器用这些条件来判断消息的开始和结束。当判断消息结束时接收状态终止,否则通讯口会一直处在接收状态。由于S7-200 PLC的自由口通讯是建立在RS-485半双工通讯的基础上,接收和发送不能同时进行,接收指令不结束,就不能执行发送指令。对几个重要的特殊存储区设置举例如下:
MOVB 16#EC, SMB87(允许接受,检测起始字符和结束字符,超时检测)
MOVB 104, SMB88(发送报文起始字符为h)
MOVB 72, SMB99(结束字符为H)
MOVB +1000, SMB92(接受超时时间为1s)
MOVB 35, SMB94(接受最大字符数为35)
2.3 发送指令(XMT)
XMT 发送指令利用数据缓冲区指定要发送的字符,用于向指定通信口以字节为单位发送一串数据字符,发送命令格式为 XMT TABLE,PORT, 其中TABLE为数据存储区地址,PORT指定PLC要发送数据的端口。一次最多发送255个字节。XMT 发送指令完成后,会产生一个中断事件(Port0为中断事件9,Port1为中断事件26)也可以监视发送完成状态位SM4.5和SM4.6的变化来产生XMT中断。
3 S7-200 PLC 通信程序设计
3.1 通信程序流程
本程序中S7-200 CPU从通讯端口0接收字符串,使用RCV指令和接受完成中断接受数据,以自定义协议来实现计算机与S7-200PLC之间的数据通信时,为了避免通信中的各方争用通信线路,一般采用主从方式,即计算机作为主机,向作为从站的S7-200 PLC端口0发送规定格式的报文。
当S7-200 PLC接收到指令后进行相关的数据校验, 这里采用BBC校验方式,即将每一帧的第一个字节(不包括起始字符)到该帧中正文校验码之前的所有字节作异或运算(本例中是从VB101到VB130),并将校验码作为报文一部分发送到计算机。在PLC接收端也要对接收缓冲区的数据进行BBC校验,然后与指令中的校验码比较,如果校验码相等则置位M0.0,PLC执行命令并将所接收到的数据反馈给计算机;如果校验码不相等, 则置位M0.1并返回带有校验码错误的反馈信息,通信流程图如图1所示。
图 1 PLC通信流程图
3.2 通信帧格式约定
计算机每次发送一个33字节的指令来实现一次读写操作。每条指令都包括起始字符、结束字符、目标站地址、目标寄存器地址、要读写的字节数、要写入的数据和校验码。S7-200 PLC接收到计算机发送来的数据,先存放在PLC的接收缓冲区,设定以VB100开始。自定义的接收缓冲区的数据设计格式见表1
表 1 PLC接收数据缓冲区
VB100 接收到的字节数
VB101 起始字符
VB102 指令类型(读/写)
VB103 VB104 目标站地址
VB105~VB112 目标寄存器地址
VB113 VB114 读写字节数
VB115~VB130 要写入的数据
VB131 VB132 校验码
VB133 结束字符
为避免在通信中由于指令中的起始字符或者结束字符与传输的数据有重复而导致PLC的误动作,这里采用文本传送二进制数据,即通过以16进制的ASCII码的格式来描述数据,让每个二进制的字节都表示成一对ASCII编码的16进制字符。比如48H可表示为34H、38H两个字节。指令类型自定义为05H代表读操作,06H代表写操作。目标寄存器地址采用四个字节表示,前两个字节表示寄存器类型,后两个表示寄存器号,例如:VB101的地址可表示为08 00 00 65,其中“08 00”表示V寄存器区,“00 65”表示寄存器号101。目标寄存器地址表示方法如表2所示:
PLC接收上位机的指令后会返回一个21字节的反馈信息。自定义的发送缓冲区的格式如表3所示:
表 3 PLC发送缓冲区格式
VB153 VB154 VB155 VB156~VB171 VB172
VB173 VB174
发送字符数 起始字符 状态信息 发送数据区 校验码 结束字符
其中VB155状态信息的格式定义为:01H代表读入正确,02H代表写入正确,03H代表校验码错误,04H代表指令不合法。
3.3 主要程序设计
本系统PLC程序设计采用模块化设计,主要包括主程序、初始化子程序、读子程序、写子程序、校验子程序、接收完成中断程序和发送完成中断程序。
主程序负责判断读写条件和调用各个子程序,具体包括判断PLC运行模式;调用初始化子程序;判断本机站号、指令类型和校验码等是否符合读写程序;调用读、写子程序;接收数据等。
在初始化子程序中主要设置一些通信参数和RCV接收参数并开启接收完成中断0和发送完成中断1。在读写子程序中根据接收到的指令信息读取目标寄存器数据或者把数据写入目标寄存器中,并利用XMT发送反馈信息到计算机。读写程序如下:
读子程序:
LD SM0.0
R SM87.7, 1 (禁止接收)
R M0.0 (复位校验位)
RCV VB100, 0
MOVB 103, VB154 (送返回信息起始字符为g)
MOVB 1, VB155 (状态信息读取正确)
HTA *VD135,VB156,16(将要读取的数据做16进制转ASCII码转换)
MOVB 71, VB174 (结束字符为G)
MOVB 21,VB153 (发送字节数为21个字节)
…… (校验发送数据)
LD SM4.5(端口0发送空闲时置1)
XMT VB153, 0
写子程序与读程序类似,只是要对写入的数据做ASCII码转换:
MOVD &VB115, VD145(装入要写的数据源的地址指针)
ATH *VD145, *VD135, VB139(对要写入的数据做ASCII码转16进制转换)
……
XMT VB153, 0
扫描左侧的二维码可以任意下载无限个程序源码或技术文档~
工控老马资料窝,中国两大专业工控技术文档及程序源码免费下载微信小程序之一!
找技术文档及程序源码,就上工控老马资料窝~