想做的事情是:每发一次“AT”指令到串口,等到串口返回的信息“OK”或是“ERROR”后,再执行下一条的AT指令
我想有两种方式:
1、用的是SerialPort里的DataReceived事件,但现在发一个命令,事件有时会被触发几次,可能在最后一次读取的字符串才是包含“OK”或是“ERROR”的字符串。DataReceived是用的辅助线程,那么在event被触发的同时,主程序会不会已经运行到发送下一条命令了,主程序里都还没有收到上条命令的回复。
2、在命令后面加Thread.Sleep(100),
就像这样:sendCommand("AT\r");
Thread.Sleep(100);
sendCommand("AT+CMGF=0\r");
Thread.Sleep(100);
...
最后,事件触发时,读出sp.ReadExisting();的缓冲区里的字节,看到好象有些命令根本没有被执行。
希望大家给点建议,怎么解决这个问题?
我想有两种方式:
1、用的是SerialPort里的DataReceived事件,但现在发一个命令,事件有时会被触发几次,可能在最后一次读取的字符串才是包含“OK”或是“ERROR”的字符串。DataReceived是用的辅助线程,那么在event被触发的同时,主程序会不会已经运行到发送下一条命令了,主程序里都还没有收到上条命令的回复。
2、在命令后面加Thread.Sleep(100),
就像这样:sendCommand("AT\r");
Thread.Sleep(100);
sendCommand("AT+CMGF=0\r");
Thread.Sleep(100);
...
最后,事件触发时,读出sp.ReadExisting();的缓冲区里的字节,看到好象有些命令根本没有被执行。
希望大家给点建议,怎么解决这个问题?
----反馈信息是多条么?还是因为未定义触发DataReceived事件的接收字节数 ,如果反馈只有一条,可以使用阻塞机制,设置好ReadTimeout,直接read
再验证返回的信息是否含有“OK”或是“ERROR”