实例讲解西门子PLC自由口通信的编程方法
来源:工控见解(头条)所谓的自由通讯,是指CPU串行通讯口的通讯过程完全由用户程序进行控制。自由通讯方式支持ASCII和二进制数据通讯。用户可以使用自由通讯方式来编写各种自定义的通讯协议与其它设备进行通讯。
Kinco-K2/K5的CPU本体集成了1或2个串行通讯口,这些串口默认采用Modbus RTU协议并作为从站。当执行用户程序中的自由通讯指令时,自由通讯方式就被激活,通讯口完全被自由通讯占用。当自由通讯完成后,CPU又自动将通讯口切换到默认的协议。若CPU处于STOP状态,则自由通讯被禁止。https://p3-tt.byteimg.com/origin/pgc-image/8e8d817dc001445baed88bbda133795f?from=pc
https://p3-tt.byteimg.com/origin/pgc-image/cc11abb791e642e1b13ae2c0ddb7e5ed?from=pc
当主站发出一个命令后,在下述情况下会产生通讯错误:1) 在定义的超时时间内没有收到从站的应答,则会产生一个通讯超时错误;2)主站收到了从站错误的应答,则会重新尝试通讯,最多重新发送“重试”次命令。若最后一次仍没有收到从站正确的应答,则主站继续等待超时时间后产生一个通讯超时错误。XMT(发送数据)、RCV(接收数据)https://p6-tt.byteimg.com/origin/pgc-image/da4437cef31a453aa1d4dd31f40ae4dd?from=pc
XMT指令用于发送存放在数据缓冲区中的数据。参数PORT定义了所用通讯口。参数TBL定义了数据缓冲区的起始地址,缓冲区的第一个字节中定义了本次将要发送的字节数(1--255),后边依次存放着待发送的数据字节。若发送字节数被设置为0,则XMT指令不执行任何操作。https://p6-tt.byteimg.com/origin/pgc-image/cd0a76e6fa1442128a2162560ccc069c?from=pc
RCV指令用于接收数据并将接收到的数据存放在数据缓冲区中。参数PORT定义了所用通讯口。参数TBL定义了数据缓冲区的起始地址,缓冲区的第一个字节中存放着本次接收到的字节数,后边依次存放着接收到的有效数据字节。https://p1-tt.byteimg.com/origin/pgc-image/0c88674cf10047a992b786e51f551a46?from=pc
注意, TBL参数为一个可变长度的块内存参数, 整个块内存都不可以落在非法内存区域, 否则结果不可预期。注意, 调用RCV指令后,如果串口上没有收到任何字节, 只会产生60秒的系统超时并结束一次RCV接收。用户设置的超时结束, 只有在收到至少一个字节的情况下才会触发。
Kinco-K2/K5在SM区中为自由通讯提供了多个状态寄存器和控制寄存器。在编写通讯程序时,用户必须对这些控制寄存器进行设置。另外,在通讯过程中CPU会自动对通讯状态进行检测,并将检测结果写入相关的状态寄存器,用户可以读取这些状态信息并在程序中进行相应的处理。https://p6-tt.byteimg.com/origin/pgc-image/49b668a15b044dc892c18acd17350214?from=pc
https://p3-tt.byteimg.com/origin/pgc-image/9d4ba3bcffc34a9bb5895f3b061956ae?from=pc
https://p1-tt.byteimg.com/origin/pgc-image/5b9a1466da83489bacfb2432c9ad9be9?from=pc
在自由通讯中,另外还有一个默认的系统接收超时,时间为60秒,此超时值的作用如下:在执行RCV指令后,若在此超时时间内串口上没有收到任何数据,则CPU将立刻终止接收并退出RCV指令;另外,CPU在进入有效接收状态后(即接收到SMB88中定义的起始字符或者经过了SMW90中定义的接收准备时间后),将优先使用用户在SMW92中定义的接收字符超时值,若用户没有定义,则用该系统接收超时值来决定是否终止接收。关于通讯中断Kinco-K2/K5提供了多种中断用于自由通讯,通讯中断具有最高的中断优先级。用户可以使用控制位SM87.1来禁止或允许CPU产生通讯中断。若将SM87.1设置为1,则允许生成通讯中断:CPU在发送完缓冲区中的最后一个字符时就会自动产生一个发送完成中断(对于PORT 0中断事件号为30,对于PORT 1中断事件号为32);CPU在退出接收后(无论是正常还是异常退出)就会自动产生一个接收完成中断(对于PORT 0中断事件号为29,对于PORT 1中断事件号为31)。
下面将举例说明自由通讯的使用。在示例中,CPU将接收一串数据,以回车符作为接收结束字符。若接收正常完成,则把接收到的数据又发送回去并再次启动接收,若是异常退出接收状态(比如通讯错误、接收超时等),则忽略接收到的数据并再次启动接收。https://p3-tt.byteimg.com/origin/pgc-image/aec72468aa474f6392b7acb134240669?from=pc
https://p3-tt.byteimg.com/origin/pgc-image/eea320fd59d547cca4e6240651a5ad0f?from=pc
https://p6-tt.byteimg.com/origin/pgc-image/579ee003b5044cdd953a5d83ed439fe7?from=pc
https://p3-tt.byteimg.com/origin/pgc-image/cb62282fc2e1421faec2bfaf6e1057a8?from=pc
强烈支持楼主ing…… 看完楼主的帖子,我的心情竟是久久不能平息,受教了 强烈支持楼主ing…… 被戳中笑点 / 泪点,太真实了! 救命!这回复笑到我捶桌,必须置顶~ 求个链接 / 教程,楼主好人一生平安~ 这逻辑绝了,分析得太到位了吧 说得对!狠狠赞同,没毛病~ 我先占个楼,等下再慢慢看~
页:
[1]
2