如何知道这个硬件是否有响应,或者返回值什么的。
要求发送三次,如果如任何响应,判断本次通信失败。。这个如何做啊?

解决方案 »

  1.   

    用 sscomm32 先发收命令试通先。
      

  2.   

    wuyazhe 能否详细点?
    谢谢了
      

  3.   

    http://blog.csdn.net/wuyazhe/category/695097.aspx
    通讯协议你要先了解好。
    用 sscomm32 先发收命令试通先。
    你搜索一下,这是个串口调试工具。
      

  4.   

    mervyn807  通过什么判断有没有返回值啊?
    请教了
      

  5.   

    用的是线程 +  while(true) 循环 发送队列实现的
    我想每发送一条命令 等待有结果了,在执行下一条命令。
      

  6.   

    回复 10楼:
       这不是网口,这是串口,socket好像不行吧
      

  7.   

    回复 11楼:
         你发送命令后,立刻读取串口返回数据,设定一个超时时间,如果在超时时间内没有返回值,或则返回错误值就再次循环,否则就break。
      

  8.   

    int length = mycomm.BytesToRead;
    byte[] data = new byte[length];
    for (int i = 0; i < length; i++)
    {
        data[i] = (byte)mycomm.ReadByte();
    }这个就是读取串口返回数据  把data转换成相应类型就可以了 
     串口属性里面有个ReadTimeOut就是设定超时时间的  多少时间内没有读取到数据就判断失败
      

  9.   

    回复14楼:就是这个意思下面是我写的代码。如何设定??// 从命令队列取出命令并发送
                        while (true)
                        {
                            if (CommandList.Count > 0)
                            {
                                Command command = null;
                                object lockHelper = new object();                            lock (lockHelper)
                                {
                                    command = CommandList[0];
                                    SendedCommandList.Add(command);
                                    CommandList.RemoveAt(0);
                                }                            try
                                {
                                    serial.Write(command.CommandText);                                // 记录日志:发送命令成功
                                    CMMLog.Info(string.Format("HardwareAccessObject:" + CMMDefine.CONSTANTS_MSG_SEND_COMMAND, EquipmentID, command));
                                }
                                catch (Exception ex)
                                {
                                    // 记录日志:发送命令失败
                                    CMMLog.Error(string.Format("HardwareAccessObject:" + CMMDefine.CONSTANTS_MSG_SEND_COMMAND_FAILURE, EquipmentID, command));
                                }
                            }                        try
                            {
                                Thread.Sleep(5);
                            }
                            catch (Exception ex)
                            {
                                // 记录日志:线程Sleep异常
                                CMMLog.Error("HardwareAccessObject:" + CMMDefine.CONSTANTS_MSG_THREAD_SLEEP_FAILURE + "\\n" + ex.StackTrace);
                            }
                        }
      

  10.   

      可以在这里面读取串口返回数据   睡线程的话就可以不用设定超时时间了
      判断int length = mycomm.BytesToRead;
      的值  如果是0 就是没有返回值就继续线程  不是0就把值转换出来进行判断  
      
    try
      {
      Thread.Sleep(5);
      }
      catch (Exception ex)
      {
      // 记录日志:线程Sleep异常
      CMMLog.Error("HardwareAccessObject:" + CMMDefine.CONSTANTS_MSG_THREAD_SLEEP_FAILURE + "\\n" + ex.StackTrace);
      }
      }
      

  11.   

    接16楼的代码 :
    发送命令的队列里面有很多对多个硬件的访问命令,一个硬件又有多个命令要执行发送。
    比如:OPEN  GET STATUS  两条命令
    不知道如何去做对所有设备的返回结果了如何解决这个问题啊!头疼。