目标:
尝试将字符串写入串行端口,读取它,然后将其打印到控制台
代码:
// for waiting until event is detected
private static ManualResetEvent waitHandle = new ManualResetEvent(false);
public Driver()
{
// create new serial port
comPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
// add event handler
comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
// configure port
comPort.DtrEnable = true;
comPort.RtsEnable = true;
comPort.ReadTimeout = 3000;
// open port
comPort.Open();
// send string through port
string command = "test \n";
byte[] MyMessage = System.Text.Encoding.UTF8.GetBytes(command);
comPort.Write(MyMessage, 0, MyMessage.Length);
// wait until event is detected
waitHandle.WaitOne();
}
private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// Write data to buffer and stop wait
Console.WriteLine(comPort.ReadExisting());
waitHandle.Set();
}
问题:
写入串行似乎可以正常工作(confirmed by using Serial Port Monitor),但从未调用过“ comPort_DataReceived”
如果我更改代码并添加
while(true)
{
Console.WriteLine(comPort.ReadExisting());
}
“ comPort.Write(MyMessage,0,MyMessage.Length);”之后行,以便我进行轮询而不是等待事件处理程序,然后没有编写任何内容
如果我尝试通过这种方式进行轮询
while (true)
{
Byte[] buf = new Byte[2048];
comPort.Read(buf, 0, 2048);
Console.WriteLine(buf.ToString());
}
它只是超时(System.TimeoutException:“该操作已超时。” )。
我不确定我要去哪里/为什么不能从串行端口读取
答案 0 :(得分:1)
好的,从我看来,好像没有设备在串行端口上监听。然后,如果您将某些内容写入串行端口,并不意味着将出现与接收到的数据相同的数据。该数据为outgoing data
。如果要接收数据,则必须将另一个设备连接到该串行端口并发送数据,以作为对写入数据的响应。
答案 1 :(得分:0)
原来是硬件问题(没有设备正在向串行端口写入数据),加上误解(认为我可以写入串行端口,然后再读取同一程序中写入的内容)