Sfoglia il codice sorgente

1、改级联数据错乱问题
2、推送脚本默认ip改为1.132

guohui 2 anni fa
parent
commit
857f543762
6 ha cambiato i file con 95 aggiunte e 88 eliminazioni
  1. 1 1
      output/push/push.bat
  2. 2 2
      pro/config/cfg.h
  3. 1 1
      pro/src/appweb_handle.c
  4. 87 80
      pro/src/cascade.c
  5. 2 2
      pro/src/cascade.h
  6. 2 2
      pub

+ 1 - 1
output/push/push.bat

@@ -1,6 +1,6 @@
 @ECHO OFF
 
-SET IP=192.168.234.132
+SET IP=192.168.1.132
 
 SET BAT=0
 IF "%~1" NEQ "" (

+ 2 - 2
pro/config/cfg.h

@@ -13,7 +13,7 @@
 //#define PRJ_USASL_AC_I3_O1
 //#define PRJ_USASL_AC_I3_O3
 //#define PRJ_ITK_AC_I1_O1
-#define PRJ_ITK_AC_I3_O1
+//#define PRJ_ITK_AC_I3_O1
 //#define PRJ_STSC_I3_O3
 //#define PRJ_LITECH_AC_I1_O1
 //#define PRJ_LITECH_AC_I3_O1
@@ -21,7 +21,7 @@
 //#define PRJ_ANDERSON_AC_I3_O3
 //#define PRJ_HYPERTEC_AC_I3_O1
 //#define PRJ_SG_I3_O3
-//#define PRJ_TEST
+#define PRJ_TEST
 
 
 

+ 1 - 1
pro/src/appweb_handle.c

@@ -5213,7 +5213,7 @@ static void equipmentMintenance(void *conn)
             cmd_data_t cmd = {0};
             int r=0;
 
-            cmd.cmd = CASCADE_CMD_GET_BREAKER_INFO;
+            cmd.cmd = CASCADE_CMD_BREAKER_GET_INFO;
             cmd.obj = OBJ_OVERALL;
             cascade_request(&cmd);
 

+ 87 - 80
pro/src/cascade.c

@@ -10,24 +10,23 @@
 #include "paras.h"
 
 #if 1
-#define LOGD            log_d
-#define LOGE            log_e
-#define LOGW            log_w
+    #define LOGD            log_d
+    #define LOGE            log_e
+    #define LOGW            log_w
 #else
-#define LOGD            printf
-#define LOGE            printf
-#define LOGW            printf
+    #define LOGD            printf
+    #define LOGE            printf
+    #define LOGW            printf
 #endif
 
-#define MB_MAX_LEN      250
-
-
+#define MB_MAX_LEN          250
 
 typedef struct {
     
     int                 inited;
     pthread_mutex_t     mutex;          //used for list lock  
-    pthread_mutex_t     lock;
+    pthread_mutex_t     mutex2;         //used for extern call
+    pthread_mutex_t     mutex3;         //used for mb_write and mb_read_write
     
     Modbus_Manger       m;
     int                 addr;
@@ -435,7 +434,8 @@ static int slave_save(cascade_handle_t *cas)
 
 static int mb_init(cascade_handle_t *cas, char *path, int type, int addr, uint32_t baud)
 {
-    int r;
+    int r=0;
+
     r = g_modbus_init(&cas->m, path, baud, type, addr, (type>0)?"master":"slave", 1);
     if(r==0) {
         if(type>0) {
@@ -458,6 +458,7 @@ static int mb_init(cascade_handle_t *cas, char *path, int type, int addr, uint32
 static int mb_deinit(cascade_handle_t *cas)
 {
     g_modbus_deinit(&cas->m);
+    cas->inited = 0;
     return 0;
 }
 static int _mb_scan(cascade_handle_t *cas, int addr)
@@ -588,43 +589,44 @@ static int mb_read(cascade_handle_t *cas, int addr, data_t *d)
     int xlen,rlen=0,oncelen=MB_MAX_LEN;
     uint16_t buff[MODBUS_RTU_MAX_ADU_LENGTH];
 
-    if(d->dlen<=0) {
-        //LOGE("___ mb_read dlen %d is wrong!\n", d->dlen);
-        return -1;
-    }
-    //LOGD("___ mb_read dlen: %d\n", d->dlen);
-
-    while(1) {
-        if(rlen+oncelen>d->dlen) {
-            xlen = d->dlen-rlen;
-        }
-        else {
-            xlen = oncelen;
-        }
-        xlen += xlen%2;
+    pthread_mutex_lock(&cas->mutex3);
+    if(d->dlen>0) {
+        while(1) {
+            if(rlen+oncelen>d->dlen) {
+                xlen = d->dlen-rlen;
+            }
+            else {
+                xlen = oncelen;
+            }
+            xlen += xlen%2;
 
-        r = _mb_read(cas, addr, CASCADE_REG_READ, buff, xlen/2);
-        if(r<0) {
-            LOGE("___ _mb_read failed, %s, rlen: %d\n", modbus_strerror(errno), rlen);
-            return -1;
-        }
-        if(rlen+r*2>=d->dlen) {
-            xlen = d->dlen-rlen;
-            finish = 1;
-        }
-        else {
-            xlen = r*2;
-        }
+            r = _mb_read(cas, addr, CASCADE_REG_READ, buff, xlen/2);
+            if(r<0) {
+                LOGE("___ _mb_read failed, %s, rlen: %d\n", modbus_strerror(errno), rlen);
+                r = -1; break;
+            }
+            if(rlen+r*2>=d->dlen) {
+                xlen = d->dlen-rlen;
+                finish = 1;
+            }
+            else {
+                xlen = r*2;
+            }
 
-        memcpy((char*)d->data+rlen, buff, xlen);
-        rlen += xlen;
+            memcpy((char*)d->data+rlen, buff, xlen);
+            rlen += xlen;
 
-        if(finish) {
-            break;
+            if(finish) {
+                break;
+            }
         }
     }
+    else {
+        r = -1;
+    }
+    pthread_mutex_lock(&cas->mutex3);
     
-    return 0;
+    return r;
 }
 static int mb_write(cascade_handle_t *cas, int addr, data_t *d)
 {
@@ -632,37 +634,38 @@ static int mb_write(cascade_handle_t *cas, int addr, data_t *d)
     int xlen,wlen=0,oncelen=MB_MAX_LEN;
     uint16_t buff[MODBUS_RTU_MAX_ADU_LENGTH];
 
-    if(d->dlen<=0) {
-        //LOGE("___ mb_write dlen %d is wrong!\n", d->dlen);
-        return -1;
-    }
-    //LOGD("___ mb_write dlen: %d\n", d->dlen);
-
-    while(1) {
-        if(wlen+oncelen>d->dlen) {
-            xlen = d->dlen-wlen;
-        }
-        else {
-            xlen = oncelen;
-        }
-        xlen += xlen%2;
+    pthread_mutex_lock(&cas->mutex3);
+    if(d->dlen>0) {
+        while(1) {
+            if(wlen+oncelen>d->dlen) {
+                xlen = d->dlen-wlen;
+            }
+            else {
+                xlen = oncelen;
+            }
+            xlen += xlen%2;
 
-        memcpy(buff, d->data+wlen, xlen);
-        r = _mb_write(cas, addr, CASCADE_REG_WRITE, buff, xlen/2);
-        if(r<0) {
-            LOGE("___ _mb_write, addr: %d, reg: %d, cnt: %d, %s\n", addr, CASCADE_REG_WRITE, xlen/2, modbus_strerror(errno));
-            return -1;
-        }
-        if(wlen+r*2>=d->dlen) {
-            break;
-        }
-        else {
-            xlen = r*2;
+            memcpy(buff, d->data+wlen, xlen);
+            r = _mb_write(cas, addr, CASCADE_REG_WRITE, buff, xlen/2);
+            if(r<0) {
+                LOGE("___ _mb_write, addr: %d, reg: %d, cnt: %d, %s\n", addr, CASCADE_REG_WRITE, xlen/2, modbus_strerror(errno));
+                r = -1; break;
+            }
+            if(wlen+r*2>=d->dlen) {
+                break;
+            }
+            else {
+                xlen = r*2;
+            }
+            wlen += xlen;
         }
-        wlen += xlen;
     }
+    else {
+        r = -1;
+    }
+    pthread_mutex_unlock(&cas->mutex3);
     
-    return 0;
+    return r;
 }
 static int mb_write_read(cascade_handle_t *cas, int addr, data_t *wd, data_t *rd)
 {
@@ -730,7 +733,7 @@ static int mb_receive(cascade_handle_t *cas)
                 break;
 
 
-              case CASCADE_CMD_OPEN_NF:
+                case CASCADE_CMD_OPEN_NF:
                 case CASCADE_CMD_CLOSE_NF:
                 {
                     cmd_data_t *pcmd=malloc(sizeof(cmd_data_t));
@@ -811,7 +814,7 @@ static int mb_receive(cascade_handle_t *cas)
                 case CASCADE_CMD_QUERY_HIS:break;
                 case CASCADE_CMD_QUERY_TOTAL:break;
                 case CASCADE_CMD_QUERY_TOTAL_PWR:break;
-                case CASCADE_CMD_GET_BREAKER_INFO:
+                case CASCADE_CMD_BREAKER_GET_INFO:
                 {
                     LOGD("_____ slave breaker CASCADE_CMD_GET_INFO\n");
                     slave_breaker_info(cas);
@@ -1316,13 +1319,13 @@ static int master_cmd(cascade_handle_t *cas, cmd_data_t *cmd)
             }
         }
         break;
-        case CASCADE_CMD_GET_BREAKER_INFO:
+        case CASCADE_CMD_BREAKER_GET_INFO:
         {
             wdata.dlen = sizeof(cmd_data_t);
             wdata.data = (uint8_t*)cmd;
             rdata.dlen = sizeof(breaker_info_t)-sizeof(breaker_channel_info_t)*CH_MAX;
             rdata.data = (uint8_t*)&cas->sBreaker;
-            LOGD("_____ master send CASCADE_CMD_GET_BREAKER_INFO\n");
+            LOGD("_____ master send CASCADE_CMD_BREAKER_GET_INFO\n");
             r = mb_write_read(cas, cur_dev_addr, &wdata, &rdata);
             if(r==0) {
                 LOGD("______cas->info.cnt: %d\n", cas->sBreaker.cnt);
@@ -1689,7 +1692,6 @@ static int set_modbus(cascade_handle_t *cas, ModbusInfo_t *info)
     if(cas->inited) {
         mb_deinit(cas);
     }
-    cas->inited = 0;
     cas->mInfo = *info;
     //LOGD("master init modbus:  port: %s, type: %d, baud: %d\n", CASCADE_MODBUS_PORT, info->mode, info->baudrate);
 
@@ -1699,7 +1701,7 @@ static int set_modbus(cascade_handle_t *cas, ModbusInfo_t *info)
         LOGE("cascade modbus init error.\n");
         return -1;
     }
-    cas->inited = 1;
+
     if (cas->mInfo.mode==MODBUS_SLAVE)
     {
         for (size_t i = 1; i < CASCADE_MAX; i++)
@@ -1725,9 +1727,13 @@ int cascade_init(void)
     if(r) {
         LOGE("___ cascade mutex init failed\n");
     }
-    r = pthread_mutex_init(&cas->lock, NULL);
+    r = pthread_mutex_init(&cas->mutex2, NULL);
+    if(r) {
+        LOGE("___ cascade mutex2 init failed\n");
+    }
+    r = pthread_mutex_init(&cas->mutex3, NULL);
     if(r) {
-        LOGE("___ cascade lock init failed\n");
+        LOGE("___ cascade mutex3 init failed\n");
     }
     
     cas->scanAddr = 1;
@@ -1753,7 +1759,8 @@ int cascade_deinit(void)
     thread_stop(THREAD_ID_CASCADE_SCAN);
 
     pthread_mutex_destroy(&cas->mutex);
-    pthread_mutex_destroy(&cas->lock);
+    pthread_mutex_destroy(&cas->mutex2);
+    pthread_mutex_destroy(&cas->mutex3);
     modbus_mapping_free(cas->map);
 
     mb_deinit(cas);
@@ -1836,9 +1843,9 @@ int cascade_request(cmd_data_t *cmd)
         return -1;
     }
 
-    pthread_mutex_lock(&cas->lock);
+    pthread_mutex_lock(&cas->mutex2);
     r = master_cmd(cas, cmd);
-    pthread_mutex_unlock(&cas->lock);
+    pthread_mutex_unlock(&cas->mutex2);
 
     return r;
 }

+ 2 - 2
pro/src/cascade.h

@@ -53,7 +53,7 @@ enum {
     CASCADE_CMD_QUERY_TOTAL_PWR,
 
     CASCADE_CMD_BREAKER_QUERY,
-    CASCADE_CMD_GET_BREAKER_INFO,
+    CASCADE_CMD_BREAKER_GET_INFO,
     CASCADE_CMD_BREAKER_SAVE_ADD,
     CASCADE_CMD_BREAKER_SAVE_UPDATE,
     CASCADE_CMD_BREAKER_SAVE_DELETE,
@@ -215,7 +215,7 @@ typedef struct {
     // char            time_s[24];   //start time
     // char            time_e[24];   //end time
     union{
-        cascade_breaker_add_t     data;
+        cascade_breaker_add_t    data;
         cascade_breaker_update_t data1;
         cascade_braeker_delete_t data2;
     }datas;

+ 2 - 2
pub

@@ -16,11 +16,11 @@
 #PRJS="PRJ_RELEASE_AC_I3_O3"
 #PRJS="PRJ_STSC_I3_O3"
 #PRJS="PRJ_SG_I3_O3"
-#PRJS="PRJ_TEST"
+PRJS="PRJ_TEST"
 
 #PRJS="PRJ_USASL_AC_I3_O1 PRJ_USASL_AC_I3_O3"
 #PRJS="PRJ_XIAN_AC_I1_O1_P4 PRJ_XIAN_AC_I1_O1_P8"
-PRJS="PRJ_ITK_AC_I1_O1 PRJ_ITK_AC_I3_O1"
+#PRJS="PRJ_ITK_AC_I1_O1 PRJ_ITK_AC_I3_O1"
 #PRJS="PRJ_LITECH_AC_I1_O1 PRJ_LITECH_AC_I3_O1"
 #PRJS="PRJ_RELEASE_DC_I_DC_O PRJ_RELEASE_AC_I1_O1 PRJ_RELEASE_AC_I3_O1 PRJ_RELEASE_AC_I3_O3"
 #PRJS="PRJ_LITECH_AC_I1_O1 PRJ_LITECH_AC_I3_O1 PRJ_XIAN_AC_I1_O1_P4 PRJ_XIAN_AC_I1_O1_P8"