Bladeren bron

编译通过,准备调试

guohui 2 jaren geleden
bovenliggende
commit
578a6819bd
4 gewijzigde bestanden met toevoegingen van 41 en 36 verwijderingen
  1. 3 1
      pro/.vscode/settings.json
  2. 1 3
      pro/src/app.c
  3. 36 31
      pro/src/cascade.c
  4. 1 1
      pro/src/cascade.h

+ 3 - 1
pro/.vscode/settings.json

@@ -36,7 +36,9 @@
         "pdumib_scalar.h": "c",
         "elog.h": "c",
         "language_hashmap.h": "c",
-        "paras.h": "c"
+        "paras.h": "c",
+        "cascade.h": "c",
+        "cascade_master.h": "c"
     },
     "C_Cpp.errorSquiggles": "disabled"
 }

+ 1 - 3
pro/src/app.c

@@ -846,7 +846,7 @@ void* shm_thread(void *arg)
         fd = shm_open("/smartPDU_shm", O_RDWR, 0666);
         if (fd < 0)
         {
-            printf("error open shm object\n");
+            //printf("error open shm object\n");
             sleep(5); // 延时5秒后再次创建
             continue;
         }
@@ -1925,8 +1925,6 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     sys_start_thread(THREAD_ID_NTP, ntp_thread, NULL);
 #endif
     sys_start_thread(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager);
-
-    //cascade_init();
     
     //初始化webapp
     websocket_init();

+ 36 - 31
pro/src/cascade.c

@@ -17,7 +17,7 @@
 #define LOGW            printf
 #endif
 
-#define CASCADE_MAX     32
+#define CASCADE_MAX     10//32
 #define MB_MAX_LEN      250
 
 
@@ -34,10 +34,13 @@ typedef struct {
     slave_t             slaves[CASCADE_MAX+1];
 
     modbus_mapping_t    *map;
+    modbus_mapping_t    *map2;
 
     cmd_data_t          cmd;
     int                 scanAddr;
     uint16_t            scanReg;
+
+    board_info_t        info;
 }cascade_handle_t;
 
 int cur_dev_addr=1;
@@ -105,7 +108,7 @@ static int slave_find(cascade_handle_t *cas, int addr)
     return 0;
 }
 
