PLC技术资料
    基于PLC和PC的分布式计算机监控系统的设计(下)
    发布者:用户投稿  发布时间:2008/5/4 19:36:56
    3.2 软件设计
        本系统PLC的编程使用CX-ProgrammerV3.1编写,实现PLC对故障继电器的初步监控;上位机监控使用VisualBasic6.0编写主监控程序,实现故障实时监控报警、显示、记录、故障点信息查询修改以及运行状态查询等功能。
        (1)PLC程序:该程序包括三个输入模块和一个输出模块,用于对48个故障信息的采集和分类,并对PLC后备电池状态监控。
        将故障信息转存到20通道:

        将故障分类: 

        PLC后备电池状态转存至23通道:

        (2)上位机程序:主要负责与PLC进行串口通信,读取PLC内部通道状态加以分析,在主界面上实现故障报警、显示、故障点信息查询、故障信息记录查询以及节点信息修改查询等功能。上位机PC与PLC通讯时,按应答方式进行,由上位计算机发给PLC一组ASCⅡ码字符数据,这一数据称为命令块。PLC收到命令块后经分析认为命令正常,则按照命令进行操作,将操作结果返回给上位计算机,PLC返回给上位计算机的这一组数据称为响应块。若PLC收到命令后经分析确认命令不正常,则返回给上位计算机错误命令响应块。上位计算机和PLC通讯时,PLC是被动的,必须由上位计算机给PLC发出命令块,PLC作出响应发还给上位计算机响应块。
    本程序采用多重通讯方式,多重通讯时首帧以单元号(即HOST LINK的机号)开始,然后为报头、报文、校验码、结束符(只有一帧时)或分隔符(多帧时)。中间帧以报文开始,然后为校验码、分隔符,中间帧报文每帧最多125个字符。尾帧以报文开始,然后为校验码、结束符,尾帧报文最多124个字符。
        校验码FCS(Frame Check Sequence)是8位(bit)二进制数转换成的2位字符。这8位二进制数是一帧中校验码前的所有字符的ASCⅡ码按位异或的结果。转换成字符时按照2位十六进制数字转换成对应的数字字符。
        PLC收到上位计算机发出的命令块后,经分析操作返回给上位计算机响应块,在响应块中含有响应码。如果PLC正常完成上位计算机的命令,则响应码为00,否则,响应码中含有出错信息。
        (3)上位机PC与PLC的串口通信程序设计。
        Timer2的值设为2000,即每隔2s上位机PC向PLC发送一次读取命令,读取信息。
        Private Sub Timer2_Timer()
         Dim a(10) As String
         a(0)="@00RR00200004" ’单元号和报头报文
         a(1)=FCS(a(0))  ’命令格式中的校    
     验位
         a(2)=a(0)+a(1)+"*"+Chr$(13) 
    ’命令码
         MSComm1.Output=a(2) ’向PLC发送命令
    a(3)=MSComm1.Input
    a(4)=Mid$(a(3),6,2) ’响应码
    Call Message(a(4)) ’调用响应码的错
    误信息
         If errortime > 3 Then
         Timer2.Enabled=False
         intr=MsgBox(“通讯错误,是否退出检查连接?”,vbYesNoCancel+vbExclamation,“通讯连接中”)
          If intr=vbYes Then
        ………
          Else
        ………  
          End If
          End If
    ’如果通讯连接正常则读取数据:

    [NextPage] 
          a(6)=Mid$(a(3),24,2) ’响应块中的校验码
    a(7)=Mid$(a(3),1,23)
    a(8)=FCS(a(7)) ’计算校验码
         If a(8)=a(6) Then ’比较校验码是否相同
         a(9)=Mid$(a(3),8,16)
         a(10)=Hex2Bin$(a(9))
         z=a(10) ’得到PLC内部通道数据
        Else
      MsgBox (“校验码不正确”)
        ………
          End If
        (4)校验码计算函数设计
        Function FCS(ByVal inputstr As String) As String
        Dim slen, n, xorresult As Integer
        Dim tempfcs As String
        slen=Len(inputstr)
        xorresult=0
        For n=1 To slen
        xorresult=xorresult Xor Asc(Mid$(inputstr, n, 1))
        Next n
        tempfcs=Hex$(xorresult)
        If Len(tempfcs)=1 Then
        tempfcs=“0”+tempfcs
        End If
        FCS=tempfcs
        End Function
        将响应码中的数据转换为二进制数据:
        Function Hex2Bin$(HexValue$)   
        Const BinTbl=“0000000100100011010001010110011110001001101010111100110111101111”
          Dim X,Work$
          Work$=“”
          For X=1 To Len(HexValue$)
      Work$=Work$+Mid$(BinTbl,Val(“&h”+Mid$(HexValue$, X, 1))*4+1,4)
          Next
          Hex2Bin$=Work$
        End Function

    4  监控程序完成的功能
    4.1 监控程序功能

        故障信息及节点查询参见图4。PLC电池故障显示参见图5。数据库将记录系统运行状态,记录故障发生的时间及相关信息,故障修复的时间及相关信息并提供查询功能参见图7。可以查看主界面上位号所对应的PLC位、名称、触点状态等信息以便于故障分析,参见图8。系统运行总状态指示如图6所示。

    图 4  故障点信息显示     

    [NextPage]

         

     图 5  PLC后备电池故障显示

    图 6  系统运行状态指示

    图 7  数据库查询

    图 8  位号对应信息查询

    5  结束语
        本系统是为齐鲁石化氯碱厂生产车间设计的电路故障报警系统,现已投入运行。在实际应用中提供了真实可靠的生产实时数据,运行情况良好。为企业减少了人力资源浪费,化工厂生产车间环境较差,改善了工人的工作环境降低了工作强度,并实现了集中监控。本系统的可扩展性也很好的适应了车间改良的需求,可根据用户的要求增加监控点并将本车间故障分类输出到上一级监控站,受到了用户的好评。

     

    版权声明PLC信息网转载作品均注明出处,本网未注明出处和转载的,是出于传递更多信息之目的,并不意味 着赞同其观点或证实其内容的真实性。如转载作品侵犯作者署名权,或有其他诸如版权、肖像权、知识产权等方面的伤害,并非本网故意为之,在接到相关权利人通知后将立即加以更正。联系电话:0571-87774297。
0571-87774297