PC和PLC自由口通信在数码显示中的应用
用软件,功能强大,主要用于开发程序,也可用于适时监控用户程序的执行状态。s7-200PLC的cpu连续执行用户的程序,任务的循环写输出序列称为扫描。cpu的扫描周期如图4所示。
为了不延长cpu的机时,缩短s7-200 PLC的扫描周期,通信程序应尽可能短小。
自由通信模式下PLC的控制程序可以使用接收中断、发送中断、发送指令(xmt)和接收指令(rcv)来控制通信操作。s7-200的cpu处于run模式时,能够进行自由端口通讯。在这一模式下,用户可以通过PLC程序来选择协议,可以使用接收中断、发送中断、发送指令(xmt)和接收指令(rcv)来进行通信操作。在run模式下,对于port0(port1),当smb30协议选择域(mm)置1(smbi30协议选择域(mm)置1)时,便选择了自由端口模式。在stop状态下,自由端口模式被禁止,cpu能够与可编程设备(如编程器)之间通信。
PLC程序分为主程序和中断程序。主程序完成初始化通讯口、开中断、判断、发送数据等功能,中断程序完成接收和发送数据的功能。接收指令(rcv)启动或终止接收信息功能,必须为接收操作指定开始和结束条件。发送指令(xmt)在自由口模式下依靠通信口发送数据。
初始化通信程序:
ld sm0.0
movb 16#05, smb30 // // 初始化自由口:sm30=“ppdbbbmm” =16#05=0000
0101
movb 16#b0, smb87 // // 初始化rcv信息控制字符:sm87=16#b0 =1011 0000
movb 16#0a, smb89 // // 设定信息结束字符为“16#0d”(smb89 =“16#0d”)
movw +5, smw90 // // 设置空闲线超时时间为5ms (smw90=5)
movb 100, smb94 // // 设置最大字符数为100(smb94=100)
atch int_0, 23 // // 连接中断0到接收结束事件
atch int_2, 9 // // 连接中断2到发送结束事件
eni // // 允许用户中断
rcv vb100, 0 // // 执行接收指令,接收缓冲区指向vb100
4.3 vb通信程序设计
上位机通信软件是在vb环境下开发的,vb语言是基于windows操作系统的面向学习对象的程序设计语言。因vb具有强大的图形显示功能,可以很容易地开发出界面良好、满足用户需求的windows标准风格的图形界面。vb带有专门管理串行通信的mscomm串行端口控件,程序员在利用该控件时,只需设置、监视其属性和事件,即可完成对串行口的初始化和数据的传输工作,实现PLC与PC串行通信。要完成通信必须设置mscomm的如下相关属性值:
(1)commport:设置或传回通信连接端口代号。
(2)settings:设置初始化参数,以字符串的形式设置或传回连接速度、奇偶校验、数据位和停止位等参数。
(3)portopen:设置或传回通信连接端口的状态。
(4)input:从输入寄存器传回并移除字符。
(5)output:将一个字符串写入输出寄存器。
(6)inputlen:指定由串行端口读入的字符串长度。
(7)inbuffercoun t:传回在接收寄存器中的字符数。
用vb编制的部分通信程序如下:
程序过程名:mscomm1_on comm。它的作用:完成上位计算机(vb监控程序)与下位机(PLC)之间的串行通信。程序如下:
private sub mscomm1_oncomm()
static scoms as string
dim s1 as string
if mscomm1.commevent = comevreceive then
s1 = mscomm1.input
if (s1 = chr(&h1b)) and (len(scoms) 》 2) then
scoms = “”
else
if s1 《》 chr(&hd) then
scoms = scoms & s1
else
call mysave(scoms)
end if
end if
end if
end sub
程序过程名:mysave。它的作用:对从下位机(PLC)传输到上位机(vb监控软件)的数据进行初始化处理。程序如下:
private sub mysave(scoms as string)
scoms = trim(scoms)
scoms = mid(scoms, 1, 10)
for i = 1 to 8
text1(i).text = mid(scoms, i, 1)
next i
for i = 0 to 1
text2(i).text = mid(scoms, i + 9, 1)
next i
end sub
程序过程名:form_load。它的作用:完成窗体载入时的程序设置。
private sub form_load()
timer1.enabled = true
timer1.interval = 100
with mscomm1
.commport = 1
.settings = “19200,n,8,1”
.inputmode = cominputmodetext
.rthreshold = 1
.inputlen = 1
end with
if mscomm1.portopen = false then
mscomm1.portopen = true
end if
end sub
5 结束语
本文介绍了用可视化编程语言vb实现PC机与s7-200PLC之间的数据通讯技术及实现方法,研讨基于自由口通信模式的上下位机通信方式,通过分析其通信流程,开发相应的通信程序,并将其应用于数码显示监控系统中,实现了生产过程的自动控制,还有可视化的操作界面,充分体现了人机交互的优势。实践证明,这种通信方式简单,可靠,实时性好、成本低、便于调试,这种通信方式也可以应用于其它相关的通信场合,具有普遍和现实工程意义。
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)