通信设计应用
随着计算机与通信技术的发展,PLC各种模块的多样化和信息化,由PLC作为基本控制单元的分布式控制系统在自动化领域中广泛应用,迫切需要一种总线能适合远距离的数字通信。在RS422标准的基础上,EIA研究出了一种支持多节点、远距离和接收高灵敏度的RS485总线标准。EIA曾经在它所有标准前面加上RS前缀(英文RcommendeStandard的缩写),因此许多工程师一直沿用这种名称,因为RS485的远距离(1200m)、多节点(32)以及传输线成本低的特性,使得EIA的RS485成为工业应用数据传输的首选标准。
我厂18条电动执行机构调试线,分布在三个厂房的若干区域,每个调试线由一台PLC与HMI控制,为了将调试数据归口管理,并判断调试结果的正确性,对调试线进行监控,18台PLC通过RS485总线与计算机连接起来,构成一个分布式监控系统,通过数据通信使计算机和PLC实现数据共享,完成对调试过程的集中管理和分散控制。计算机与PLC各个子站的的通信是系统的重要环节,本文详细论述了基于RS485总线,利用VB开发了上位机通信系统,编写了PLC自由口的通讯协议的设计与实际应用方案。可以借鉴为各种上位机、PLC、HMI等通信系统设计的应用范例,同时可作为检测技术、自动化设计等课程的工程项目训练与教学的平台。
RS485标准采用有平衡式发送,差分式接收的数据收发器来驱动总线,与RS422一样,可以将多个(最多为32个)RS485接口互连,而其连接更简单,只需将各个接口的“+”端和“+”端相连、“-”端和“-”端相连,连接的两根线就是RS485的“物理总线”。这些相互连接的RS485接口的物理地位完全平等,在逻辑上取一个为主导地位,其他为从属地位。在通信时,同样采用主呼叫,从应答的方式。
控制系统的硬件构成如图1所示,上位机为计算机,下位机采用西门子公司S7-200系列PLC,各PLC通过通信口0直接挂在RS485总线上,上位机通过RS232/485转换器与RS485总线相连,形成1:N通信方式。控制系统中,上位机的主要任务是获取调试线上的数据信息,完成对调试过程的监控。下位机的主要任务是对调试过程进行自动控制,将调试数据发送给上位机,并按上位机命令执行。
图1网络图
上位机与PLC的通信实际上是计算机与PLC的通信模块之间交换命令和响应,下位机具有初始传送优先权,将所有调试数据发送给上位机,上位机根据收到的数据判断哪个调试线发出的数据,对数据分析后响应回传数据与命令,下位机只接收发送给自己的数据。通信以“帧”为单位进行,帧分为数据帧和响应帧两种。数据帧由PLC发送给上位机;响应帧为上位机接到数据帧后自动向PLC发出的命令与判断信号所有的指令码、字符和数据均以十六进制码发送和接受。
S7-200系列PLC通信模式有两种:一种是点对点(PPI)通信协议,用于PLC与其编程器或西门子公司的人机接口产品之间的通信;另一种是对用户完全开放的自由口模式(freeportmode),由用户自行规定通信的协议。PPI模式只能在PLC停止方式(STOP)下通信,而自由口模式只能在PLC运行方式(Run)下通信,我们采用自由口通信方式在进行通信之前,应先对串口初始化。对S7-200PLC的初始化是通过设置特殊标志位SMB30来实现的。
发送S7200系列PLC有专门的发送指令用于发送数据,格式为:
XMTTABLEPORT
XMTTABLEPORTTABLE为发送数据的字节数即数据长度,最大为255。而要发送的数据必须存储在TABLE的后面。如TABLE的存储区域为VB600,要发送“MESSAGE”的数据存储形式如图2所示。PORT指定通信口,本项目设为0。当正在发送数据时,PLC特殊标志位SM4.5为0;发送完后,SM4.5为1。因此可通过判断SM4.5的状态来进行发送后处理。
图2PLC发送信息
如果有一个中断服务程序连接到发送结束事件上,在发送完缓冲区中的最后一个字符时,则会产生一个中断(对端口0为中断事件9,对端口1为中断事件26)。
接收指令的格式为:RCVTABLEPORT
接收指令使您能够接收一个字节或多个字节的缓冲区,最多为255个。图3给出了接收缓冲区的格式。如果有一个中断服务程序连接到接收信息完成事件上,在接收完缓冲区中的最后一个字符时,S7-200会产生一个中断(对端口0为中断事件23,对端口1为中断事件24。)也可以不使用中断,通过监视SMB86(端口0)或者SMB186(端口1)来接收信息。当接收指令未被激活或者已经被中止时,这一字节不为0;当接收正在进行时,这一字节为0。
图3接收信息
SMB30控制自由端口0的通讯方式,SMB130控制自由端口1的通讯方式。您可以对SMB30和SMB130进行写和读。如表1所示,这些字节设置自由端口通讯的操作方式,并提供自由端口或者系统所支持的协议之间的选择。
通信接收字符缓冲器SMB2:SMB2是一个暂态寄存器,用于存放在自由口通信方式下接收到的当前字符,用户在下一步应从这里取走其中的内容,通过编程控制将接收到的字符一个一个由SMB2移入接收缓冲区。
通信校验结果标志位SMB3.0:PLC按SMB30规定的奇偶校验方式对所接收到的数据作校验。如果校验有错,PLC自动将SMB3.0置1,SM3.0=0表示奇偶校验正确。根据这个标志,可决定对当前信息的取舍,还可以在出错的情况下,将此错误位发送给对方,以便要求它重发。
工作方式标志位SM0.7:57-200系列PLC只有处于运行(RUN)方式时才能进行自由口模式通信,而在停止(ST6P)方式时只能以PPI模式通信。当PLC处于RUN方式时SM0.7=1,否则SM0.7=0,因此可通过判断SM0.7的状态来打开或关闭自由口通信。
发送器空标志SM4.5及收发指令:当正发送数据信息时,特殊存储器位SM4.5=0,当发送完成后,SM4.5=1,因此可通过判断SM4.5的状态来进行发送后处理,也可直接用发送中断来处理。
表1特殊存储器字节SMB30
在Windows环境下,实现上位机与PLC的数据通讯,有多种软件开发平台可以使用,VisualBasic编写通信软件十分方便,编程工作量小,可视化程度高,尤其是提供了通信控件MSComm,可方便地实现与多台PLC间的通信。MSComm控件有很多重要属性,其中最重要的几个是:
(1)CommPort:设置并返回通信口号;
(2)Settings:以字符串的形式设置并返回波特率、校验方式、数据位和停止位;
(3)PortOpen:设置并返回通信端口的状态(打开或关闭一个通信口);
(4)InBufferCount:返回接收缓冲区收到的字节数;
(5)Input属性:从接收缓冲区读取数据;
(6)Output属性:向传送缓冲区写一个字符串。
计算机与PLC的通信过程流程图如图5所示,下面为计算机与5号站PLC的主要通信程序。
PrivateSubForm_Load0
MSComm1.CommPort=1//使用串行口1
MSComm1.Settings=“9600,e,7,1”//9600波特率,偶校验,7位数据位,1位停止位
MSComm1.InBufferCount=0//清除接收缓冲区
MSComm1.InputLen=0//输入时,读取缓冲区的全部内容
MSComm1.PortOpen=True//打开通信口
PrivateSubSend_Click()
HD=“5”+“FF”+“WW”+“A”+“M0100”+“01”+Data//发给5号PLC站
Write=Chr(5)+HD+SumChk(HD)+Chr(13)+Chr(10)//形成控制命令字,其中DataW为要
//写入的数据,SumChk(RD)为和校验函数
MSComm1.Output=Write//向5号站PLC发送控制命令
Do
XY=MSComm1.Input//接收PLC响应
RD_date=RD_date+XY
LoopUntilRight(RD_date,2)=Chr(13)&Chr(10)
Rd=Left(RD_date,5)//取应答字符串的前5位
IfRd=Chr(6)+“02FF”Then
MsgBox“控制命令已接收”
Else
MsgBox“通信错误”
EndIf
EndSub
PrivateSubD_A()
RD=“05”+“FF”+“WR”+“A”+“DO0000”+“01”
Read=Chr(5)+RD+SumChk(RD)+Chr(13)+Chr(10)
MSComm1.Output=Read//发送读5号站PLC数据命令
Do
ch=MSComm1.Input//接收PLC响应
R_Answer=R_Answer+ch
LoopUntilRight(R_Answer,2)=Chr(13)&Chr(10)
RA=Left(R_Answer,5)//取PLC应答字符串的前5位
IfRA=Chr(2)+“02FF”Then//判断读取是否正确
MSComm1.Output=Chr(6)+“02FF”//正确,向PLC发送
确认信号DataR=Mid(R_Answer,6,4)//取出数据
DataR=Val(&H+DataR)//据转换位十进制数
Else
MsgBox“读取数据错误”
EndIf
EndSub
PLC通过程序对调试线的控制,产生的调试结果存放在以VB100为首的255个字节中,本文主要叙述的通讯,并也存在数据的翻译过程,例如调试的力矩值放在VW200中,则要求将VB200乘以256再加VB201。若是浮点数的翻译方式还了复杂些,在此就不一一叙述。主要是将一串调试数据发送给上位机,并得到上位机的对试验结果的判断与命令。下面结合通讯相关的PLC程序,对通讯进行相应的说明。
LDI0.1//发送控制
EU
CALL发送:SBR1//将调试好的数据存储在表中,准备调用子程序发送
SBR0:
LDSM0.0
MOVB9,SMB30//初始化端口0
MOVB16#F0,SMB87//初始化RCV信息控制字节,RCV使能
//检测信息结束字符,检测空闲线信息条件
MOVB16#05,SMB88//只接收发给本站的数据(以5号站为例)
MOVB16#0A,SMB89//接收回车键,接收的结束数据
MOVB5,SMB90//设置空闲线超时为5ms
MOVB10,SMB94//设置最大字符数为10
ATCHINT_0:INT0,23//接收完成,执行中断0
ENI//启用用户中断
RCVVB600,0//通过端口0,接收数据,存储在以VB600为首的字节中
SBR1:
LDSM0.0
MOVB2#01101001,SMB30//初始化端口0,9600波特,7个数据位,偶校验
MOVB255,VB1000//发送的总数据位
ATCHINT_1:INT1,9//发送完成执行中断1
ENI//启用用户中断
XMTVB100,0//通过端口0,发送数据,发送以VB100为首的字节中
中断子程序INT0:
LDSM0.0
MOVBVB602,QB0//响应已接收到命令
中断子程序INT1:
LDSM0.0
CALL接收:SBR0//使PLC处于接收状态
该系统经实际运行情况表明,采用RS-485总线构建的分布式监控系统,硬件连接简单,编程快捷,可方便地实现计算机和多台PLC间的联网通信,与用现场总线模块EM277构建的Profibus-DP、以太网模块EM243-I相比大大降低了成本,且不受只有8个站点可以使用PCAccess的限制,运行一年多来实践表明运行稳定可靠,能很好的满足监控系统的要求。
全部0条评论
快来发表一下你的评论吧 !