我在用C#编一个软件,然后这个软件是操作RFID读写器的,首先要进行初始化,我先要向它发送一条命令,它会返回一个命令,我要判断这个命令是否正确,如果正确就继续发送下一条初始化命令。这应该怎么编呀,毫无头绪

解决方案 »

  1.   

    var send = SendRequestInit(order);
    if(send=="success")
    {
         SendInitOrder(orer)
    }这样????
      

  2.   

    额,没用过,不知道这个代码的意思。我想做的是
    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,如果不对就不继续发送,我就是不知道怎么来实现这样的判断
      

  3.   

    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这个函数中接收到返回命令,然后直接判断吗?判断好了应该怎么返回判断的结果继续发送呢
      

  4.   

    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中判断,如果有收到你想得到的返回值就执行你下一步操作。
      

  5.   

    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事件中发送命令的,怎么回到这个事件中来继续发呢?或者说应该在定时器中发送?
      

  6.   

    你是说返回的命令吗?它也是返回几个字节的十六进制数来验证发送的初始化命令是否正确
    还是没明白   按你所说 我觉得 发送命令后  再发回来一个表示已收到  然后就继续发送下一个命令
    关键是我接收是在serialPort1_DataReceived这里接收,但是发送是在窗体的Load事件中发送,我发送了一个命令,然后到serialPort1_DataReceived了接收一个返回值,如果返回值正确以后,再回到Load事件中继续发送下一条命令,我不知道该怎么从serialPort1_DataReceived返回
      

  7.   

    你这个使用load事件的方法是不适合你的场景的。这个首先要纠正过来,用一个单独的方法来替代它。
    其次,为了简单控制,你可以使用两个信号量。通过在serialPort1_DataReceived过程中对收到数据的判定来设定对应的信号量。当然你还需要其他的内容来关联发送和接收等等。
      

  8.   

    给出个示例代码,把你的逻辑填进去就差不多了 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();
    }
    }
      

  9.   

    Demo就是你那个Load里面需要做的事
    SendCommand完成发送命令的工作
    OnDataReceive就是你的serialPort1_DataReceived