簡體   English   中英

當寫入取決於讀取數據時,如何管理串行端口中的寫入和讀取

[英]How to manage write and read in serialport when write depends on read data

我正在嘗試將數據寫入串行端口,然后等待確認。 收到確認后,我將寫入下一組數據。 請提出一種解決方法。 我嘗試了下面的代碼,但是在收到確認之前,代碼會觸發並完成執行。
當我在調試模式下運行它時,它工作正常,但是在沒有斷點的情況下運行時,它無法正常運行。

// some data for writing  
byte[] data = "xxx";  
byte[] data1 = "yyy";  
byte[] data2 = "zzz";  

// loop to write the above 5 times  
int times = 1;  
for (int i = 0; i < 20; i++)  
            {  
                if (Flag == true)  
                {  
                    Flag = false;  
                    if (times <= 5)  
                    {  
                        serialPort.Write(data, 0, data.Length);  
                        serialPort.Write(data1, 0, data1.Length);  
                        serialPort.Write(data2, 0, data2.Length);  
                        times = times + 1;  
                    }  
                }  
                else  
                {  
                    MessageBox.Show("Some problem in ack...");  
                }  
            }  
            Flag = true;    

 private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)  
        {  
            //char[] buffer = new char[4];  
            //serialPort.Read(buffer, 0, 4);  
            Flag = true;  
        }

您是否要使用Flag作為ack? 邏輯沒有道理。 你不需要做類似的事情嗎

while (Flag == false)
    ; //wait for flag to become true after previous write
...write...
Flag = false;

您需要狀態機模式,或者至少需要某種方式來存儲狀態。 “狀態”是指您在讀/寫過程中的位置。 狀態機是通信(或任何事件驅動程序)常用的基本設計模式,請仔細閱讀以下內容:

http://www.codeproject.com/KB/architecture/statepatterncsharp.aspx

http://www.dofactory.com/Patterns/PatternState.aspx

http://en.wikipedia.org/wiki/State_pattern (我不喜歡他們在此處選擇的示例)

這以某種方式解決了,

 byte[] data = "Your message to be sent on serial port";
    serialPort.Write(data, 0, data.Length);

    byte[] buffer = new byte[16];
    int vintctr = 0;
                    while (vintctr < 16)
                        vintctr  += serialPort.Read(buffer, 0, 16);

Debug this and you you can get the reply from the port.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM