소스 검색

修改 级联北向接收数据不准确的问题

liyi 1 년 전
부모
커밋
c7c37c8a82

+ 6 - 6
f407/applications/board.h

@@ -60,8 +60,8 @@ extern "C"
     #define BSP_UART1_TX_BUFSIZE        1024
 
     #define BSP_USING_UART2
-    #define BSP_UART2_TX_PIN            "PA2"
-    #define BSP_UART2_RX_PIN            "PA3"
+    #define BSP_UART2_TX_PIN            "PD5"
+    #define BSP_UART2_RX_PIN            "PD6"
     #define BSP_UART2_RX_BUFSIZE        1024
     #define BSP_UART2_TX_BUFSIZE        1024
     #define BSP_UART2_RX_USING_DMA
@@ -82,12 +82,12 @@ extern "C"
     #define BSP_UART1_TX_BUFSIZE        1024
 
     #define BSP_USING_UART2
-    #define BSP_UART2_TX_PIN            "PA2"
-    #define BSP_UART2_RX_PIN            "PA3"
+    #define BSP_UART2_TX_PIN            "PD5"
+    #define BSP_UART2_RX_PIN            "PD6"
     #define BSP_UART2_RX_BUFSIZE        1024
     #define BSP_UART2_TX_BUFSIZE        1024
-    //#define BSP_UART2_RX_USING_DMA
-    //#define BSP_UART2_TX_USING_DMA
+//    #define BSP_UART2_RX_USING_DMA
+//    #define BSP_UART2_TX_USING_DMA
     
     #define BSP_USING_UART3
     #define BSP_UART3_TX_PIN            "PB10"

+ 48 - 7
f407/applications/cascade.c

@@ -10,6 +10,7 @@
 #include "string.h"
 #include "power.h"
 #include "paras.h"
+#include "thread.h"
 
 
 typedef struct {
@@ -93,18 +94,20 @@ const mb_cb_table_t mb_table = {
 static cascade_handle_t slave_info = {0};
 static mb_cascade_fun_t func = {0};
 
-uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint8_t baud)
+uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint32_t baud)
 {	
 	list_cfg_t lc={0,LIST_FULL_FIFO,10};
 	mb_para_t para;
 	para.type = MB_TYPE_RTU;
 	para.para.rtu.dev = (char *)uart;
 	para.para.rtu.baudrate = baud;
-	para.para.rtu.parity = 2;
+	para.para.rtu.parity = 0;
 	para.para.rtu.pin = -1;
   para.para.rtu.lvl = 0;
 	paras_data_t* p_data = paras_get();
-	addr = p_data->cas.addr;
+	para.para.rtu.baudrate = p_data->cas.baud;
+
+	//addr = p_data->cas.addr;
 	if(addr == 0){
 		para.mode = MB_MODE_MASTER;
 	}else
@@ -112,6 +115,7 @@ uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint8_t baud)
 		para.mode = MB_MODE_SLAVE;
 		slave_info.saddr = addr;
 	}
+	slave_info.md_type = para.mode;
   slave_info.lock = lock_init();
 	slave_info.mb = mb_init(&para);
   if(!slave_info.mb) {
@@ -125,7 +129,18 @@ uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint8_t baud)
 		func.slave_func = slave_func;
 		mb_set_cb_cascade(handle->rtu.h,&func);
 	}
+	cascade_handle_t *cas=&slave_info;
+    //ModbusInfo_t *info=&cas->mInfo;
+    mb_handle_t *handle=(mb_handle_t *)(cas->mb);
+	handle->quit = 0;
+	
+	LOGD("uart: %s mode: %d addr: %d bound: %d\n",uart,slave_info.md_type,slave_info.saddr,para.para.rtu.baudrate);
 	//cas data
+	LOGD("scan thread!!!\n");
+	thread_start(THREAD_ID_CAS_SCAN,cascade_scan_thread,NULL);
+	sleep(1);
+	LOGD("cascade thread!!!\n");
+	thread_start(THREAD_ID_CAS_TH,cascade_thread,NULL);
 	
 	return 0;
 }
@@ -159,7 +174,7 @@ static uint8_t master_scan(cascade_handle_t *cas)
 
 
 
-void * cascade_scan_thread(void *arg)
+void cascade_scan_thread(void *arg)
 {
 	
 	while(1)
@@ -214,6 +229,31 @@ void * cascade_scan_thread(void *arg)
 					slave_info.data.ac_3.ac_3_all_pw[i].power = power.ttl.total[i].power *1000;
 					slave_info.data.ac_3.ac_3_all_pw[i].voltage = power.ttl.total[i].voltage *1000;
 				}
