C#发送一条命令后判断接收到的返回值是否正确,如果正确再发送下一条,如果不正确就停止发送 我在用C#编一个软件,然后这个软件是操作RFID读写器的,首先要进行初始化,我先要向它发送一条命令,它会返回一个命令,我要判断这个命令是否正确,如果正确就继续发送下一条初始化命令。这应该怎么编呀,毫无头绪 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 var send = SendRequestInit(order);if(send=="success"){ SendInitOrder(orer)}这样???? 额,没用过,不知道这个代码的意思。我想做的是FF 00 09 1D 06 //重启引导程序返回:FF 00 09 01 01 14 E8FF 00 04 1D 0B //启动固件返回:FF 14 04 00 00 07 10 23 00 01 00 00 03 20 08 06 20 01 00 37 69 00 00 00 10 12 61FF 04 06 00 00 25 80 53 C1 //设置波特率(25 80 ----- 9600)FF 04 06 00 01 C2 00 A4 60 //设置波特率(01 C2 00 ----- 115200)返回:FF 00 06 00 00 E4 06有这么几个命令,我首先要发送第一个命令FF 00 09 1D 06,然后会收到一个返回命令,如果收到的是FF 00 09 01 01 14 E8(即上面列出来的形式),那么我可以继续发送第二天命令,FF 00 04 1D 0B,如果不对就不继续发送,我就是不知道怎么来实现这样的判断 FF 00 09 1D 06 //重启引导程序返回:FF 00 09 01 01 14 E8FF 00 04 1D 0B //启动固件返回:FF 14 04 00 00 07 10 23 00 01 00 00 03 20 08 06 20 01 00 37 69 00 00 00 10 12 61FF 04 06 00 00 25 80 53 C1 //设置波特率(25 80 ----- 9600)FF 04 06 00 01 C2 00 A4 60 //设置波特率(01 C2 00 ----- 115200)返回:FF 00 06 00 00 E4 06有这么几个命令,我首先要发送第一个命令FF 00 09 1D 06,然后会收到一个返回命令,如果收到的是FF 00 09 01 01 14 E8(即上面列出来的形式),那么我可以继续发送第二条命令FF 00 04 1D 0B,如果不对就不继续发送,我就是不知道怎么来实现这样的判断,我是在serialPort1_DataReceived这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢 FF 00 09 1D 06 //重启引导程序返回:FF 00 09 01 01 14 E8FF 00 04 1D 0B //启动固件返回:FF 14 04 00 00 07 10 23 00 01 00 00 03 20 08 06 20 01 00 37 69 00 00 00 10 12 61FF 04 06 00 00 25 80 53 C1 //设置波特率(25 80 ----- 9600)FF 04 06 00 01 C2 00 A4 60 //设置波特率(01 C2 00 ----- 115200)返回:FF 00 06 00 00 E4 06有这么几个命令,我首先要发送第一个命令FF 00 09 1D 06,然后会收到一个返回命令,如果收到的是FF 00 09 01 01 14 E8(即上面列出来的形式),那么我可以继续发送第二条命令FF 00 04 1D 0B,如果不对就不继续发送,我就是不知道怎么来实现这样的判断,我是在serialPort1_DataReceived这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢是的在DataReceived中判断,如果有收到你想得到的返回值就执行你下一步操作。 FF 00 09 1D 06 //重启引导程序返回:FF 00 09 01 01 14 E8FF 00 04 1D 0B //启动固件返回:FF 14 04 00 00 07 10 23 00 01 00 00 03 20 08 06 20 01 00 37 69 00 00 00 10 12 61FF 04 06 00 00 25 80 53 C1 //设置波特率(25 80 ----- 9600)FF 04 06 00 01 C2 00 A4 60 //设置波特率(01 C2 00 ----- 115200)返回:FF 00 06 00 00 E4 06有这么几个命令,我首先要发送第一个命令FF 00 09 1D 06,然后会收到一个返回命令,如果收到的是FF 00 09 01 01 14 E8(即上面列出来的形式),那么我可以继续发送第二条命令FF 00 04 1D 0B,如果不对就不继续发送,我就是不知道怎么来实现这样的判断,我是在serialPort1_DataReceived这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢是的在DataReceived中判断,如果有收到你想得到的返回值就执行你下一步操作。可是判断完了是我想得到的返回值怎么进行下一步呢,我是在窗体的Load事件中发送命令的,怎么回到这个事件中来继续发呢?或者说应该在定时器中发送? 你是说返回的命令吗?它也是返回几个字节的十六进制数来验证发送的初始化命令是否正确还是没明白 按你所说 我觉得 发送命令后 再发回来一个表示已收到 然后就继续发送下一个命令关键是我接收是在serialPort1_DataReceived这里接收,但是发送是在窗体的Load事件中发送,我发送了一个命令,然后到serialPort1_DataReceived了接收一个返回值,如果返回值正确以后,再回到Load事件中继续发送下一条命令,我不知道该怎么从serialPort1_DataReceived返回 你这个使用load事件的方法是不适合你的场景的。这个首先要纠正过来,用一个单独的方法来替代它。其次,为了简单控制,你可以使用两个信号量。通过在serialPort1_DataReceived过程中对收到数据的判定来设定对应的信号量。当然你还需要其他的内容来关联发送和接收等等。 给出个示例代码,把你的逻辑填进去就差不多了 ManualResetEvent signals = new ManualResetEvent[] { new ManualResetEvent(false), new ManualResetEvent(false) }; void Demo() { SendCommand(0); while(WaitHandle.WaitAny(signals) == 0) { // Reset for next command signals[0].Reset(); // Get next command number // SendCommand(); } } void SendCommand(int number) { // send command, save number etc. } void OnDataReceive() { if (CheckReceiveData()) { signals[0].Set(); } else { signals[1].Set(); } } Demo就是你那个Load里面需要做的事SendCommand完成发送命令的工作OnDataReceive就是你的serialPort1_DataReceived 怎么计算文本框中文本的字节 统计ping包成功率,并更新到listView2出错!? 如何通过Text控件,对网格数据进行编辑,然后再通过UPDATE更新数据库库 如何匹配配对的双引号 急急~~求救~~ 关于ARM 板子WINCE系统的串口编程问题....大家来看看. 超过70个字的短信内容处理? IE下 Ajax错误信息 Bad Request(invalid url) 用FileSystemWacther如何监测文件是否已经写结束! .net 如何发即时消息 急急急啊,C#project五子棋求解(高分) 求助,将一个DataTable拆分为N个DataTable
if(send=="success")
{
SendInitOrder(orer)
}这样????
FF 00 09 1D 06 //重启引导程序
返回:FF 00 09 01 01 14 E8FF 00 04 1D 0B //启动固件
返回:FF 14 04 00 00 07 10 23 00 01 00 00 03 20 08 06 20 01 00 37 69 00 00 00 10 12 61FF 04 06 00 00 25 80 53 C1 //设置波特率(25 80 ----- 9600)
FF 04 06 00 01 C2 00 A4 60 //设置波特率(01 C2 00 ----- 115200)
返回:FF 00 06 00 00 E4 06
有这么几个命令,我首先要发送第一个命令FF 00 09 1D 06,然后会收到一个返回命令,如果收到的是FF 00 09 01 01 14 E8(即上面列出来的形式),那么我可以继续发送第二天命令,FF 00 04 1D 0B,如果不对就不继续发送,我就是不知道怎么来实现这样的判断
返回:FF 00 09 01 01 14 E8FF 00 04 1D 0B //启动固件
返回:FF 14 04 00 00 07 10 23 00 01 00 00 03 20 08 06 20 01 00 37 69 00 00 00 10 12 61FF 04 06 00 00 25 80 53 C1 //设置波特率(25 80 ----- 9600)
FF 04 06 00 01 C2 00 A4 60 //设置波特率(01 C2 00 ----- 115200)
返回:FF 00 06 00 00 E4 06
有这么几个命令,我首先要发送第一个命令FF 00 09 1D 06,然后会收到一个返回命令,如果收到的是FF 00 09 01 01 14 E8(即上面列出来的形式),那么我可以继续发送第二条命令FF 00 04 1D 0B,如果不对就不继续发送,我就是不知道怎么来实现这样的判断,我是在serialPort1_DataReceived这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢
返回:FF 00 09 01 01 14 E8FF 00 04 1D 0B //启动固件
返回:FF 14 04 00 00 07 10 23 00 01 00 00 03 20 08 06 20 01 00 37 69 00 00 00 10 12 61FF 04 06 00 00 25 80 53 C1 //设置波特率(25 80 ----- 9600)
FF 04 06 00 01 C2 00 A4 60 //设置波特率(01 C2 00 ----- 115200)
返回:FF 00 06 00 00 E4 06
有这么几个命令,我首先要发送第一个命令FF 00 09 1D 06,然后会收到一个返回命令,如果收到的是FF 00 09 01 01 14 E8(即上面列出来的形式),那么我可以继续发送第二条命令FF 00 04 1D 0B,如果不对就不继续发送,我就是不知道怎么来实现这样的判断,我是在serialPort1_DataReceived这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢
是的在DataReceived中判断,如果有收到你想得到的返回值就执行你下一步操作。
返回:FF 00 09 01 01 14 E8FF 00 04 1D 0B //启动固件
返回:FF 14 04 00 00 07 10 23 00 01 00 00 03 20 08 06 20 01 00 37 69 00 00 00 10 12 61FF 04 06 00 00 25 80 53 C1 //设置波特率(25 80 ----- 9600)
FF 04 06 00 01 C2 00 A4 60 //设置波特率(01 C2 00 ----- 115200)
返回:FF 00 06 00 00 E4 06
有这么几个命令,我首先要发送第一个命令FF 00 09 1D 06,然后会收到一个返回命令,如果收到的是FF 00 09 01 01 14 E8(即上面列出来的形式),那么我可以继续发送第二条命令FF 00 04 1D 0B,如果不对就不继续发送,我就是不知道怎么来实现这样的判断,我是在serialPort1_DataReceived这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢
是的在DataReceived中判断,如果有收到你想得到的返回值就执行你下一步操作。
可是判断完了是我想得到的返回值怎么进行下一步呢,我是在窗体的Load事件中发送命令的,怎么回到这个事件中来继续发呢?或者说应该在定时器中发送?
还是没明白 按你所说 我觉得 发送命令后 再发回来一个表示已收到 然后就继续发送下一个命令
关键是我接收是在serialPort1_DataReceived这里接收,但是发送是在窗体的Load事件中发送,我发送了一个命令,然后到serialPort1_DataReceived了接收一个返回值,如果返回值正确以后,再回到Load事件中继续发送下一条命令,我不知道该怎么从serialPort1_DataReceived返回
其次,为了简单控制,你可以使用两个信号量。通过在serialPort1_DataReceived过程中对收到数据的判定来设定对应的信号量。当然你还需要其他的内容来关联发送和接收等等。
new ManualResetEvent(false),
new ManualResetEvent(false)
}; void Demo()
{
SendCommand(0);
while(WaitHandle.WaitAny(signals) == 0)
{
// Reset for next command
signals[0].Reset();
// Get next command number
// SendCommand();
}
}
void SendCommand(int number)
{
// send command, save number etc.
}
void OnDataReceive()
{
if (CheckReceiveData())
{
signals[0].Set();
}
else
{
signals[1].Set();
}
}
SendCommand完成发送命令的工作
OnDataReceive就是你的serialPort1_DataReceived