向一個串口連續發送多條指令:
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];
Thread.Sleep(1000); Send(oneoff); } }