diff --git a/inc/serial.h b/inc/serial.h index 3c4c18f..8b19dfe 100644 --- a/inc/serial.h +++ b/inc/serial.h @@ -14,7 +14,7 @@ int SerialOpen(const char *dev_name,int baud,int databit,int stopbit,int chk_mode); int SerialRead(int m_comFd,unsigned char *buf,int sz,int timeout); int SerialWrite(int m_comFd,const unsigned char *buf,int sz); -int SerialReadEx(int m_comFd,unsigned char *buf,int sz,int timeout); +int SerialReadEx(int m_comFd,unsigned char *buf,int sz); long long get_msec(void); diff --git a/inc/sjzd_serial.h b/inc/sjzd_serial.h index 2537c2b..ce0c923 100644 --- a/inc/sjzd_serial.h +++ b/inc/sjzd_serial.h @@ -5,7 +5,7 @@ #include "common.h" #include -#define MODBUS_TIMEOUT 10 +#define MODBUS_TIMEOUT 1000 typedef struct { diff --git a/src/main.c b/src/main.c index c6b8e21..db417d5 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ #include #include "iec61850_process.h" -#define APP_VERSION "SV01.002" +#define APP_VERSION "SV01.003" #define DEVICE_NUM 3 @@ -54,7 +54,7 @@ int log_init(void) char *make_file_name(uint32_t sn,uint8_t addr) { - static char data_file_name[64]; + static char data_file_name[128]; struct tm *p; memset(data_file_name,0,sizeof(data_file_name)); p=localtime((time_t *)&sn); @@ -113,6 +113,7 @@ int main(int argc,char **args) log_init(); elog_raw("Application Version:%s\r\n",APP_VERSION); + log_e("Application restart!"); //if(read_dev_cfg(&dev_cfg)!=0) //{ @@ -211,7 +212,7 @@ int main(int argc,char **args) /* code */ } - SMP_INV = 15; + //SMP_INV = 15; // 测试使用 //发送心跳包检测通讯是否正常 heartbeat(DEVICE_NUM); diff --git a/src/serial.c b/src/serial.c index 41505bc..05ac462 100644 --- a/src/serial.c +++ b/src/serial.c @@ -185,7 +185,7 @@ long long get_msec(void) #if 0 //timeout is in 100ms -int SerialReadEx(int m_comFd,unsigned char *buf,int sz,int timeout) +//int SerialReadEx(int m_comFd,unsigned char *buf,int sz,int timeout) { int curr_length=0,last_length=0,rx_length=0; //int rx_tick=0; @@ -217,25 +217,26 @@ int SerialReadEx(int m_comFd,unsigned char *buf,int sz,int timeout) } #endif -int SerialReadEx(int m_comFd,unsigned char *buf,int sz,int timeout) +int SerialReadEx(int m_comFd,unsigned char *buf,int sz) { - int curr_length=0/*,last_length=0*/,rx_length=0; + int /*curr_length=0,last_length=0,*/rx_length=0; - long long t0, t1; + //long long t0, t1; - t0 = get_msec(); + //t0 = get_msec(); - for(;;) + //for(;;) { - rx_length += curr_length; - usleep(5000); - curr_length = read(m_comFd,buf+rx_length, 1040-rx_length);/* 在串口读取字符串 */ - t1 = get_msec(); - if(t1-t0 >= 350) - break; + //rx_length += curr_length; + //if() + usleep(50000); + rx_length = read(m_comFd,buf, sz);/* 在串口读取字符串 */ + //t1 = get_msec(); + //if(t1-t0 >= 350) + // break; } - if (rx_length < 1) - return rx_length; + //if (rx_length < 1) + // return rx_length; return rx_length; } diff --git a/src/sjzd.c b/src/sjzd.c index 64d585f..0e7730b 100644 --- a/src/sjzd.c +++ b/src/sjzd.c @@ -541,7 +541,7 @@ void SJZD_file_analysis(uint8_t slave_addr,char *curr_file,float sensor_range) memset(&tmp3, 0x00, sizeof(USR_MV)); memset(fft_value, 0x00, 19*sizeof(USR_MV)); double pri_max[]={196000,196000,196000,196000,196000,196000,196000,196000,196000,196000,196000,196000,196000,196000,196000,196000,96000,196000,196000}; - double sec_max[]={196000,196000,196000,196000,196000,196000,196000}; + double sec_max[19]={196000,196000,196000,196000,196000,196000,196000}; double offset[]={1.2626,0.3597,0,0,0,0,0,0,0,0,0,0}; int channel_num=0; double noise_max=150; @@ -738,7 +738,8 @@ void SJZD_file_analysis(uint8_t slave_addr,char *curr_file,float sensor_range) fft_value[n].q=1; fft_value[n].t.secs=time(NULL); fft_value[n].t.ms = fft_value[n].t.secs*1000; - if(amp_temp[n]>=sec_max[n]) + //if(amp_temp[n]>=sec_max[n]) + if(amp_temp[n]>=pri_max[n]) { amp_warning[n]=1;//modbus 每个分量报警 tmp3.v.stVal=1; diff --git a/src/sjzd_serial.c b/src/sjzd_serial.c index 07e82a0..1706311 100644 --- a/src/sjzd_serial.c +++ b/src/sjzd_serial.c @@ -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)