如何用PC和PLC组建监控系统
发布者:管理员   发布时间:2013-01-05 20:07:59 浏览次数:

由于plc结构紧凑、可靠性高、灵活性强,因而广泛应用于各种自动化系统。现在普遍采用触摸屏加plc的方法来监控设备,但触摸屏视角窄、不适应恶劣环境,且plc的数据存储能力相当有限、不易实现大规模网络互联。有鉴于此,我们采用优秀的可视化软件visual basic,由计算机加plc组建监控系统。该系统既克服了由触摸屏加plc组建的监控系统的不足,又可完成对设备的实时监控。

2 串行通讯协议

计算机与plc通讯时,一般由计算机发命令给plc,启动通信,plc收到命令后自动发回应答。下面给出了命令帧、应答帧以及帧检查的结构。

如何用PC监控PLC
 
 fcs(frame checksum)表示报头开始到报文结束间所有数据执行逻辑加操作所得的结果。

  它由两位ascii码字符组成,每次plc接收到计算机发送过来的一帧数据,即计算其校验和,结果记为fcs2,将fcs2与帧中所包含的fcs1比较,可检查该帧是否有数据错误。如果有数据错误,plc立即发送错误信息给计算机,利用这一机制,有效防止了数据传输错误。

3 串行通信口初始化

  3.1 计算机串行通信口初始化

  vb的mscomm控件通过串行端口传送和接收数据。因此,可通过对visual basic的mscomm控件的相关属性的设置来对串口进行初始化。

  mscomm控件的主要属性如表1

如何用PC监控PLC
 
计算机串口初始化程序段如下:

  with mscomm1

  .portopen = false

  .commport = 1 file://设置通信端口号为1

  .settings=“9600,n,8,1” file://波特率为9600,不作

  file://字符校验,8位数据位,1位停止位

  .portopen=true file://打开通信端口

  .inputmode=cominputmodebinary file://以字节方式接收数据

  end with

 3.2 plc串行通信口初始化

  西门子s7-200可以采用用户定义通信协议(自由口)模式实现计算机与plc、plc与plc的通信。自由口通信是通过用户程序控制s7-200 cpu串行通信口的操作模式。利用自由口模式可实现用户定义通信协议连接多种智能设备。s7-200 cpu自由口的控制字节描述如表2。

如何用PC监控PLC
 
 plc串口初始化程序如下:

  ld sm0.1 file://首次扫描闭合

  movb 16#09,smb30 file://初始化自由口,9600波特率,

  file://8位数据,无校验

  movb 16#e0,smb87 file://初始化接收控制信息,检测信

  file://息结束符、空闲线信息条件

  movb 16#24,smb88 file://信息字符开始

  movb 16#2a,smb89 file://信息字符结束

  movb +5,smw90 file://设置空闲线超时时间

  movb 200,smb94 file://设置最大允许接收字符数

  atch int_0,23 file://设置接收完成中断

  atch int_1,9 file://设置发送完成中断

  eni file://设置用户中断允许

4 实时数据传输处理

  因为各种原因,使得系统参数发生了变化,因此,监控系统必须具备实时性要求,也就是说,只要设备状态一改变,监控系统就将信息采集并传送到计算机,以便监控人员及时了解现场,对现场情况作出判断、进行相应的操作。实时性包括计算机与plc实时通信以及plc实时监控所联设备状态两方面内容。

  4.1 计算机实时数据处理

  该部分由vb的timer控件完成。通过引发timer事件(timer事件是vb模拟实时计时器的事件),timer控件可以定时执行规定的操作,使得plc所连接的设备状态信息及时传送到计算机。


如何用PC监控PLC
 
4.2 plc实时数据处理

  由于s7-200系列plc在自由口模式下,通信协议完全由梯形图程序控制。s7-200cpu连续扫描用户程序、执行用户任务。plc在程序执行过程中,基于稳定、快速、灵活等方面考虑,cpu每个扫描周期都通过输入输出映像寄存器来执行实际输入输出操作,即读实际输入点值到映像寄存器、写映像寄存器值到实际输出点。由于在中断中不能顺利进行数据读写操作,因此,可通过编程,利用plc循环扫描执行程序的特点,使得在程序扫描期间实现数据存储区与输入输出映像寄存器区交换数据,也就是说,计算机只要通过与数据存储区实时完成通信就可达到实时监控实际输入输出点的效果。

  该部分的程序段如下:

  主程序部分:

  ld sm0.1 file://首次扫描闭合

  call subr_0 file://调用子程序0

  movb 1,vb0 file://vb0.0置1

  ld vb0.0 file://设置数据存储区与映像区交换数据条件

  call subr_1 file://调用子程序1

  ┇

  end file://主程序结束

  子程序1部分程序如下:

  ld sm0.0 file://始终闭合

  movd vd101,id0 file://数据存储区写数据到数字量输入

  file://映像区

  movd id0,vd101 file://读数字量输入映像区数据到数据

  file://存储区

  movd vd201,qd0 file://数据存储区写数据到数字量输

  file://出映像区

  movd qd0,vd201 file://读数字量输出映像区数据到数

  file://据存储区

  movw aiw0,vw301 file://读模拟量输入映像区到数据存

  file://储区

  movw vw401,aqw0 file://数据存储区写数据到模拟量输

  file://出映像区

  ┇

  cret file://子程序返回

  发送、接收部分:

  rcv vb500,0 file://从端口0接收数据存于vb500单元

  file://起始的连续单元

  xmt vb55,0 file://将vb55单元后的指定数据从端口0

  file://连续发出