+				int cnt = power.chs > 64 ? 64 : power.chs;
+				for(int i = 0; i < cnt;i++)
+				{
+
+					//总体信息
+				}
+				for(int i = 0; i < cnt;i++)
+				{
+					for(int j = A_P; j <= C_P;j++)
+					{
+						slave_info.data.ac_3.ac_3_chn_p[i][j].p_consumer = power.pch[i].power[j].consump * 1000;
+						slave_info.data.ac_3.ac_3_chn_p[i][j].p_current = power.pch[i].power[j].current * 1000;
+						slave_info.data.ac_3.ac_3_chn_p[i][j].p_power = power.pch[i].power[j].power * 1000;
+						slave_info.data.ac_3.ac_3_chn_p[i][j].p_voltage = power.pch[i].power[j].voltage * 1000;
+						slave_info.data.ac_3.ac_3_chn_p[i][j].p_status = power.pch[i].power[j].status;		
+					}
+				}	
+				for(int i = 0; i < cnt;i++)
+				{
+					slave_info.data.ac_3.delay_open[i] = power.pch[i].info.start_delay;
+				}
+				for(int i = 0; i < cnt;i++)
+				{
+					slave_info.data.ac_3.delay_close[i] = power.pch[i].info.stop_delay;
+				}
 				
 			}
 		}
@@ -224,7 +264,7 @@ void * cascade_scan_thread(void *arg)
 	}
 }
 
-static void* cascade_thread(void *arg)
+void cascade_thread(void *arg)
 {
     int r;
     //thread_handle_t *h=(thread_handle_t*)arg;
@@ -237,7 +277,7 @@ static void* cascade_thread(void *arg)
             r = master_query(cas);
             sleep(1);
         }
-        else {                                  //从模式,等待主设备发起数据请�?
+        else {                                  //从模式,等待主设备发起数据请求
             //r = slave_receive(cas);
 					mb_slave_fsm(handle->rtu.h);
         }  
@@ -791,7 +831,7 @@ int mb_port_read_hold(u16 addr, u16 *preg)//读保持寄存器, 返回 : 0-成
 		if(AC_3_DEV_CHN_REG <= addr && addr <= AC_3_DRY_REG)
 		{
 			data = (uint16_t*)(&slave_info.data.ac_3);
-			uint32_t offset = addr - AC_DC_DEV_CHN_REG;
+			uint32_t offset = addr - AC_3_DEV_CHN_REG;
 			*preg = *(data+offset);
 			return 0;
 		}	
@@ -802,6 +842,7 @@ int mb_port_write_hold(u16 addr, u16 reg)//写保持寄存器, 返回 : 0-成功
 {
 	//board_all_t *board = get_control_board();
   power_data_t power = power_data_get();
+	
 	if(AC_DC_SET_DELAY_OPEN <= addr && addr <= AC_DC_ALL_SET_SWITCH_REG)
 	{
 		switch(addr)

+ 3 - 2
f407/applications/cascade.h

@@ -87,7 +87,8 @@ enum {
 
 
 
-uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint8_t baud);
+uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint32_t baud);
 uint8_t cascade_deinit();
-
+void cascade_scan_thread(void *arg);
+void cascade_thread(void *arg);
 #endif

+ 7 - 4
f407/applications/main.c

@@ -13,6 +13,7 @@
 #include "sys.h"
 #include "power.h"
 #include "cfg.h"
+#include "cascade.h"
 
 //https://embedded-rd.blog.csdn.net/article/details/109643188
 
@@ -111,12 +112,14 @@ static int sd_mount(void)
 
 static int user_init(void)
 {
-    ui_init();
+   // ui_init();
     sd_mount();
     
-    power_init();
-    web_init();
-    
+    //power_init();
+    //web_init();
+	
+	  LOGD("cascade thread!!!!!\n");
+    cascade_init(CASCADE_PORT,1,1,115200);
     return 0;
 }
 

+ 2 - 0
f407/applications/thread.c

@@ -11,6 +11,8 @@ static thread_attr_t thdAttrs[THREAD_ID_MAX]={
     {"mqtt",        NULL,           NULL,           2*KB,           20},
     {"mail",        NULL,           NULL,           2*KB,           20},
     {"ui",          NULL,           NULL,           2*KB,           20},
+		{"cascade_scan",          NULL,           NULL,           1*KB,      20},
+		{"cascade_thread",        NULL,           NULL,           2*KB,      20},
 };
 static thread_handle_t thdHandles[THREAD_ID_MAX]={0};
 static void* thread_fn(void *arg)

+ 2 - 0
f407/applications/thread.h

@@ -21,6 +21,8 @@ enum {
     THREAD_ID_MQTT,
     THREAD_ID_MAIL,
     THREAD_ID_UI,
+		THREAD_ID_CAS_SCAN,
+		THREAD_ID_CAS_TH,
     
     THREAD_ID_MAX
 };

+ 3 - 3
f407/drivers/drv/stm32f4xx_hal_msp.c

@@ -717,17 +717,17 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
     /* Peripheral clock enable */
     __HAL_RCC_USART2_CLK_ENABLE();
 
-    __HAL_RCC_GPIOA_CLK_ENABLE();
+    __HAL_RCC_GPIOD_CLK_ENABLE();
     /**USART2 GPIO Configuration
     PA2     ------> USART2_TX
     PA3     ------> USART2_RX
     */
-    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
+    GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
     GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
-    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
 
   /* USER CODE BEGIN USART2_MspInit 1 */