guohui лет назад: 2
Родитель
Сommit
59334582e4
2 измененных файлов с 30 добавлено и 12 удалено
  1. 29 11
      pro/src/cascade.c
  2. 1 1
      pro/src/common.h

+ 29 - 11
pro/src/cascade.c

@@ -21,7 +21,8 @@
 #define MB_MAX_LEN      250
 
 
-#define MB_MASTER       0
+#define MB_MASTER       1
+#define MB_DEBUG
 
 
 
@@ -120,6 +121,15 @@ static int slave_get_info(cascade_handle_t *cas)
     board_info_t *info=&cas->info;
 
     memset(info, 0, sizeof(board_info_t));
+
+#ifdef MB_DEBUG
+    for(i=1; i<MAX_CHN_COUNT; i++) {
+        info->board[info->cnt].addr   = i;
+        info->board[info->cnt].type   = 2;
+        info->board[info->cnt].maxChn = 5;
+        info->cnt++;
+    }
+#else
     for(i=1; i<MAX_CHN_COUNT; i++) {
         r = g_switch_get_type(&dm->_globalRelaySampManger, i, &type, &maxChn,
                                dm->_global_device_info->product_pwr_type);
@@ -130,6 +140,7 @@ static int slave_get_info(cascade_handle_t *cas)
             info->cnt++;
         }
     }
+#endif
 
     return 0;
 }
@@ -300,7 +311,7 @@ static int mb_hdr(uint8_t *data, int datalen, mb_hdr_t *h)
 }
 static int mb_read(cascade_handle_t *cas, int addr, data_t *d)
 {
-    int r=0;
+    int r=0,finish=0;
     int xlen,rlen=0,oncelen=MB_MAX_LEN;
     uint8_t buff[MODBUS_RTU_MAX_ADU_LENGTH];
 
@@ -325,7 +336,8 @@ static int mb_read(cascade_handle_t *cas, int addr, data_t *d)
             return -1;
         }
         if(rlen+r*2>=d->dlen) {
-            break;
+            xlen = d->dlen-rlen;
+            finish = 1;
         }
         else {
             xlen = r*2;
@@ -333,6 +345,10 @@ static int mb_read(cascade_handle_t *cas, int addr, data_t *d)
 
         memcpy((char*)d->data+rlen, buff, xlen);
         rlen += xlen;
+
+        if(finish) {
+            break;
+        }
     }
     
     return 0;
@@ -454,14 +470,7 @@ static int mb_receive(cascade_handle_t *cas)
                 case CASCADE_CMD_SAVE:
                 case CASCADE_CMD_SAVE3:
                 {
-                    //slave_save(cas);
-                }
-                break;
-
-                case CASCADE_CMD_GET_INFO:
-                {
-                    LOGD("_____ slave recv CASCADE_CMD_GET_INFO\n");
-                    memcpy(cas->map2->tab_registers+(h.reg-CASCADE_REG_OFFSET), ((char*)&cas->info)+sendlen, h.regcnt*2);
+                    slave_save(cas);
                 }
                 break;
             }
@@ -474,6 +483,14 @@ static int mb_receive(cascade_handle_t *cas)
             }
             else {
                 switch(cas->cmd.cmd) {
+
+                    case CASCADE_CMD_GET_INFO:
+                    {
+                        LOGD("_____ slave CASCADE_CMD_GET_INFO\n");
+                        memcpy(cas->map2->tab_registers+(h.reg-CASCADE_REG_OFFSET), (char*)&cas->info, h.regcnt*2);
+                    }
+                    break;
+
                     case CASCADE_CMD_QUERY_CH:
                     {
                         LOGD("___ slave CASCADE_CMD_QUERY_CH\n");
@@ -818,6 +835,7 @@ static int master_query(cascade_handle_t *cas)
                 rdata.dlen = sizeof(PowerInfo)*cas->info.cnt;
                 rdata.data = (uint8_t*)&cas->pwrInfo.info;
                 r = mb_write_read(cas, cur_dev_addr, &wdata, &rdata);
+                LOGD("____ master mb_write_read CASCADE_CMD_QUERY_CH %d\n", r);
                 if(r==0) {
                     power_ch_update(cas);
                 }

+ 1 - 1
pro/src/common.h

@@ -25,7 +25,7 @@
 #include <sys/shm.h>
 //#define RS485_TYPE
 
-#define MAX_CHN_COUNT       2//16
+#define MAX_CHN_COUNT       5//16
 #define MAX_RELAY_CHN       100
 
 //是否在OS环境下运行