-static int get_info(int addr, board_info_t *info)
+static int slave_get_info(board_info_t *info)
 {
     int i,r;
     uint8_t type,maxChn;
@@ -113,7 +116,7 @@ static int get_info(int addr, board_info_t *info)
 
     memset(info, 0, sizeof(board_info_t));
     for(i=1; i<MAX_CHN_COUNT; i++) {
-        r = g_switch_get_type(&dm->_globalRelaySampManger, addr, &type, &maxChn,
+        r = g_switch_get_type(&dm->_globalRelaySampManger, i, &type, &maxChn,
                                dm->_global_device_info->product_pwr_type);
         if(r==0) {
             info->board[info->cnt].addr   = i;
@@ -133,6 +136,8 @@ static int mb_init(cascade_handle_t *cas, char *path, int type, int addr, uint32
     if(r==0 && addr>0) {
         g_modbus_set_slave(&cas->m, addr);
         cas->inited = 1;
+
+        slave_get_info(&cas->info);
     }
     else {
         LOGE("___ mb init failed, %s\n", modbus_strerror(errno));
@@ -338,33 +343,40 @@ static int mb_receive(cascade_handle_t *cas)
         
             switch(cas->cmd.cmd) {
                 case CASCADE_CMD_OPEN:
-                {
-
-                }
-                break;
-
                 case CASCADE_CMD_CLOSE:
                 {
+                    int i,t=0;
+                    char buff[80];
+                    board_info_t *info=&cas->info;
+                    for(i=0; i<info->cnt; i++) {
+                        if(info->board[i].addr>0) {
+                            t = g_switch_set_all_ctrl(&get_dm()->_globalRelaySampManger, info->board[i].type, info->board[i].addr, (cas->cmd.cmd==CASCADE_CMD_OPEN)?1:0);
+                            if(t) {
+                                LOGE("___ %d %s failed\n", info->board[i].addr, (cas->cmd.cmd==CASCADE_CMD_OPEN)?"open":"close");
+                            }
+                        }
+                    }
 
+                    if(cas->cmd.cmd==CASCADE_CMD_OPEN) {
+                        sprintf(buff,"$开启$|$所有$|$通道$");
+                    }
+                    else {
+                        sprintf(buff,"$关闭$|$所有$|$通道$");
+                    }
+                    dev_insert_alarm_ctrl(get_dm()->db,get_dm()->_global_device_info->product_id,3,buff);
                 }
                 break;
 
                 case CASCADE_CMD_SAVE:
-                {
-
-                }
-                break;
-
                 case CASCADE_CMD_SAVE3:
                 {
 
                 }
                 break;
 
-                case CASCADE_CMD_INFO:
+                case CASCADE_CMD_GET_INFO:
                 {
-                    get_info(cur_dev_addr, &info);
-                    memcpy(cas->map->tab_registers+h.reg, ((char*)&info)+sendlen, h.regcnt*2);
+                    memcpy(cas->map->tab_registers+h.reg, ((char*)&cas->info)+sendlen, h.regcnt*2);
                 }
                 break;
             }
@@ -503,7 +515,7 @@ static void power_init(void)
     
     INIT_LIST_HEAD(&dm2->_globalPowerManger.list);
 }
-static int power_list_add(int addr, int chId)
+static int power_add(int addr, int chId)
 {
     int nGroups=18;
     GlobalDeviceManager *dm2=get_dm2();
@@ -631,37 +643,30 @@ static int master_request(cascade_handle_t *cas)
     GlobalDeviceInfo    *dev=&dm2->_global_device_info;
     cmd_data_t *cmd=&cas->cmd;
     data_t rdata,wdata;
-    
 
     if(cur_dev_addr==0) {
         return -1;
     }
 
-
     switch(cmd->cmd) {
         case CASCADE_CMD_OPEN:
         case CASCADE_CMD_CLOSE:
-        {
-            for(i=0; i<cmd->info.cnt; i++) {
-                if(cmd->info.board[i].addr>0) {
-                    g_switch_set_all_ctrl(&cas->m, cmd->info.board[i].type, cmd->info.board[i].addr, (cmd->cmd==CASCADE_CMD_OPEN)?1:0);
-                }
-            }
-        }
-        break;
-
         case CASCADE_CMD_SAVE:
         case CASCADE_CMD_SAVE3:
         {
-            //mb_write(&cas->m, cur_dev_addr, cmd->reg, NULL, 0);
+            wdata.dlen = sizeof(*cmd);
+            wdata.data = (uint8_t*)cmd;
+            r = mb_write(&cas->m, cur_dev_addr, &wdata);
         }
         break;
 
-        case CASCADE_CMD_INFO:
+        case CASCADE_CMD_GET_INFO:
         {
             wdata.dlen = sizeof(*cmd);
             wdata.data = (uint8_t*)cmd;
 
+            rdata.dlen = sizeof(cas->info);
+            rdata.data = (uint8_t*)&cas->info;
             r = mb_write_read(cas, cur_dev_addr, &wdata, &rdata);
         }
         break;
@@ -924,7 +929,7 @@ int cascade_init(void)
     slave_add(cas, 0);
 
     sys_start_thread(THREAD_ID_CASCADE, cascade_thread, cas);
-    //sys_start_thread(THREAD_ID_SCAN, scan_thread, cas);
+    sys_start_thread(THREAD_ID_SCAN, scan_thread, cas);
         
     return 0;
 }

+ 1 - 1
pro/src/cascade.h

@@ -21,7 +21,7 @@ enum {
     CASCADE_CMD_CLOSE,
     CASCADE_CMD_SAVE,
     CASCADE_CMD_SAVE3,
-    CASCADE_CMD_INFO,
+    CASCADE_CMD_GET_INFO,
 
     CASCADE_CMD_QUERY_CH,
     CASCADE_CMD_QUERY_VOL,