|
|
|
@ -113,7 +113,7 @@ int sjzd_recv_data(SJZD_SERIAL_DEF *pPortParam, u_char *buf, int len, uint16_t u
|
|
|
|
|
case 4: // cmd
|
|
|
|
|
pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i];
|
|
|
|
|
pPortParam->m_iNeedRevLength--;
|
|
|
|
|
if(4 == buf[i])
|
|
|
|
|
/*if(4 == buf[i]) // 测试使用
|
|
|
|
|
{
|
|
|
|
|
if(fault == 5)
|
|
|
|
|
{
|
|
|
|
@ -123,7 +123,7 @@ int sjzd_recv_data(SJZD_SERIAL_DEF *pPortParam, u_char *buf, int len, uint16_t u
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
fault++;
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
if ((0 < buf[i]) && (6 > buf[i]))
|
|
|
|
|
pPortParam->m_iRevStatus++;
|
|
|
|
|
else
|
|
|
|
@ -152,8 +152,8 @@ int sjzd_recv_data(SJZD_SERIAL_DEF *pPortParam, u_char *buf, int len, uint16_t u
|
|
|
|
|
flag = 1;
|
|
|
|
|
if (1 == flag)
|
|
|
|
|
{
|
|
|
|
|
memmove(buf, pPortParam->m_au8RecvBuf, pPortParam->m_iRecvLen);
|
|
|
|
|
return pPortParam->m_iRecvLen;
|
|
|
|
|
//memmove(buf, pPortParam->m_au8RecvBuf, pPortParam->m_iRecvLen);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -182,15 +182,17 @@ int sjzd_recv_data(SJZD_SERIAL_DEF *pPortParam, u_char *buf, int len, uint16_t u
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int32_t sjzd_serial_read(uint8_t *pucBuffer,uint16_t usNBytes,uint16_t *usNBytesRead)
|
|
|
|
|
{
|
|
|
|
|
int rx_len;
|
|
|
|
|
int rx_len=0, recvlen;
|
|
|
|
|
uint8_t recvbuf[RECVDATA_MAXLENTH];
|
|
|
|
|
SJZD_SERIAL_DEF *sjzdport;
|
|
|
|
|
long long t0, t1;
|
|
|
|
|
|
|
|
|
|
rx_len=SerialReadEx(sjzd_serial_fd,pucBuffer,usNBytes,MODBUS_TIMEOUT);
|
|
|
|
|
t0 = get_msec();
|
|
|
|
|
sjzdport=(SJZD_SERIAL_DEF *)malloc(sizeof(SJZD_SERIAL_DEF));
|
|
|
|
|
if(sjzdport==NULL)
|
|
|
|
|
{
|
|
|
|
@ -198,8 +200,29 @@ int32_t sjzd_serial_read(uint8_t *pucBuffer,uint16_t usNBytes,uint16_t *usNBytes
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
memset(sjzdport, 0, sizeof(SJZD_SERIAL_DEF));
|
|
|
|
|
log_e("rx_len=%d", rx_len);
|
|
|
|
|
rx_len = sjzd_recv_data(sjzdport, pucBuffer, rx_len, usNBytes);
|
|
|
|
|
|
|
|
|
|
for(; ; )
|
|
|
|
|
{
|
|
|
|
|
recvlen=SerialReadEx(sjzd_serial_fd,recvbuf,RECVDATA_MAXLENTH);
|
|
|
|
|
//log_e("rx_len=%d", rx_len);
|
|
|
|
|
if(recvlen > 0)
|
|
|
|
|
{
|
|
|
|
|
sjzd_recv_data(sjzdport, recvbuf, recvlen, usNBytes);
|
|
|
|
|
if(sjzdport->m_iRecvLen >= usNBytes)
|
|
|
|
|
{
|
|
|
|
|
rx_len = sjzdport->m_iRecvLen;
|
|
|
|
|
memmove(pucBuffer, sjzdport->m_au8RecvBuf, rx_len);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
t1 = get_msec();
|
|
|
|
|
if(t1-t0 >= MODBUS_TIMEOUT) // 超过1秒一直没有收到数据,判断超时
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(usNBytesRead!=NULL)
|
|
|
|
|
{
|
|
|
|
|
if(rx_len>0)
|
|
|
|
|