向一个串口连续发送多条指令:
private void OnOnebyOne(String[] str) { int i; String[] offstr = str; for (i = 0; i < offstr.Length; i++) { string oneoff = offstr[i]; Send(oneoff); } }
1.断点调试,逐步执行所有指令都可以执行。
2.直接运行,只执行第一条指令。
原因:如果串口设置的BaudRate是9600,那一个byte为需要的发送时间:1/9600=0.00010417s=0.10417ms。发送的指令是16位byte,那么需要发送的时间:0.10417*16=1.66667ms
指令连续发送前一帧,偏巧通讯丢一个byte,那么下一帧的第一个byte就会被“吃掉”,造成下一帧的错误指令。
如果隔一段时间再发,那么就可以检测出和避免这个问题。
解决方案:(1)timer控件
(2)线程
我用的是线程解决的,每一次循环都睡眠10ms。
private void OnOnebyOne(String[] str) { int i; String[] offstr = str; for (i = 0; i < offstr.Length; i++) { string oneoff = offstr[i]; Send(oneoff); Thread.Sleep(1000); } }
时间: 2024-10-08 14:23:37