还剩7页未读,继续阅读
文本内容:
回波通讯的计算机处理王波云南省电子信息高级技工学校【关键词】计算机串行通讯回波通讯求和校验程序PLC485PC-IF VB【摘要】本文主要通过一台计算机采用串口和485PC-IF与FX系列的PLC通过485BD连接构成网络,而在这个网络中会存在回波通讯使通讯出故障,我就用VB编写串口控制程序来控制两台PLC完成电动机的正反转和星三角降压启动来阐述回波通讯故障的处理方法js=Chr6+〃02FF〃Else=〃N
0.2PLC停止失败〃js=Chr15+〃02FF〃End Ift=js pen二FalseEnd SubPrivate Sub Timerl_Timer2#PLC星形启动时间到转到三角形运行Dim rdAs String If pen=False Thenpen=True打开串行端口End IfLen=0串行数据接收缓冲区初始化rd=〃02FFBWAY〃t=Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:If ferCount25Then GoToAA等待收数据rdh=读取接收缓冲区数据pd=Midrdh,21,5取字符串中的部分字符Print〃收到的数据是〃;rdhPrint〃头是〃;pd取PLC应答字符串的前5位If pd=Chr6+〃02FF〃Then判断读取是否正确=〃N
0.2PLe三角形运行成功〃js=Chr6+〃02FF〃Else二〃N
0.2PLe三角运行失败〃js=Chr15+〃02FF〃End Ift=js pen=False ed=False EndSub
四、结束语通过上面的回波通讯例子的我们可以知道,当发生回波通讯时原来PLC返回给计算机的数据被加长,加上了计算机发送给PLC的命令及数据,因此我们收取PLC返回数据的时候数据位就要加上计算机发送的命令及数据位,当计算机收完数据后还要把那一部分数据区分出来,使用取字符函数的时候就要注意从哪一位开始取数据,取多少位后再做判断以上是我对回波通讯的理解和计算机的处理方法,本文也只是抛砖引玉罢了,还希望以上的例子对对回波通讯处理困惑的你有一定的帮助,当中或许存在谬误之处,还望批评指正回波通讯的计算机处理在计算机采用串口和连接与系列通讯的时候不存在回波通讯232BD FX PLC的问题,通讯情况都比较正常,但是这种通讯方式只可以一台计算机连接一台PLC,而当我们要用一台计算机控制台及以下系列的时候就就有可能出现回16FXPLC波通讯,即使用采用一对线模式构成系列与计算FX-485-PC-IF.FX-485BD FXPLC机通讯时会产生回波通讯,此时返回给计算机的数据会比原来没有发生回波PLC通讯的正常数据要多,会返回计算机发给的数据和本该返回给计算PLC PLCPLC机的数据,给通讯带来麻烦;那么怎么解决回波通讯的问题呢,下面我就回波通讯问题结合我的实践以例子形式给出计算机的解决办法
一、和计算机的连接PLC一采用通讯模块连接构成类似网络的一对线的接线模式,计算机采PLC485N:N用口和连接,另外一端和构成的网络相连接,232FX-485-PC-IF FX-485-PC-IF PLC接线方式不变,接线如下面两个图所示()A isJ71UC24
二、设置PLC通讯参数可以通过的参数设置的系统()进行设PLC GXDeveloper PLCPLC2置,也可以通过程序修改和进行设置,下面给出设置站号为PLC D8120D81211的参数参考PLCM8002—||——-----------------------------------------------------------------------------[MOV H6081D8120}设置参数完成后要传入[MOV KOD8121-------------------------------------------------------------}PLC,并掉电后再次上电,设置才有效;其他站号的PLC设置基本上相同,改变站号设置那里就可以
三、计算机VB程序
(一)、通讯格式在正常情况下(没有回波通讯时)计算机向PLC发出请求数据后,PLC返回计软元件点数成批读出(位)的指令字符A区2个字荐(16进制数)为;0OOH OFF为BR131H ON[算机的数据不包含计算机向PLC发出的请求数FXON,FX2NC,FX-485ADP FX2N+FX2N-485-BD,A seriesPLC+据,通讯格FX2N+FX2N-CNV-BD,FX1S+FX1N-485-BD,FXis+FXIN-CNV-BD,FXIN+FXIN+FXIN^85-BD式如下FXIN-CNV-BD可编程控制器一侧FX3U-485-BDFX3G-485-BDFX2N-485-BD和站起始软元件校FXitr-485-BD号(个字符)验5包计算机一侧—V指定读出软元件的范围w----------字符区B*指定的软元件点数部分的数据(软元件点数部分的字符)计算机发送数据1:当发生回波通讯时,PLC返回数据会加上计算机发送给PLC的请求数据,通讯格式如下L17S EEN报起始软元件I站P Ca文T站号*TQ BR(个字符)a PC善5号X X111这里返回的数据包含了计算机发送PLC的请求数据和应该返回给计算机的数据计算机发送数据2其他指令(BW、BT、WR、WW、RR、RS)格式和正常通讯情况差不多,都是PLC返回数据多加了计数器的请求数据,格式不再给出
(二)、VB程序在这里给出用计算机控制1#PLC控制电动机正反转和2#PLC控制电动机星三角降压启动和PLC强制运用、停止的VB程序,并做注释讲解回波通讯的处理差别
1、窗体及控件电回波通讯处理#mm;2#PLcI PLC串口波特率,校验方式,数据位,停止位如图所示;定时器时间设定强制RUN强制STOF强制RUN强制STOP正向启动星形启动反向启动停止停止状态显示为3秒2#PLC电动机启动时间,Interval设置为
30002、代码Private FunctionSumCHk Dats$As StringASCII求和子程序Dim iDimCHKFor i=1To LenDatsCHK=CHK+AscMidDats,i,1Next iSumCHk=Right Hex$CHK,2End FunctionPrivateSub Commandl_Click强制运行1#PLCDim rdAs StringIf pen=False Thenpen=True打开串行端口End IfLen=0,串行数据接收缓冲区初始化rd=〃01FFRRA〃t=Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:If ferCount〈15Then GoToAA等待收数据’如果没有回波通讯ferCount5,此时没有发回计算机命令数据,数据相对较少,要收多少字符的自己算出rdh二’读取接收缓冲区数据pd=Midrdh,11,5取字符串中的部分字符,发生回波通讯,取字符是要去掉重复发送的计算机命令及数据,如果没有回波通讯测pd二Midrdh,1,5If pd=Chr6+〃01FF〃Then判断读取是否正确二〃N
0.1PLC强制RUN成功〃Else=〃N
0.1PLC强制RUN失败〃End Ifpen=FalseEnd SubPrivateSub Command2click强停止1#PLCDim rdAs StringIf pen=False Thenpen=True打开串行端口End IfLen=0串行数据接收缓冲区初始化rd=〃01FFRSA〃t=Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:If ferCount15Then GoToAA等待收数据rdh=读取接收缓冲区数据pd=Midrdh,11,5取字符串中的部分字符Print〃收到的数据是〃;rdhPrint〃头是〃;pd取PLC应答字符串的前5位If pd=Chr6+〃01FF〃Then判断读取是否正确=〃N
0.1PLC强制STOP成功〃Else二〃N
0.1PLC强制STOP失败〃End Ifpen=FalseEnd SubPrivateSub Command3_Click1#PLC正向启动电动机Dim rdAs StringIf pen=False Thenpen=True打开串行端口End IfLen二0串行数据接收缓冲区初始化rd=〃01FFBWAY〃t=Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:If ferCount24Then GoToAA等待收数据rdh二’读取接收缓冲区数据pd=Mid rdh,20,5取字符串中的部分字符Print〃收到的数据是〃;rdhPrint〃头是〃;pd取PLC应答字符串的前5位If pd=Chr6+〃01FF〃Then判断读取是否正确二〃N
0.1PLC正向启动成功〃js=Chr6+〃01FF〃Else=z,N
0.1PLC正向启动N失败〃js=Chr15+〃01FF〃End Ift二js pen=FalseEnd SubPrivateSub Command4Click1#PLC反向启动电动机Dim rdAs StringIfpen=False Thenpen=True打开串行端口End IfLen=0串行数据接收缓冲区初始化rd=OlFFBWAYt二Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:IfferCount24Then GoToAA等待收数据rdh=读取接收缓冲区数据pd=Midrdh,20,5取字符串中的部分字符Print〃收到的数据是〃;rdhPrint〃头是〃;pd取PLC应答字符串的前5位If pd=Chr6+〃01FF〃Then判断读取是否正确=〃N
0.1PLC反向启动成功〃js=Chr6+〃01FF〃Else二NO.1PLC反向启动失败〃js=Chr15+〃01FF〃End Ift=js pen=FalseEnd SubPrivateSub Command5_Click,1#PLC停止动电动机Dim rdAs StringIfpen=False Thenpen=True打开串行端口End IfLen=0串行数据接收缓冲区初始化rd=OlFFBWAYt=Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:If ferCount24Then GoToAA等待收数据rdh=读取接收缓冲区数据pd=Midrdh,20,5取字符串中的部分字符Print〃收到的数据是〃;rdhPrint〃头是〃;pd取PLC应答字符串的前5位If pd=Chr6+〃01FF〃Then判断读取是否正确二〃N
0.1PLC停止成功〃js=Chr6+〃01FF〃Else=〃N
0.1PLC停止失败〃js=Chr15+〃01FF〃End Ift=jspen=FalseEnd SubPrivateSub Command6_Click2#PLC强制运行Dim rdAs StringIfpen=False Thenpen=True打开串行端口End IfLen二0串行数据接收缓冲区初始化rd=〃02FFRRA〃t=Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:If ferCount15Then GoToAA等待收数据rdh二’读取接收缓冲区数据pd=Midrdh,11,5取字符串中的部分字符Print〃收到的数据是〃;rdhPrint〃头是〃;pd取PLC应答字符串的前5位If pd=Chr6+〃02FF〃Then判断读取是否正确二〃N
0.2PLC强制RUN成功〃Else=〃N
0.2PLC强制RUN失败〃End Ifpen=FalseEnd SubPrivateSub CommandClick2#PLC强制停止Dim rdAs StringIfpen=False Thenpen=True打开串行端口End IfLen=0串行数据接收缓冲区初始化rd=〃02FFRSA〃t=Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:If ferCount15Then GoToAA等待收数据rdh=读取接收缓冲区数据pd=Midrdh,11,5取字符串中的部分字符Print”收到的数据是〃;rdhPrint〃头是〃;pd取PLC应答字符串的前5位If pd=Chr6+〃02FF〃Then判断读取是否正确=〃N
0.2PLC强制STOP成功〃Else=〃N
0.2PLC强制STOP失败〃End Ifpen=False EndSubPrivate SubCominand8_Click2#PLC电动机星形启动Dim rdAs StringIfpen=False Thenpen=True打开串行端口End IfLen=0串行数据接收缓冲区初始化rd=〃02FFBWAY〃t二Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:IfferCount25Then GoToAA等待收数据rdh=读取接收缓冲区数据pd=Midrdh,21,5取字符串中的部分字符Print〃收到的数据是〃;rdhPrint〃头是〃;pd取PLC应答字符串的前5位If pd二Chr6+〃02FF〃Then判断读取是否正确=〃N
0.2PLe星形启动成功〃js=Chr6+〃02FF〃ed=True Else二〃N
0.2PLe星形启动失败〃js=Chr15+〃02FF〃End Ift=js pen=False EndSubPrivateSubCommand9_Click2#PLC电动机停止Dim rdAsStringIfpen=False Thenpen=True打开串行端口End IfLen=0串行数据接收缓冲区初始化rd=〃02FFBWAY〃t=Chr5+rd+SumCHkrd准备向PLC发送的读取数据命令字符串AA:IfferCount25Then GoToAA等待收数据rdh二’读取接收缓冲区数据pd=Midrdh,21,5取字符串中的部分字符Print〃收到的数据是〃;rdhPrint〃头是〃;pd取PLC应答字符串的前5位If pd=Chr6+〃02FF〃Then判断读取是否正确=〃N
0.2PLC停止成功〃。
个人认证
优秀文档
获得点赞 0