写入时如何管理串行端口的写入和读取取决于读取数据

时间:2010-02-18 08:18:11

标签: c# serial-port

我正在尝试将数据写入serialport,然后等待确认。收到ack后,我写下一组数据。 请建议一种方法。我尝试了下面的代码,但在收到确认之前,写入触发并完成执行 当我在调试模式下运行它时,它工作正常,但在没有断点的情况下运行时,它无法正常运行。

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

3 个答案:

答案 0 :(得分:0)

您是否尝试使用Flag作为确认?逻辑没有意义。你不需要做像

这样的事情
while (Flag == false)
    ; //wait for flag to become true after previous write
...write...
Flag = false;

答案 1 :(得分:0)

您需要状态机模式,或至少某种存储状态的方式。 “状态”是指您在阅读/写作过程中的位置。状态机是通常用于通信(或任何事件驱动程序)的基本设计模式,稍微阅读它们:

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

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

http://en.wikipedia.org/wiki/State_pattern(我不喜欢他们在这里选择的样本)

答案 2 :(得分:0)

不知怎的,这已经成功了,

 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.