|
@@ -219,17 +219,17 @@ static int slave_breaker_info(cascade_handle_t *cas)
|
|
|
breaker->breaker_chn[cnt].breaker_status = temp->breaker_status;
|
|
breaker->breaker_chn[cnt].breaker_status = temp->breaker_status;
|
|
|
breaker->breaker_chn[cnt].breaker_chn = temp->breaker_chn;
|
|
breaker->breaker_chn[cnt].breaker_chn = temp->breaker_chn;
|
|
|
breaker->breaker_chn[cnt].breaker_id = temp->breaker_id;
|
|
breaker->breaker_chn[cnt].breaker_id = temp->breaker_id;
|
|
|
- strcpy(breaker->breaker_chn[cnt].breaker_gather_type, temp->breaker_gather_type);
|
|
|
|
|
- strcpy(breaker->breaker_chn[cnt].breaker_com, temp->breaker_com);
|
|
|
|
|
- strcpy(breaker->breaker_chn[cnt].breaker_switch_name, temp->breaker_switch_name);
|
|
|
|
|
- strcpy(breaker->breaker_chn[cnt].breaker_chns_name, temp->breaker_chns_name);
|
|
|
|
|
|
|
+ strncpy(breaker->breaker_chn[cnt].breaker_gather_type, temp->breaker_gather_type,sizeof(breaker->breaker_chn[cnt].breaker_gather_type)-1);
|
|
|
|
|
+ strncpy(breaker->breaker_chn[cnt].breaker_com, temp->breaker_com,sizeof(breaker->breaker_chn[cnt].breaker_com)-1);
|
|
|
|
|
+ strncpy(breaker->breaker_chn[cnt].breaker_switch_name, temp->breaker_switch_name,sizeof(breaker->breaker_chn[cnt].breaker_switch_name)-1);
|
|
|
|
|
+ strncpy(breaker->breaker_chn[cnt].breaker_chns_name, temp->breaker_chns_name,sizeof(breaker->breaker_chn[cnt].breaker_chns_name)-1);
|
|
|
cnt++;
|
|
cnt++;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
lock_s_release(LOCK_ID_BREAKER);
|
|
lock_s_release(LOCK_ID_BREAKER);
|
|
|
|
|
|
|
|
breaker->cnt = cnt;
|
|
breaker->cnt = cnt;
|
|
|
- LOGD("___ slave_breaker_info, breaker_all: saddr=0x%x %d\n", (uint32_t)dm, cnt);
|
|
|
|
|
|
|
+ LOGD("___ slave_breaker_info, breaker_all:, cnt: %d\n", cnt);
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
@@ -675,7 +675,7 @@ static int mb_hdr(uint8_t *data, int datalen, mb_hdr_t *h)
|
|
|
#define RW_TIMEOUT_MS 800
|
|
#define RW_TIMEOUT_MS 800
|
|
|
#else
|
|
#else
|
|
|
#define SCAN_TIMEOUT_MS 200
|
|
#define SCAN_TIMEOUT_MS 200
|
|
|
-#define RW_TIMEOUT_MS 500
|
|
|
|
|
|
|
+#define RW_TIMEOUT_MS 200
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
static int mb_scan(cascade_handle_t *cas, int addr)
|
|
static int mb_scan(cascade_handle_t *cas, int addr)
|
|
@@ -684,10 +684,10 @@ static int mb_scan(cascade_handle_t *cas, int addr)
|
|
|
uint16_t tmp;
|
|
uint16_t tmp;
|
|
|
|
|
|
|
|
pthread_mutex_lock(&cas->mutex3);
|
|
pthread_mutex_lock(&cas->mutex3);
|
|
|
- timeout = _mb_get_timeout(cas);
|
|
|
|
|
- _mb_set_timeout(cas, SCAN_TIMEOUT_MS);
|
|
|
|
|
|
|
+ // timeout = _mb_get_timeout(cas);
|
|
|
|
|
+ // _mb_set_timeout(cas, SCAN_TIMEOUT_MS);
|
|
|
r = _mb_scan(cas, addr);
|
|
r = _mb_scan(cas, addr);
|
|
|
- _mb_set_timeout(cas, timeout);
|
|
|
|
|
|
|
+ // _mb_set_timeout(cas, timeout);
|
|
|
pthread_mutex_unlock(&cas->mutex3);
|
|
pthread_mutex_unlock(&cas->mutex3);
|
|
|
|
|
|
|
|
return r;
|
|
return r;
|
|
@@ -695,7 +695,7 @@ static int mb_scan(cascade_handle_t *cas, int addr)
|
|
|
|
|
|
|
|
static int mb_read(cascade_handle_t *cas, int addr, data_t *d)
|
|
static int mb_read(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
{
|
|
{
|
|
|
- int i, r = 0, finish = 0, timeout = 0;
|
|
|
|
|
|
|
+ int r = 0, finish = 0, timeout = 0;
|
|
|
int rl, xlen, rlen = 0, oncelen = MB_MAX_LEN;
|
|
int rl, xlen, rlen = 0, oncelen = MB_MAX_LEN;
|
|
|
uint16_t buff[MODBUS_RTU_MAX_ADU_LENGTH];
|
|
uint16_t buff[MODBUS_RTU_MAX_ADU_LENGTH];
|
|
|
|
|
|
|
@@ -703,12 +703,11 @@ static int mb_read(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
{
|
|
{
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- for (i = 0; i < 3; i++)
|
|
|
|
|
|
|
+ pthread_mutex_lock(&cas->mutex3);
|
|
|
|
|
+ //for (i = 0; i < 3; i++)
|
|
|
{
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex3);
|
|
|
|
|
- timeout = _mb_get_timeout(cas);
|
|
|
|
|
- _mb_set_timeout(cas, RW_TIMEOUT_MS);
|
|
|
|
|
|
|
+ // timeout = _mb_get_timeout(cas);
|
|
|
|
|
+ // _mb_set_timeout(cas, RW_TIMEOUT_MS);
|
|
|
r = 0;
|
|
r = 0;
|
|
|
rlen = 0;
|
|
rlen = 0;
|
|
|
while (1)
|
|
while (1)
|
|
@@ -726,7 +725,7 @@ static int mb_read(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
rl = _mb_read(cas, addr, CASCADE_REG_READ, buff, xlen / 2);
|
|
rl = _mb_read(cas, addr, CASCADE_REG_READ, buff, xlen / 2);
|
|
|
if (rl < 0)
|
|
if (rl < 0)
|
|
|
{
|
|
{
|
|
|
- LOGE("___ _mb_read failed, %s, rlen: %d, retry: %d\n", modbus_strerror(errno), rlen, i);
|
|
|
|
|
|
|
+ LOGE("___ _mb_read failed, %s, rlen: %d,\n", modbus_strerror(errno), rlen);
|
|
|
r = -1;
|
|
r = -1;
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -748,19 +747,19 @@ static int mb_read(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- _mb_set_timeout(cas, timeout);
|
|
|
|
|
- pthread_mutex_unlock(&cas->mutex3);
|
|
|
|
|
- if (r == 0)
|
|
|
|
|
- {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // _mb_set_timeout(cas, timeout);
|
|
|
|
|
|
|
|
|
|
+ // if (r == 0)
|
|
|
|
|
+ // {
|
|
|
|
|
+ // break;
|
|
|
|
|
+ // }
|
|
|
|
|
+ }
|
|
|
|
|
+ pthread_mutex_unlock(&cas->mutex3);
|
|
|
return r;
|
|
return r;
|
|
|
}
|
|
}
|
|
|
static int mb_write(cascade_handle_t *cas, int addr, data_t *d)
|
|
static int mb_write(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
{
|
|
{
|
|
|
- int i, r = 0, timeout = 0;
|
|
|
|
|
|
|
+ int r = 0, timeout = 0;
|
|
|
int wl, xlen, wlen = 0, oncelen = MB_MAX_LEN;
|
|
int wl, xlen, wlen = 0, oncelen = MB_MAX_LEN;
|
|
|
uint16_t buff[MODBUS_RTU_MAX_ADU_LENGTH];
|
|
uint16_t buff[MODBUS_RTU_MAX_ADU_LENGTH];
|
|
|
|
|
|
|
@@ -768,12 +767,11 @@ static int mb_write(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
{
|
|
{
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- for (i = 0; i < 3; i++)
|
|
|
|
|
|
|
+ pthread_mutex_lock(&cas->mutex3);
|
|
|
|
|
+ // for (i = 0; i < 3; i++)
|
|
|
{
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex3);
|
|
|
|
|
- timeout = _mb_get_timeout(cas);
|
|
|
|
|
- _mb_set_timeout(cas, RW_TIMEOUT_MS);
|
|
|
|
|
|
|
+ // timeout = _mb_get_timeout(cas);
|
|
|
|
|
+ // _mb_set_timeout(cas, RW_TIMEOUT_MS);
|
|
|
r = 0;
|
|
r = 0;
|
|
|
wlen = 0;
|
|
wlen = 0;
|
|
|
|
|
|
|
@@ -793,7 +791,7 @@ static int mb_write(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
wl = _mb_write(cas, addr, CASCADE_REG_WRITE, buff, xlen / 2);
|
|
wl = _mb_write(cas, addr, CASCADE_REG_WRITE, buff, xlen / 2);
|
|
|
if (wl < 0)
|
|
if (wl < 0)
|
|
|
{
|
|
{
|
|
|
- LOGE("___ _mb_write failed, addr: %d, reg: %d, cnt: %d, %s, retry: %d\n", addr, CASCADE_REG_WRITE, xlen / 2, modbus_strerror(errno), i);
|
|
|
|
|
|
|
+ LOGE("___ _mb_write failed, addr: %d, reg: %d, cnt: %d, %s\n", addr, CASCADE_REG_WRITE, xlen / 2, modbus_strerror(errno));
|
|
|
r = -1;
|
|
r = -1;
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -808,13 +806,14 @@ static int mb_write(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
}
|
|
}
|
|
|
wlen += xlen;
|
|
wlen += xlen;
|
|
|
}
|
|
}
|
|
|
- _mb_set_timeout(cas, timeout);
|
|
|
|
|
- pthread_mutex_unlock(&cas->mutex3);
|
|
|
|
|
- if (r == 0)
|
|
|
|
|
- {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // _mb_set_timeout(cas, timeout);
|
|
|
|
|
+
|
|
|
|
|
+ // if (r == 0)
|
|
|
|
|
+ // {
|
|
|
|
|
+ // break;
|
|
|
|
|
+ // }
|
|
|
}
|
|
}
|
|
|
|
|
+ pthread_mutex_unlock(&cas->mutex3);
|
|
|
|
|
|
|
|
return r;
|
|
return r;
|
|
|
}
|
|
}
|
|
@@ -996,7 +995,7 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
if (r > 0)
|
|
if (r > 0)
|
|
|
{
|
|
{
|
|
|
sendlen += h.regcnt * 2;
|
|
sendlen += h.regcnt * 2;
|
|
|
- // LOGD("____ slave sendlen: %d, h.dlen: %d, r: %d\n", sendlen, h.dlen, r);
|
|
|
|
|
|
|
+ LOGD("____ slave sendlen: %d, h.dlen: %d, r: %d\n", sendlen, h.dlen, r);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
@@ -1777,6 +1776,7 @@ static void *cascade_thread(void *arg)
|
|
|
thread_handle_t *h = (thread_handle_t *)arg;
|
|
thread_handle_t *h = (thread_handle_t *)arg;
|
|
|
cascade_handle_t *cas = (cascade_handle_t *)h->arg;
|
|
cascade_handle_t *cas = (cascade_handle_t *)h->arg;
|
|
|
ModbusInfo_t *info = &cas->mInfo;
|
|
ModbusInfo_t *info = &cas->mInfo;
|
|
|
|
|
+ cmd_data_t *cmd = &cas->cmd;
|
|
|
|
|
|
|
|
LOGD("__ cascade %s\n", (info->mode == MODBUS_MASTER) ? "master" : "slave");
|
|
LOGD("__ cascade %s\n", (info->mode == MODBUS_MASTER) ? "master" : "slave");
|
|
|
while (h->quit == 0)
|
|
while (h->quit == 0)
|
|
@@ -1784,7 +1784,11 @@ static void *cascade_thread(void *arg)
|
|
|
if (info->mode == MODBUS_MASTER)
|
|
if (info->mode == MODBUS_MASTER)
|
|
|
{ // 主模
|
|
{ // 主模
|
|
|
r = master_query(cas);
|
|
r = master_query(cas);
|
|
|
- sleep(1);
|
|
|
|
|
|
|
+ if(cmd->cmd==CASCADE_CMD_QUERY_CH)
|
|
|
|
|
+ {
|
|
|
|
|
+ sleep(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ else sleep(3);
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{ // 从模式,等待主设备发起数据请�?
|
|
{ // 从模式,等待主设备发起数据请�?
|
|
@@ -1954,6 +1958,9 @@ static int set_modbus(cascade_handle_t *cas, ModbusInfo_t *info)
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ _mb_set_timeout(cas, SCAN_TIMEOUT_MS);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
#if (CHIP_TYPE == CHIP_T113s)
|
|
#if (CHIP_TYPE == CHIP_T113s)
|
|
|
cas->scanner_flag = 0;
|
|
cas->scanner_flag = 0;
|
|
|
#endif
|
|
#endif
|