int reg_num=(9+2*(sendBuf[10]*256+sendBuf[11])); int iSend=s.Send(sendBuf,12,0);
if(iSend==SOCKET_ERROR)
{
AfxMessageBox("发送数据失败!");
s.Close ();
return 1;
} BYTE Recv[260];
int iRecv=s.Receive (Recv,260,0
         if(iRecv<9)
{
if(iRecv==0)
{
AfxMessageBox("意外的关闭远端的连接!");
}
else
{
            AfxMessageBox("响应帧太短!");
}
}
else//不清楚?????
{
BYTE a=Recv[7]&0x80;
                  if(a!=0)
{
            AfxMessageBox("Modbus意外响应不正确!");
}
else 
{
if(iRecv!=reg_num)
{
AfxMessageBox("不正确的响应大小!");
}
else//接受数据的处理????
{
}
}
}
关于通讯还有一些不清楚的,哪位高手能帮忙解释下else语句中几个判断是什么意思?谢啦

解决方案 »

  1.   

    else//不清楚?????  返回报文字节数要大于9
    {
    BYTE a=Recv[7]&0x80;
      if(a!=0)
    {
      AfxMessageBox("Modbus意外响应不正确!");
    }
    else 
    {
    if(iRecv!=reg_num)
    {
    AfxMessageBox("不正确的响应大小!");
    }
    else//接受数据的处理????              处理数据
    {
    }
    }modbus协议较简单,建议楼主先把协议弄熟了
      

  2.   

    我也是刚接触,现在主要是BYTE a=Recv[7]&0x80还有int reg_num=(9+2*(sendBuf[10]*256+sendBuf[11]));这两句不是很明白