您好,欢迎访问三七文档
VBMSCOMM与PLC通讯发表于2005-9-2810:36:48在启动过程中对串口和输入输出缓冲区初始化comm1.Settings=1200,n,8,1'设定波特率1200bps,无校验,8位数据位,1位停止位comm1.CommPort=1'串口1comm1.InputLen=1'一次从输入缓冲区中读取一个字符comm1.InBufferSize=512'定义输入缓冲区为512字节(bytes)comm1.InBufferCount=0'清空输入缓冲区comm1.OutBufferCount=0'清空输出缓冲区comm1.PortOpen=True'启动串口上位机向下位机发送的命令有校时命令、请求内存命令、发送数据命令、快采命令和慢采命令等。发送命令有两种发送方式,即手动方式和自动方式,自动方式是由定时器来完成的。下面是发送数传命令的子过程,启动该过程由一个定时器控制:Subsample_data()comm1.RTSEnable=True将上位机置高,Calltime_delay适当延时comm1.Output=*关机+Chr$(13)发送命令Do该循环用来检测命令是否全部发送完毕LoopUntilcomm1.OutBufferCount=0Calltime_delay适当延时comm1.RTSEnable=False将上位机置低,改为接受状态comm1.InBufferCount=0清空接收缓冲区comm1.RThreshold=1设定RThreshold=1,等待出发OnComm事件EndSubVB6.0在PLC与上位机通讯中的应用发表于2005-9-2810:33:081、引言可编程控制器以其高可靠性,配置灵活和完善的功能,在工业控制系统中得到越来越广泛的应用。但对于操作员所需要的报表打印、趋势图形显示、工况查寻、参数在线修改等功能,PLC却不能直接方便地提供。所以通常采用计算机PC与PLC组成一个完整的监控系统。本文以台安TP02系列PLC为例,讨论用VisualBasic(VB)实现PLC与上位机的通讯。2、VB在通讯控件中的使用可编程控制器PLC与上位机PC之间的通信,下位机为PLC,基于其可靠性极高,主要承担控制功能,而上位PC机主要承担监察管理功能,有时兼备部分控制功能,如发出运行,停止命令。VB语言是基于WINDOWS操作系统的功能强、易学易用、主要是面向学习对象的程序设计语言。VB带有专门管理串行通讯的MSComm控件,只需设置几个主要参数就可以实现PLC与PC串行通讯。要完成通信必须设置MSComm的相关属性值:(1)CommPort:设置或传回通信连接端口代号(2)Settings:设置初始化参数。以字符串的形式设置或传回连接速度、奇偶校验、数据位、停止位等4个参数(3)PortOpen:设置或传回通信连接端口的状态(4)Input:从输入寄存器传回并移除字符(5)Output:将一个字符串写入输出寄存器(6)InputLen:指定由串行端口读入的字符串长度(7)InBufferCount:传回在接收寄存器中的字符数3、软硬件之间:台安TP02与上位机PC通信时,为了实现两者的通信需要配备通信线。4、通信程序的实现4.1通信初始化程序首先,在窗体开始设计之前,添加MSComm控件。4.2程序编写:4.2.1通信控件MSComm1属性设置:MSComm1.CommPort=1设置端口号MSComm1.Settings=19200,E,7,2设置通信参数MSComm1.InputLen=0设置读入字符串长度MSComm1.PortOpen=True设置通信端口状态4.2.2PLC运行程序:STX$=::TransmitBuf$=01?5RUNsum$=CheckSum(transmitBuf$)ETX$=Chr$(13)SXD$=STX$+transmitBuf$+sum$+ETX$MSComm1.Output=SXD$DoDoEventsLoopUntilMSComm1.InBufferCount=12In1$=MSComm1.Input4.2.3从PLC读取资料,将寄存器内的数据资料在PC上显示以便观察监控(反应时间50ms):STX$=::transmitBuf$=01?5MRVD000102sum$=CheckSum(transmitBuf$)ETX$=Chr$(13)SXD$=STX$+transmitBuf$+sum$+ETX$MSComm1.Output=SXD$DoDoEventsLoopUntilMSComm1.InBufferCount=20InData$=MSComm1.InputLabel2.Caption=Mid$(InData$,10,4)Label3.Caption=Mid$(InData$,14,4)4.2.4从PLC读取资料,将RelayC0001状态通过PC显示进行监控(反应时间50ms):STX$=::transmitBuf$=01?5MCRC0001sum$=CheckSum(transmitBuf$)ETX$=Chr$(13)SXD$=STX$+transmitBuf$+sum$+ETX$MSComm1.Output=SXD$DoDoEventsLoopUntilMSComm1.InBufferCount=13In4$=MSComm1.InputCoil$=Mid$(In4$,10,1)C1%=CInt(Coil$)Label6.Caption=C1%4.2.5设定Relay状态,将Relay设定为ON(反应时间50ms):DimC1AsIntegerSTX$=::transmitBuf$=01?5SCSY00011sum$=CheckSum(transmitBuf$)ETX$=Chr$(13)SXD$=STX$+transmitBuf$+sum$+ETX$MSComm1.Output=SXD$DoDoEventsLoopUntilMSComm1.InBufferCount=12In2$=MSComm1.Input4.2.6PLC停止运行:STX$=::transmitBuf$=01?5STPsum$=CheckSum(transmitBuf$)ETX$=Chr$(13)SXD$=STX$+transmitBuf$+sum$+ETX$MSComm1.Output=SXD$DoDoEventsLoopUntilMSComm1.InBufferCount=12In3$=MSComm1.Input4.2.7VB6.0下CheckSum函数代码如下:PrivateFunctionCheckSum(transmitBuf$)L=Len(transmitBuf$)Add=0Dimk,sumAsIntegerFork=1ToLTJ$=Mid$(transmitBuf$,k,1)Add=Add+Asc(TJ$)NextkDoWhileAdd=256Add=Add-256LoopAdd=255-Add+1tempBuf$=Hex$(Add)CheckSum=LTrim(tempBuf$)EndFunction5、结论PLC与上位机的结合,并通过VB6.0传送数据所构成的计算机监控系统,对于近距离传输数据的现场控制来说是一种性价比很高的解决方案。充分的利用的PLC的抗干扰性能和PC强大的图形显示,浮点运算的特点,与之有效地结合,最大限度,合理的利用资源。三菱PLC与PC机通讯的VB源程序PLC与PC机通讯的VB源程序大体如下:我采用的是FX232BD通讯模块,协议就是FX通讯协议。‘强制PLC为RUNPrivateSubcommand1_Click()DimdatAsStringcommli.OutBufferCount=0commli.InBufferCount=0dat=01FFRR0commli.Output=Chr$(5)+dat+SumChk(dat)EndSub‘强制PLC为STOPPrivateSubcommand2_Click()DimdatAsStringcommli.OutBufferCount=0commli.InBufferCount=0dat=01FFRS0commli.Output=Chr$(5)+dat+SumChk(dat)EndSub‘强制Y0为1PrivateSubcommand3_Click()DimdatAsStringcommli.OutBufferCount=0commli.InBufferCount=0commli.Output=“01FFBW0Y001011”EndSub‘强制Y0为0PrivateSubcommand3_Click()DimdatAsStringcommli.OutBufferCount=0commli.InBufferCount=0commli.Output=“01FFBW0Y001010”EndSub\'\'设置电脑通信参数PrivateSubCommlis()Ifcommli.PortOpen=TrueThencommli.PortOpen=FalseEndIfIfNotcommli.PortOpenThencommli.CommPort=1\'\'通信口commli.Settings=9600,N,8,1commli.Handshaking=0commli.InputLen=0commli.OutBufferCount=0commli.InBufferCount=0commli.PortOpen=TrueEndIfExitSubEndSubPrivateFunctionSumChk(Dats$)AsStringDimi&DimCHK&Fori=1ToLen(Dats)CHK=CHK+Asc(Mid(Dats,i,1))NextiSumChk=Right(Hex$(CHK),2)EndFunction
本文标题:VB-PLC
链接地址:https://www.777doc.com/doc-2865653 .html