您的位置:控制工程论坛网论坛 » PLC与PAC » 自由口模式下S7-200PLC与计算机的通信2

马军成

马军成   |   当前状态:在线

总积分:13914  2024年可用积分:0

注册时间: 2006-12-01

最后登录时间: 2022-06-28

空间 发短消息加为好友

自由口模式下S7-200PLC与计算机的通信2

马军成  发表于 2008/2/10 9:21:22      751 查看 0 回复  [上一主题]  [下一主题]

手机阅读

  • 数据区
    ----反馈信息的B3到B18为读指令所要读取的数据,以十六进制ASCII码表示。 
  • BCC校验码
    ----与上位机指令中的BCC校验码类似,它是反馈信息B3到B18的异或和。 
  • 结束字符
    ----结束字符标志着反馈信息的结束,在本例中被定义为26H。 


        指令中为何要使用ASCII码
        ----一条指令除包含数据外,还包含必要的控制字(起始字符、结束字符、指令类型等)。如果指令中的数据直接以其原本的形式传输,则不可避免的会与指令中的控制字发生混淆。
        ----例如本例中,指令的起始字符为"g",其ASCII码值为67H,结束字符为"G",其ASCII码值为47H。假设要写入的数据中也有47H,并且数据直接以其原本的形式传输,则PLC会因为接收到了数据中的47H而停止接收,这样PLC接收到的指令将是一个不完整的非法指令,很可能造成PLC的误动作。
        ----为了避免这种情况的发生,可以用文本来传送二进制数据。通过以16进制ASCII码的格式描述数据,每个二进制的字节都可以表示成一对ASCII编码,这对编码表示这个字节的两个16进制字符。这种格式可以表示任何的数值,仅仅使用ASCII代码的30H到39H(表示0到9)和41H到46H(表示A到F)。ASCII码的其余部分可以用作控制字(起始标志、结束标志、指令类型等)。这样,数据中的47H以ASCII码的形式进行传送就变成了34H 37H 两个字节,从而避免了PLC因接收到数据中的47H而停止接收的错误。


        表1 上位机指令格式












































































        Byte0起始字符
        Byte1指令类型(读/写)
        Byte2目标PLC站地址(十六进制ASCII码)
        Byte3
        Byte4目标寄存器地址(十六进制ASCII码)
        Byte5
        Byte6
        Byte7
        Byte8
        Byte9
        Byte10
        Byte11
        Byte12读/写字节数M(十六进制ASCII码)
        Byte13
        Byte14要写入的数据(十六进制ASCII码)
        Byte15
        Byte16
        Byte17
        Byte18
        Byte19
        Byte20
        Byte21
        Byte22
        Byte23
        Byte24
        Byte25
        Byte26
        Byte27
        Byte28
        Byte29
        Byte30BCC校验码(十六进制ASCII码)
        Byte31
        Byte32结束字符


                                                                  表2 反馈信息格式

















































        Byte0起始字符
        Byte1状态信息
        Byte2数据区(十六进制ASCII码)
        Byte3
        Byte4
        Byte5
        Byte6
        Byte7
        Byte8
        Byte9
        Byte10
        Byte11
        Byte12
        Byte13
        Byte14
        Byte15
        Byte16
        Byte17
        Byte18BCC校验码(十六进制ASCII码)
        Byte19
        Byte20结束字符


        被过滤广告 PLC程序执行过程
        ----PLC在第一次扫描时执行初始化子程序,对端口及RCV指令进行初始化。初始化完成后,运行RCV指令使端口处于接受状态。
        ----RCV会将以"g"开头"G"结尾的指令保存到接收缓冲区,并同时产生接收完成中断。
        ----RCVcomplete中断服务程序用来处理接收完成中断事件,它会将接收缓冲区中的十六进制ASCII码还原成数据并保存,同时置位Verify子程序的触发条件(M0.1)。 ----Verify子程序首先复位本身的触发条件以防止子程序被重复调用,然后求出接收缓冲区中指令的BCC校验码并与指令中的BCC校验码进行比对。如果相等则置BCC码校验正确的标志位(M0.0)为1;如果指令格式正确(指令的结束标志在接收缓冲区中特定的位置VB133)而BCC码不相等,则发送代表BCC校验码错误的反馈信息;如果指令格式不正确(VB133中不是指令的结束标志),则返回代表指令格式错误的反馈信息。
        ----Read子程序的触发条件为:指令中的站地址与本机站地址相符、指令类型为读指令、BCC检验码正确。当条件满足时,Read子程序被执行。Read子程序首先禁止RCV,然后将指令所要读取的数据转换成十六进制ASCII码并写入发送缓冲区、计算BCC检验码、最后发送反馈信息。
        ----Write子程序的触发条件为:指令中的站地址与本机站地址相符、指令类型为写指令、BCC检验码正确。当条件满足时,Write子程序被执行。Write子程序首先禁止RCV,然后将指令中的数据写入目标寄存器,最后发送代表写入正确的反馈信息。
        ----PLC每接到一条指令后都会发送一条反馈信息,当反馈信息发送完成时,会产生发送完成中断,XMTcomplete中断服务程序用来处理发送完成中断事件。在XMTcomplete中断服务程序中所要执行的操作包括:复位BCC校验码正确的标志位(M0.0);允许RCV;bcc码寄存器清零;重新装入用于计算BCC校验码的地址指针;接收缓冲区中存放指令结束字符的字节VB133清零(用来判断下一条指令格式是否正确)。


         PLC寄存器地址分配
        ----此程序占用PLC寄存器的VB100-VB199,内部继电器占用M0.0和M0.1。寄存器地址分配见表3、表4、表5、表6。

      • 1楼 0 0 回复