更新:
1、寄存器配置地址封装为宏定义; 2、额外编写的操作线圈寄存器数值的函数; 3、本地交互与上位机交互应当分开,目前进度:线圈寄存器上位机交互,主界面开关和照明控制完成;
This commit is contained in:
parent
6a6cd5eee2
commit
8c6c7c3618
|
@ -92,12 +92,13 @@ extern SIG_TRANSMISSION sig_trans; //通讯模式
|
||||||
//绝对值计算
|
//绝对值计算
|
||||||
#define MY_ABS(pa) ( ( (pa) >= 0 )?( (pa) ):( 0 - (pa) ) )
|
#define MY_ABS(pa) ( ( (pa) >= 0 )?( (pa) ):( 0 - (pa) ) )
|
||||||
|
|
||||||
|
#define MUX_TASK_PERIOD 50 //多通道输入输出任务周期
|
||||||
#define LVGL_TASK_PERIOD 5 //LVGL任务周期
|
#define LVGL_TASK_PERIOD 5 //LVGL任务周期
|
||||||
#define MENU_TASK_PERIOD 300 //显示内容设置周期
|
#define MENU_TASK_PERIOD 300 //显示内容设置周期
|
||||||
#define BLE_TASK_PERIOD 10 //蓝牙任务周期
|
#define BLE_TASK_PERIOD 100 //蓝牙任务周期
|
||||||
#define HART_TASK_PERIOD 10 //HART任务周期
|
#define HART_TASK_PERIOD 100 //HART任务周期
|
||||||
#define RS485_TASK_PERIOD 10 //485任务周期
|
#define RS485_TASK_PERIOD MUX_TASK_PERIOD //485任务周期
|
||||||
#define MUX_TASK_PERIOD 50 //多通道输入输出任务周期
|
|
||||||
|
|
||||||
//屏幕显示
|
//屏幕显示
|
||||||
void screen_run(void);
|
void screen_run(void);
|
||||||
|
|
|
@ -253,8 +253,8 @@ typedef struct
|
||||||
|
|
||||||
//ITEMS_0
|
//ITEMS_0
|
||||||
SIG_FUNCTIONS_TYPE item0_page0_vunit; //电压单位
|
SIG_FUNCTIONS_TYPE item0_page0_vunit; //电压单位
|
||||||
int16_t item0_page0_vup[2]; //电压上限
|
int16_t item0_page0_vup[2]; //电压上限, 0:V,1:mV
|
||||||
int16_t item0_page0_vlow[2]; //电压下限
|
int16_t item0_page0_vlow[2]; //电压下限, 0:V,1:mV
|
||||||
uint8_t item0_page0_cup; //电流上限
|
uint8_t item0_page0_cup; //电流上限
|
||||||
uint8_t item0_page0_clow; //电流下限
|
uint8_t item0_page0_clow; //电流下限
|
||||||
int16_t item0_page0_rup; //电阻上限
|
int16_t item0_page0_rup; //电阻上限
|
||||||
|
|
|
@ -846,6 +846,10 @@ void io_on2off_status(void)
|
||||||
{
|
{
|
||||||
lv_label_set_text(guider_ui.screen_main_label_ONOFF, "ON");
|
lv_label_set_text(guider_ui.screen_main_label_ONOFF, "ON");
|
||||||
|
|
||||||
|
//D0位置1
|
||||||
|
//CoilState[0] |= 0x01;
|
||||||
|
set_coil_val(COIL_ADDR_ON_OFF, 1);
|
||||||
|
|
||||||
switch (menu_data.io_mode)
|
switch (menu_data.io_mode)
|
||||||
{
|
{
|
||||||
case IO_OUTPUT:
|
case IO_OUTPUT:
|
||||||
|
@ -874,6 +878,10 @@ void io_on2off_status(void)
|
||||||
{
|
{
|
||||||
lv_label_set_text(guider_ui.screen_main_label_ONOFF, "OFF");
|
lv_label_set_text(guider_ui.screen_main_label_ONOFF, "OFF");
|
||||||
|
|
||||||
|
//D0位置0
|
||||||
|
//CoilState[0] &= 0xFE;
|
||||||
|
set_coil_val(COIL_ADDR_ON_OFF, 0);
|
||||||
|
|
||||||
switch (menu_data.io_mode)
|
switch (menu_data.io_mode)
|
||||||
{
|
{
|
||||||
case IO_OUTPUT:
|
case IO_OUTPUT:
|
||||||
|
@ -1103,6 +1111,43 @@ void set_working_mode(SIG_FUNCTIONS mode, SIG_FUNCTIONS_TYPE type)
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
|
//电流
|
||||||
|
case SIG_CURRENT:
|
||||||
|
{
|
||||||
|
switch (tabdata.item3_page0_language)
|
||||||
|
{
|
||||||
|
case MENU_SIMPLYFY_CHINESE:
|
||||||
|
{
|
||||||
|
lv_label_set_text(guider_ui.screen_main_label_Mode, "电流");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MENU_ENGLISH:
|
||||||
|
{
|
||||||
|
lv_label_set_text(guider_ui.screen_main_label_Mode, "Cur");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case CURRENT_MA:
|
||||||
|
{
|
||||||
|
lv_label_set_text(guider_ui.screen_main_label_unit, "mA");
|
||||||
|
|
||||||
|
up2down_update(tabdata.item0_page0_clow, tabdata.item0_page0_cup);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
//电压
|
//电压
|
||||||
case SIG_VOLTAGE:
|
case SIG_VOLTAGE:
|
||||||
{
|
{
|
||||||
|
@ -1149,43 +1194,6 @@ void set_working_mode(SIG_FUNCTIONS mode, SIG_FUNCTIONS_TYPE type)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//电流
|
|
||||||
case SIG_CURRENT:
|
|
||||||
{
|
|
||||||
switch (tabdata.item3_page0_language)
|
|
||||||
{
|
|
||||||
case MENU_SIMPLYFY_CHINESE:
|
|
||||||
{
|
|
||||||
lv_label_set_text(guider_ui.screen_main_label_Mode, "电流");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MENU_ENGLISH:
|
|
||||||
{
|
|
||||||
lv_label_set_text(guider_ui.screen_main_label_Mode, "Cur");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case CURRENT_MA:
|
|
||||||
{
|
|
||||||
lv_label_set_text(guider_ui.screen_main_label_unit, "mA");
|
|
||||||
|
|
||||||
up2down_update(tabdata.item0_page0_clow, tabdata.item0_page0_cup);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
//电阻
|
//电阻
|
||||||
case SIG_RESISTANT:
|
case SIG_RESISTANT:
|
||||||
{
|
{
|
||||||
|
|
|
@ -603,7 +603,6 @@ void scr_setting_run(void) //详细设置界面
|
||||||
|
|
||||||
//处理复位事件
|
//处理复位事件
|
||||||
deal_data_reset();
|
deal_data_reset();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//执行保存功能
|
//执行保存功能
|
||||||
|
@ -612,6 +611,10 @@ void deal_data_save(void)
|
||||||
{
|
{
|
||||||
if(tabdata.item3_page0_saveflag == 1)
|
if(tabdata.item3_page0_saveflag == 1)
|
||||||
{
|
{
|
||||||
|
//D2位置1
|
||||||
|
//CoilState[0] |= 0x04;
|
||||||
|
set_coil_val(COIL_ADDR_CONFIG_SAVE, 1);
|
||||||
|
|
||||||
if(save_step == 0)
|
if(save_step == 0)
|
||||||
{
|
{
|
||||||
save_step = 1;
|
save_step = 1;
|
||||||
|
@ -648,7 +651,12 @@ void deal_data_save(void)
|
||||||
save_step = 0;
|
save_step = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//D2位置0
|
||||||
|
//CoilState[0] &= 0xFB;
|
||||||
|
set_coil_val(COIL_ADDR_CONFIG_SAVE, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -658,6 +666,10 @@ void deal_data_reset(void)
|
||||||
{
|
{
|
||||||
if(tabdata.item3_page0_resetflag == 1)
|
if(tabdata.item3_page0_resetflag == 1)
|
||||||
{
|
{
|
||||||
|
//D3位置1
|
||||||
|
//CoilState[0] |= 0x08;
|
||||||
|
set_coil_val(COIL_ADDR_CONFIG_RESET, 1);
|
||||||
|
|
||||||
if(reset_step == 0)
|
if(reset_step == 0)
|
||||||
{
|
{
|
||||||
reset_step = 1;
|
reset_step = 1;
|
||||||
|
@ -697,6 +709,12 @@ void deal_data_reset(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//D3位置0
|
||||||
|
//CoilState[0] &= 0xF7;
|
||||||
|
set_coil_val(COIL_ADDR_CONFIG_RESET, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -157,7 +157,7 @@ void screen_run(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//播放过开机动画之后,跳转至主界面
|
//播放过开机动画之后,跳转至指定界面
|
||||||
switch (menu_data.scr_now)
|
switch (menu_data.scr_now)
|
||||||
{
|
{
|
||||||
case SCREEN_MAIN:
|
case SCREEN_MAIN:
|
||||||
|
@ -202,6 +202,12 @@ void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
case CURRENT_MA:
|
||||||
|
{
|
||||||
|
mux_signal.channel = CH8_IN_CUR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case VOLTAGE_MV:
|
case VOLTAGE_MV:
|
||||||
{
|
{
|
||||||
mux_signal.channel = CH7_IN_MVOL;
|
mux_signal.channel = CH7_IN_MVOL;
|
||||||
|
@ -214,12 +220,6 @@ void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CURRENT_MA:
|
|
||||||
{
|
|
||||||
mux_signal.channel = CH8_IN_CUR;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RESISTANT_OHM:
|
case RESISTANT_OHM:
|
||||||
{
|
{
|
||||||
//与热电阻一致
|
//与热电阻一致
|
||||||
|
@ -297,6 +297,12 @@ void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
case CURRENT_MA:
|
||||||
|
{
|
||||||
|
mux_signal.channel = CH2_OUT_CUR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case VOLTAGE_MV:
|
case VOLTAGE_MV:
|
||||||
{
|
{
|
||||||
mux_signal.channel = CH1_OUT_VOL_MV;
|
mux_signal.channel = CH1_OUT_VOL_MV;
|
||||||
|
@ -309,12 +315,6 @@ void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CURRENT_MA:
|
|
||||||
{
|
|
||||||
mux_signal.channel = CH2_OUT_CUR;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RESISTANT_OHM:
|
case RESISTANT_OHM:
|
||||||
{
|
{
|
||||||
mux_signal.channel = CH4_OUT_RES;
|
mux_signal.channel = CH4_OUT_RES;
|
||||||
|
|
|
@ -342,11 +342,19 @@ void set_item3_value(ITEM_CONTENTS con, int8_t step)
|
||||||
{
|
{
|
||||||
tabdata.item3_page0_lightflag = 0;
|
tabdata.item3_page0_lightflag = 0;
|
||||||
LIGHT_OFF;
|
LIGHT_OFF;
|
||||||
|
|
||||||
|
//D1位置0
|
||||||
|
//CoilState[0] &= 0xFD;
|
||||||
|
set_coil_val(COIL_ADDR_LIGHT, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tabdata.item3_page0_lightflag = 1;
|
tabdata.item3_page0_lightflag = 1;
|
||||||
LIGHT_ON;
|
LIGHT_ON;
|
||||||
|
|
||||||
|
//D1位置1
|
||||||
|
CoilState[0] |= 0x02;
|
||||||
|
set_coil_val(COIL_ADDR_LIGHT, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -3,6 +3,34 @@
|
||||||
|
|
||||||
#include "apps_gather.h"
|
#include "apps_gather.h"
|
||||||
|
|
||||||
|
//自定义线圈寄存器地址
|
||||||
|
#define COIL_ADDR_ON_OFF 0x00
|
||||||
|
#define COIL_ADDR_LIGHT 0x01
|
||||||
|
#define COIL_ADDR_CONFIG_SAVE 0x02
|
||||||
|
#define COIL_ADDR_CONFIG_RESET 0x03
|
||||||
|
|
||||||
|
//自定义离散状态寄存器地址
|
||||||
|
|
||||||
|
//自定义保持寄存器地址
|
||||||
|
#define HOLD_ADDR_SET_WORK_MODE 0x00
|
||||||
|
#define HOLD_ADDR_MUX_PV_L 0x01
|
||||||
|
#define HOLD_ADDR_MUX_PV_H 0x02
|
||||||
|
#define HOLD_ADDR_PHY_UNIT 0x03
|
||||||
|
#define HOLD_ADDR_PHY_UP 0x04
|
||||||
|
#define HOLD_ADDR_PHY_LOW 0x05
|
||||||
|
#define HOLD_ADDR_SAMPLE_INTERVAL 0x06
|
||||||
|
#define HOLD_ADDR_PLOT_COUNTS 0x07
|
||||||
|
#define HOLD_ADDR_INPUT_COLOR 0x08
|
||||||
|
#define HOLD_ADDR_OUTPUT_COLOR 0x09
|
||||||
|
#define HOLD_ADDR_LANGUAGE 0x0A
|
||||||
|
|
||||||
|
//自定义输入寄存器地址
|
||||||
|
#define INPUT_ADDR_BATTERY 0x00
|
||||||
|
#define INPUT_ADDR_RUNTIME_SECOND 0x01
|
||||||
|
#define INPUT_ADDR_RUNTIME_HOUR 0x02
|
||||||
|
#define INPUT_ADDR_MUX_SV_L 0x03
|
||||||
|
#define INPUT_ADDR_MUX_SV_H 0x04
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TRANSPARENT_WAIT = 0,
|
TRANSPARENT_WAIT = 0,
|
||||||
|
@ -43,4 +71,25 @@ void trans_start_capture(void);
|
||||||
|
|
||||||
uint8_t trans_enable_check(st_scom *scom);
|
uint8_t trans_enable_check(st_scom *scom);
|
||||||
|
|
||||||
|
//处理modbus寄存器值的更新与写入
|
||||||
|
void modbus_registers_update(void);
|
||||||
|
|
||||||
|
//线圈寄存器,读写
|
||||||
|
void modbus_reg_update_coil(void);
|
||||||
|
|
||||||
|
//离散输入寄存器,上位机只读
|
||||||
|
void modbus_reg_update_dis(void);
|
||||||
|
|
||||||
|
//保持寄存器,读写
|
||||||
|
void modbus_reg_update_hold(void);
|
||||||
|
|
||||||
|
//输入寄存器,上位机只读
|
||||||
|
void modbus_reg_update_input(void);
|
||||||
|
|
||||||
|
//设置线圈寄存器,输入参数:地址、标志位
|
||||||
|
void set_coil_val(uint8_t addr, uint8_t bit_val);
|
||||||
|
|
||||||
|
//获取线圈值,应对上位机修改线圈的情况
|
||||||
|
uint8_t get_coil_val(uint8_t addr);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -15,19 +15,19 @@
|
||||||
#define WriteMultiReg 0x10 //写多个保持寄存器
|
#define WriteMultiReg 0x10 //写多个保持寄存器
|
||||||
|
|
||||||
#define COIL_ADD_MIN 0x00
|
#define COIL_ADD_MIN 0x00
|
||||||
#define COIL_ADD_MAX 0x64
|
#define COIL_ADD_MAX 0x0F
|
||||||
#define MAX_COIL_NUM ((COIL_ADD_MAX) - (COIL_ADD_MIN) + 1)
|
#define MAX_COIL_NUM ((COIL_ADD_MAX) - (COIL_ADD_MIN) + 1)
|
||||||
|
|
||||||
#define DIS_ADD_MIN 0x00
|
#define DIS_ADD_MIN 0x00
|
||||||
#define DIS_ADD_MAX 0x64
|
#define DIS_ADD_MAX 0x0F
|
||||||
#define MAX_DIS_NUM ((DIS_ADD_MAX) - (DIS_ADD_MIN) + 1)
|
#define MAX_DIS_NUM ((DIS_ADD_MAX) - (DIS_ADD_MIN) + 1)
|
||||||
|
|
||||||
#define INPUT_REG_ADD_MIN 0x00
|
#define INPUT_REG_ADD_MIN 0x00
|
||||||
#define INPUT_REG_ADD_MAX 0x64
|
#define INPUT_REG_ADD_MAX 0x0F
|
||||||
#define MAX_INPUT_REG_NUM ((INPUT_REG_ADD_MAX) - (INPUT_REG_ADD_MIN) + 1)
|
#define MAX_INPUT_REG_NUM ((INPUT_REG_ADD_MAX) - (INPUT_REG_ADD_MIN) + 1)
|
||||||
|
|
||||||
#define HOLD_REG_ADD_MIN 0x00
|
#define HOLD_REG_ADD_MIN 0x00
|
||||||
#define HOLD_REG_ADD_MAX 0x64
|
#define HOLD_REG_ADD_MAX 0x0F
|
||||||
#define MAX_HOLD_REG_NUM ((HOLD_REG_ADD_MAX) - (HOLD_REG_ADD_MIN) + 1)
|
#define MAX_HOLD_REG_NUM ((HOLD_REG_ADD_MAX) - (HOLD_REG_ADD_MIN) + 1)
|
||||||
|
|
||||||
#define BROADCAST_ADDRESS 0x00
|
#define BROADCAST_ADDRESS 0x00
|
||||||
|
|
|
@ -392,3 +392,114 @@ uint8_t trans_enable_check(st_scom *scom)
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//处理modbus寄存器值的更新与写入
|
||||||
|
void modbus_registers_update(void)
|
||||||
|
{
|
||||||
|
//线圈寄存器
|
||||||
|
modbus_reg_update_coil();
|
||||||
|
|
||||||
|
//离散状态寄存器
|
||||||
|
modbus_reg_update_dis();
|
||||||
|
|
||||||
|
//保持寄存器
|
||||||
|
modbus_reg_update_hold();
|
||||||
|
|
||||||
|
//输入寄存器
|
||||||
|
modbus_reg_update_input();
|
||||||
|
}
|
||||||
|
|
||||||
|
//线圈寄存器,读写
|
||||||
|
void modbus_reg_update_coil(void)
|
||||||
|
{
|
||||||
|
if( get_coil_val(COIL_ADDR_ON_OFF) != menu_data.io_on2off )
|
||||||
|
{
|
||||||
|
//进入此处说明线圈寄存器的值被上位机修改
|
||||||
|
|
||||||
|
if( menu_data.scr_now == SCREEN_MAIN )
|
||||||
|
{
|
||||||
|
//只有在主界面时,修改内容才生效
|
||||||
|
menu_data.io_on2off = get_coil_val(COIL_ADDR_ON_OFF);
|
||||||
|
io_on2off_status();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//拒绝修改内容
|
||||||
|
set_coil_val(COIL_ADDR_ON_OFF, menu_data.io_on2off);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( get_coil_val(COIL_ADDR_LIGHT) != tabdata.item3_page0_lightflag )
|
||||||
|
{
|
||||||
|
//进入此处说明线圈寄存器的值被上位机修改
|
||||||
|
|
||||||
|
tabdata.item3_page0_lightflag = get_coil_val(COIL_ADDR_LIGHT);
|
||||||
|
|
||||||
|
if(tabdata.item3_page0_lightflag)
|
||||||
|
{
|
||||||
|
LIGHT_ON;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LIGHT_OFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//离散输入寄存器,上位机只读
|
||||||
|
void modbus_reg_update_dis(void)
|
||||||
|
{}
|
||||||
|
|
||||||
|
//保持寄存器,读写
|
||||||
|
void modbus_reg_update_hold(void)
|
||||||
|
{}
|
||||||
|
|
||||||
|
//输入寄存器,上位机只读
|
||||||
|
void modbus_reg_update_input(void)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void set_coil_val(uint8_t addr, uint8_t bit_val)
|
||||||
|
{
|
||||||
|
if( (addr < COIL_ADD_MIN)||(addr > COIL_ADD_MAX)||(bit_val > 1) ) return;
|
||||||
|
|
||||||
|
addr -= COIL_ADD_MIN;
|
||||||
|
uint8_t pcoil = addr / 8; //数组的第几个元素, 0-7
|
||||||
|
uint8_t pbit = addr % 8; //元素的第几位, 0-7
|
||||||
|
uint8_t fac = 0; //辅助计算的因子
|
||||||
|
|
||||||
|
switch (bit_val)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
fac = ~(1 << pbit);
|
||||||
|
CoilState[pcoil] &= fac;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
fac = 1 << pbit;
|
||||||
|
CoilState[pcoil] |= fac;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t get_coil_val(uint8_t addr)
|
||||||
|
{
|
||||||
|
uint8_t result = 0;
|
||||||
|
if( (addr < COIL_ADD_MIN)||(addr > COIL_ADD_MAX) ) return;
|
||||||
|
|
||||||
|
addr -= COIL_ADD_MIN;
|
||||||
|
uint8_t pcoil = addr / 8; //数组的第几个元素, 0-7
|
||||||
|
uint8_t pbit = addr % 8; //元素的第几位, 0-7
|
||||||
|
|
||||||
|
result = 0x01 & (CoilState[pcoil] >> pbit);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -55,8 +55,10 @@ void fun_get_freq(st_freq_signal *freq_signal, float *data_pv)
|
||||||
{
|
{
|
||||||
freq_signal->capture_cnt = 0;
|
freq_signal->capture_cnt = 0;
|
||||||
__HAL_TIM_SET_COUNTER(&htim3, 0);
|
__HAL_TIM_SET_COUNTER(&htim3, 0);
|
||||||
freq_signal->duty_time = freq_signal->capture_buf[1] + freq_signal->over_cnt * 60000 - freq_signal->capture_buf[0];
|
// freq_signal->duty_time = freq_signal->capture_buf[1] + freq_signal->over_cnt * 60000 - freq_signal->capture_buf[0];
|
||||||
freq_signal->freq = 1000000 / freq_signal->duty_time;
|
// freq_signal->freq = 1000000 / freq_signal->duty_time;
|
||||||
|
freq_signal->duty_time = freq_signal->capture_buf[1] + freq_signal->over_cnt * 65535 - freq_signal->capture_buf[0];
|
||||||
|
freq_signal->freq = 82944000 / freq_signal->duty_time;
|
||||||
*data_pv = freq_signal->freq;
|
*data_pv = freq_signal->freq;
|
||||||
freq_signal->over_cnt = 0;
|
freq_signal->over_cnt = 0;
|
||||||
}
|
}
|
||||||
|
@ -140,14 +142,17 @@ void mux_signal_switch(st_mux_signal *mux_signal)
|
||||||
dac_set_voltage(&mux_signal->data_sv);
|
dac_set_voltage(&mux_signal->data_sv);
|
||||||
fun_proc_adc1_dma(&mux_signal->data_pv);
|
fun_proc_adc1_dma(&mux_signal->data_pv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH1_OUT_VOL_MV:
|
case CH1_OUT_VOL_MV:
|
||||||
dac8552_operation(NULL, &mux_signal->data_sv);
|
dac8552_operation(NULL, &mux_signal->data_sv);
|
||||||
fun_get_sig16132_ch(4, &mux_signal->data_pv);
|
fun_get_sig16132_ch(4, &mux_signal->data_pv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH2_OUT_CUR:
|
case CH2_OUT_CUR:
|
||||||
dac8552_operation(&mux_signal->data_sv, NULL);
|
dac8552_operation(&mux_signal->data_sv, NULL);
|
||||||
fun_get_sig16132_ch(7, &mux_signal->data_pv);
|
fun_get_sig16132_ch(7, &mux_signal->data_pv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH3_OUT_FRE:
|
case CH3_OUT_FRE:
|
||||||
{
|
{
|
||||||
if(tabdata.hart_enable == 0)
|
if(tabdata.hart_enable == 0)
|
||||||
|
@ -158,31 +163,38 @@ void mux_signal_switch(st_mux_signal *mux_signal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH4_OUT_RES:
|
case CH4_OUT_RES:
|
||||||
fun_dac7811_operate(&mux_signal->data_sv);
|
fun_dac7811_operate(&mux_signal->data_sv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH5_EMPTY:
|
case CH5_EMPTY:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH6_IN_VOL:
|
case CH6_IN_VOL:
|
||||||
fun_get_sig16132_ch(2, &mux_signal->data_pv);
|
fun_get_sig16132_ch(2, &mux_signal->data_pv);
|
||||||
// fun_rn7302_operate(CH0_IN_VOL, &mux_signal->data_pv);
|
// fun_rn7302_operate(CH0_IN_VOL, &mux_signal->data_pv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH7_IN_MVOL:
|
case CH7_IN_MVOL:
|
||||||
fun_get_sig16132_ch(3, &mux_signal->data_pv);
|
fun_get_sig16132_ch(3, &mux_signal->data_pv);
|
||||||
// fun_rn7302_operate(CH0_IN_VOL, &mux_signal->data_pv);
|
// fun_rn7302_operate(CH0_IN_VOL, &mux_signal->data_pv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH8_IN_CUR:
|
case CH8_IN_CUR:
|
||||||
fun_get_sig16132_ch(5, &mux_signal->data_pv);
|
fun_get_sig16132_ch(5, &mux_signal->data_pv);
|
||||||
// fun_rn7302_operate(CH1_IN_CUR, &mux_signal->data_pv);
|
// fun_rn7302_operate(CH1_IN_CUR, &mux_signal->data_pv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH9_IN_FRE:
|
case CH9_IN_FRE:
|
||||||
fun_get_freq(&freq_signal, &mux_signal->data_pv);
|
fun_get_freq(&freq_signal, &mux_signal->data_pv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH10_IN_RTD:
|
case CH10_IN_RTD:
|
||||||
fun_get_sig16132_ch(CH10_IN_RTD, &mux_signal->data_pv);
|
fun_get_sig16132_ch(CH10_IN_RTD, &mux_signal->data_pv);
|
||||||
// fun_rn7302_operate(CH3_IN_RTD, &mux_signal->data_pv);
|
// fun_rn7302_operate(CH3_IN_RTD, &mux_signal->data_pv);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CH11_IN_TC:
|
case CH11_IN_TC:
|
||||||
ads1220_operation(CH11_IN_TC, &mux_signal->data_pv);
|
ads1220_operation(CH11_IN_TC, &mux_signal->data_pv);
|
||||||
// fun_rn7302_operate(CH3_IN_RTD, &mux_signal->data_pv);
|
// fun_rn7302_operate(CH3_IN_RTD, &mux_signal->data_pv);
|
||||||
|
|
|
@ -212,6 +212,7 @@ void start_task_hart(void const * argument)
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
//该任务用于设置HART芯片所需频率、驱动验证
|
||||||
if(tabdata.hart_enable == 1)
|
if(tabdata.hart_enable == 1)
|
||||||
{
|
{
|
||||||
if(fre_set != 460800)
|
if(fre_set != 460800)
|
||||||
|
@ -259,6 +260,7 @@ void start_task_ble(void const * argument)
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
//该任务用于蓝牙设备初始化、驱动验证
|
||||||
if( ble_init() == 1 )
|
if( ble_init() == 1 )
|
||||||
{
|
{
|
||||||
if(tabdata.bluetooth_enable == 1)
|
if(tabdata.bluetooth_enable == 1)
|
||||||
|
@ -293,11 +295,16 @@ void start_rs485(void const * argument)
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
//该任务用于处理寄存器的数值的读写、当前通讯状态的更新
|
||||||
|
|
||||||
if( !(tabdata.bluetooth_enable||tabdata.hart_enable||tabdata.modbus_enable) )
|
if( !(tabdata.bluetooth_enable||tabdata.hart_enable||tabdata.modbus_enable) )
|
||||||
{
|
{
|
||||||
sig_trans = TRANS_NONE;
|
sig_trans = TRANS_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//更新modbus的寄存器值
|
||||||
|
modbus_registers_update();
|
||||||
|
|
||||||
osDelay(RS485_TASK_PERIOD);
|
osDelay(RS485_TASK_PERIOD);
|
||||||
}
|
}
|
||||||
/* USER CODE END start_rs485 */
|
/* USER CODE END start_rs485 */
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue