C#发送一条命令后判断接收到的返回值是否正确,如果正确再发送下一条,如果不正确就停止发送

xiangxiazaizhge 2013-05-24 09:51:58
我在用C#编一个软件,然后这个软件是操作RFID读写器的,首先要进行初始化,我先要向它发送一条命令,它会返回一个命令,我要判断这个命令是否正确,如果正确就继续发送下一条初始化命令。这应该怎么编呀,毫无头绪
...全文
468 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jia_H 2013-05-26
  • 打赏
  • 举报
回复
Demo就是你那个Load里面需要做的事 SendCommand完成发送命令的工作 OnDataReceive就是你的serialPort1_DataReceived
xiangxiazaizhge 2013-05-26
  • 打赏
  • 举报
回复
引用 15 楼 Jia_H 的回复:
给出个示例代码,把你的逻辑填进去就差不多了

		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();
			}
		}
弱弱的说一句,看不懂这个代码也
  • 打赏
  • 举报
回复
var send = SendRequestInit(order);
if(send=="success")
{
     SendInitOrder(orer)
}
这样????
ariesget 2013-05-24
  • 打赏
  • 举报
回复
确实没看出问题在哪。
Benjay77 2013-05-24
  • 打赏
  • 举报
回复
引用 3 楼 xiangxiazaizhge 的回复:
[quote=引用 2 楼 Benjay77 的回复:] 你这个命令是指有什么操作 还是只是单纯的验证收到发送的命令没?
你是说返回的命令吗?它也是返回几个字节的十六进制数来验证发送的初始化命令是否正确[/quote] 还是没明白 。。。 按你所说 我觉得 发送命令后 再发回来一个表示已收到 然后就继续发送下一个命令
宝_爸 2013-05-24
  • 打赏
  • 举报
回复
问题在什么?
xiangxiazaizhge 2013-05-24
  • 打赏
  • 举报
回复
引用 2 楼 Benjay77 的回复:
你这个命令是指有什么操作 还是只是单纯的验证收到发送的命令没?
你是说返回的命令吗?它也是返回几个字节的十六进制数来验证发送的初始化命令是否正确
Benjay77 2013-05-24
  • 打赏
  • 举报
回复
你这个命令是指有什么操作 还是只是单纯的验证收到发送的命令没?
Mic_Gary 2013-05-24
  • 打赏
  • 举报
回复
貌似很神奇,关注
Jia_H 2013-05-24
  • 打赏
  • 举报
回复
给出个示例代码,把你的逻辑填进去就差不多了

		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();
			}
		}
Jia_H 2013-05-24
  • 打赏
  • 举报
回复
你这个使用load事件的方法是不适合你的场景的。 这个首先要纠正过来,用一个单独的方法来替代它。 其次,为了简单控制,你可以使用两个信号量。通过在serialPort1_DataReceived过程中对收到数据的判定来设定对应的信号量。当然你还需要其他的内容来关联发送和接收等等。
xiangxiazaizhge 2013-05-24
  • 打赏
  • 举报
回复
引用 5 楼 Benjay77 的回复:
[quote=引用 3 楼 xiangxiazaizhge 的回复:] [quote=引用 2 楼 Benjay77 的回复:] 你这个命令是指有什么操作 还是只是单纯的验证收到发送的命令没?
你是说返回的命令吗?它也是返回几个字节的十六进制数来验证发送的初始化命令是否正确[/quote] 还是没明白 。。。 按你所说 我觉得 发送命令后 再发回来一个表示已收到 然后就继续发送下一个命令[/quote] 关键是我接收是在serialPort1_DataReceived这里接收,但是发送是在窗体的Load事件中发送,我发送了一个命令,然后到serialPort1_DataReceived了接收一个返回值,如果返回值正确以后,再回到Load事件中继续发送下一条命令,我不知道该怎么从serialPort1_DataReceived返回
xiangxiazaizhge 2013-05-24
  • 打赏
  • 举报
回复
引用 11 楼 ariesget 的回复:
[quote=引用 9 楼 xiangxiazaizhge 的回复:] [quote=引用 6 楼 ariesget 的回复:] 确实没看出问题在哪。
FF 00 09 1D 06 //重启引导程序 返回:FF 00 09 01 01 14 E8 FF 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 61 FF 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这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢[/quote] 是的在DataReceived中判断,如果有收到你想得到的返回值就执行你下一步操作。[/quote] 可是判断完了是我想得到的返回值怎么进行下一步呢,我是在窗体的Load事件中发送命令的,怎么回到这个事件中来继续发呢?或者说应该在定时器中发送?
ariesget 2013-05-24
  • 打赏
  • 举报
回复
引用 9 楼 xiangxiazaizhge 的回复:
[quote=引用 6 楼 ariesget 的回复:] 确实没看出问题在哪。
FF 00 09 1D 06 //重启引导程序 返回:FF 00 09 01 01 14 E8 FF 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 61 FF 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这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢[/quote] 是的在DataReceived中判断,如果有收到你想得到的返回值就执行你下一步操作。
bidisty 2013-05-24
  • 打赏
  • 举报
回复
构建一个异步的方法,在异步回发的方法里判定
xiangxiazaizhge 2013-05-24
  • 打赏
  • 举报
回复
引用 6 楼 ariesget 的回复:
确实没看出问题在哪。
FF 00 09 1D 06 //重启引导程序 返回:FF 00 09 01 01 14 E8 FF 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 61 FF 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这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢
xiangxiazaizhge 2013-05-24
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
var send = SendRequestInit(order);
if(send=="success")
{
     SendInitOrder(orer)
}
这样????
额,没用过,不知道这个代码的意思。我想做的是 FF 00 09 1D 06 //重启引导程序 返回:FF 00 09 01 01 14 E8 FF 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 61 FF 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,如果不对就不继续发送,我就是不知道怎么来实现这样的判断

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