基于RS485总线的分布式PLC监控系统通信设计

通信设计应用

63人已加入

描述

  0引言

  随着计算机与通信技术的发展,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等通信系统设计的应用范例,同时可作为检测技术、自动化设计等课程的工程项目训练与教学的平台。

  1RS485网络构成

  RS485标准采用有平衡式发送,差分式接收的数据收发器来驱动总线,与RS422一样,可以将多个(最多为32个)RS485接口互连,而其连接更简单,只需将各个接口的“+”端和“+”端相连、“-”端和“-”端相连,连接的两根线就是RS485的“物理总线”。这些相互连接的RS485接口的物理地位完全平等,在逻辑上取一个为主导地位,其他为从属地位。在通信时,同样采用主呼叫,从应答的方式。

  控制系统的硬件构成如图1所示,上位机为计算机,下位机采用西门子公司S7-200系列PLC,各PLC通过通信口0直接挂在RS485总线上,上位机通过RS232/485转换器与RS485总线相连,形成1:N通信方式。控制系统中,上位机的主要任务是获取调试线上的数据信息,完成对调试过程的监控。下位机的主要任务是对调试过程进行自动控制,将调试数据发送给上位机,并按上位机命令执行。

  plc

  图1网络图

  2计算机与PLC的通信

  上位机与PLC的通信实际上是计算机与PLC的通信模块之间交换命令和响应,下位机具有初始传送优先权,将所有调试数据发送给上位机,上位机根据收到的数据判断哪个调试线发出的数据,对数据分析后响应回传数据与命令,下位机只接收发送给自己的数据。通信以“帧”为单位进行,帧分为数据帧和响应帧两种。数据帧由PLC发送给上位机;响应帧为上位机接到数据帧后自动向PLC发出的命令与判断信号所有的指令码、字符和数据均以十六进制码发送和接受。

  S7-200系列PLC通信模式有两种:一种是点对点(PPI)通信协议,用于PLC与其编程器或西门子公司的人机接口产品之间的通信;另一种是对用户完全开放的自由口模式(freeportmode),由用户自行规定通信的协议。PPI模式只能在PLC停止方式(STOP)下通信,而自由口模式只能在PLC运行方式(Run)下通信,我们采用自由口通信方式在进行通信之前,应先对串口初始化。对S7-200PLC的初始化是通过设置特殊标志位SMB30来实现的。

  2.1PLC的发送指令

  发送S7200系列PLC有专门的发送指令用于发送数据,格式为:

  XMTTABLEPORT

  XMTTABLEPORTTABLE为发送数据的字节数即数据长度,最大为255。而要发送的数据必须存储在TABLE的后面。如TABLE的存储区域为VB600,要发送“MESSAGE”的数据存储形式如图2所示。PORT指定通信口,本项目设为0。当正在发送数据时,PLC特殊标志位SM4.5为0;发送完后,SM4.5为1。因此可通过判断SM4.5的状态来进行发送后处理。

 plc

  图2PLC发送信息

  如果有一个中断服务程序连接到发送结束事件上,在发送完缓冲区中的最后一个字符时,则会产生一个中断(对端口0为中断事件9,对端口1为中断事件26)。

  2.2PLC接收指令

  接收指令的格式为:RCVTABLEPORT

  接收指令使您能够接收一个字节或多个字节的缓冲区,最多为255个。图3给出了接收缓冲区的格式。如果有一个中断服务程序连接到接收信息完成事件上,在接收完缓冲区中的最后一个字符时,S7-200会产生一个中断(对端口0为中断事件23,对端口1为中断事件24。)也可以不使用中断,通过监视SMB86(端口0)或者SMB186(端口1)来接收信息。当接收指令未被激活或者已经被中止时,这一字节不为0;当接收正在进行时,这一字节为0。

  plc

  图3接收信息

  2.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

  plc

  3上位机程序设计

  在Windows环境下,实现上位机与PLC的数据通讯,有多种软件开发平台可以使用,VisualBasic编写通信软件十分方便,编程工作量小,可视化程度高,尤其是提供了通信控件MSComm,可方便地实现与多台PLC间的通信。MSComm控件有很多重要属性,其中最重要的几个是:

  (1)CommPort:设置并返回通信口号;

  (2)Settings:以字符串的形式设置并返回波特率、校验方式、数据位和停止位;

  (3)PortOpen:设置并返回通信端口的状态(打开或关闭一个通信口);

  (4)InBufferCount:返回接收缓冲区收到的字节数;

  (5)Input属性:从接收缓冲区读取数据;

  (6)Output属性:向传送缓冲区写一个字符串。

  计算机与PLC的通信过程流程图如图5所示,下面为计算机与5号站PLC的主要通信程序。

  3.1初始化通信口

  PrivateSubForm_Load0

  MSComm1.CommPort=1//使用串行口1

  MSComm1.Settings=“9600,e,7,1”//9600波特率,偶校验,7位数据位,1位停止位

  MSComm1.InBufferCount=0//清除接收缓冲区

  MSComm1.InputLen=0//输入时,读取缓冲区的全部内容

  MSComm1.PortOpen=True//打开通信口

  3.2发送控制命令

  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

  3.3读取调试线状态信息

  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

  4PLC程序设计

  PLC通过程序对调试线的控制,产生的调试结果存放在以VB100为首的255个字节中,本文主要叙述的通讯,并也存在数据的翻译过程,例如调试的力矩值放在VW200中,则要求将VB200乘以256再加VB201。若是浮点数的翻译方式还了复杂些,在此就不一一叙述。主要是将一串调试数据发送给上位机,并得到上位机的对试验结果的判断与命令。下面结合通讯相关的PLC程序,对通讯进行相应的说明。

  4.1主程序

  LDI0.1//发送控制

  EU

  CALL发送:SBR1//将调试好的数据存储在表中,准备调用子程序发送

  4.2接收子程序

  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为首的字节中

  4.3发送子程序

  SBR1:

  LDSM0.0

  MOVB2#01101001,SMB30//初始化端口0,9600波特,7个数据位,偶校验

  MOVB255,VB1000//发送的总数据位

  ATCHINT_1:INT1,9//发送完成执行中断1

  ENI//启用用户中断

  XMTVB100,0//通过端口0,发送数据,发送以VB100为首的字节中

  4.4中断子程序

  中断子程序INT0:

  LDSM0.0

  MOVBVB602,QB0//响应已接收到命令

  中断子程序INT1:

  LDSM0.0

  CALL接收:SBR0//使PLC处于接收状态

  5结束语

  该系统经实际运行情况表明,采用RS-485总线构建的分布式监控系统,硬件连接简单,编程快捷,可方便地实现计算机和多台PLC间的联网通信,与用现场总线模块EM277构建的Profibus-DP、以太网模块EM243-I相比大大降低了成本,且不受只有8个站点可以使用PCAccess的限制,运行一年多来实践表明运行稳定可靠,能很好的满足监控系统的要求。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分