向串口連續發送指令,斷點調試與直接運行不一致


向一個串口連續發送多條指令:

 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);
} }

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM