unity下的串口,ascii协议,发送二进制数的解决方法 点击:1457 | 回复:0



高高兴兴做工控

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 0回
  • 年度积分:0
  • 历史总积分:9
  • 注册:2004年3月13日
发表于: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了。
希望大家能提供更好的解决方法,共同交流。


热门招聘
相关主题

官方公众号

智造工程师