XMT指令用于发送存放在数据缓冲区中的数据。参数PORT定义了所用通讯口。参数TBL定义了数据缓冲区的起始地址,缓冲区的第一个字节中定义了本次将要发送的字节数(1--255),后边依次存放着待发送的数据字节。若发送字节数被设置为0,则XMT指令不执行任何操作。
RCV指令用于接收数据并将接收到的数据存放在数据缓冲区中。参数PORT定义了所用通讯口。参数TBL定义了数据缓冲区的起始地址,缓冲区的第一个字节中存放着本次接收到的字节数,后边依次存放着接收到的有效数据字节。
注意, TBL参数为一个可变长度的块内存参数, 整个块内存都不可以落在非法内存区域, 否则结果不可预期。
注意, 调用RCV指令后,如果串口上没有收到任何字节, 只会产生60秒的系统超时并结束一次RCV接收。用户设置的超时结束, 只有在收到至少一个字节的情况下才会触发。
Kinco-K2/K5在SM区中为自由通讯提供了多个状态寄存器和控制寄存器。在编写通讯程序时,用户必须对这些控制寄存器进行设置。另外,在通讯过程中CPU会自动对通讯状态进行检测,并将检测结果写入相关的状态寄存器,用户可以读取这些状态信息并在程序中进行相应的处理。
在自由通讯中,另外还有一个默认的系统接收超时,时间为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将接收一串数据,以回车符作为接收结束字符。若接收正常完成,则把接收到的数据又发送回去并再次启动接收,若是异常退出接收状态(比如通讯错误、接收超时等),则忽略接收到的数据并再次启动接收。
联系客服