发表于:2007-08-01 09:26:00
楼主
在unity的串口发送指令中,没有在ascii协议下,发送二进制的指令,只有发送ascii码的指令,因此
在发送二进制时,要将二进制数转为ascii码。int_to_ascii指令在将int数组转为ascii码的过程中遇到
16#00就停止转换,比如有整数数组16#3132 16#3200 16#3333 用int_to_ascii指令转为ascii时,转换结
果为1 2 2 ,16#3333并没有被转换,只因指令遇到16#3200中的00。在了解了int_to_ascii的特点后,我们再来了解unity的串口发送指令print_char,该指令与其他品牌的PLC的串口发送指令,显著不同处有2点:第一,该指令只能发送ascii码,而不能发送二进制数,要发送16#00只能在数据的末尾填补。第二,该指令可以在程序的多处同时使用,如
果这些指令在同一扫描周期内被触发,最终发出的数据是这些指令要发数据的组合。并且如果每个指令的
发送的数据长度不超过210个字节,那么这种组合将是有序的。
鉴于以上情况那么我们在发送整数数组16#3132 16#3200 16#3333 该如何做呢?第一先将16#3132 16#3200 用int_to_ascii指令转为1 2 2再用print_char指令发送出去,注意发送长度为4个字节。第二再将16#3333转为ascii码,再用一个print_char指令发送出去,长度为2个字节。注意两个print_char指令要同时触发,那么在接受端便能接受到完整数据16#3132 16#3200 16#3333了。
希望大家能提供更好的解决方法,共同交流。