parent
abfadcaae2
commit
8e06ceee17
|
@ -7,6 +7,11 @@
|
||||||
|
|
||||||
#define LIGHT_OFF HAL_GPIO_WritePin(light_GPIO_Port, light_Pin, GPIO_PIN_RESET)
|
#define LIGHT_OFF HAL_GPIO_WritePin(light_GPIO_Port, light_Pin, GPIO_PIN_RESET)
|
||||||
|
|
||||||
|
#define SAMPLE_INTERVAL_MAX 10000
|
||||||
|
|
||||||
|
#define PLOT_NUM_MIN 3
|
||||||
|
#define PLOT_NUM_MAX 20
|
||||||
|
|
||||||
//查看输入输出记录,io -> 输入/输出,page -> 指定页码
|
//查看输入输出记录,io -> 输入/输出,page -> 指定页码
|
||||||
void show_IO_log(uint8_t io, uint8_t page);
|
void show_IO_log(uint8_t io, uint8_t page);
|
||||||
|
|
||||||
|
|
|
@ -298,6 +298,9 @@ void runtime_show(void)
|
||||||
menu_data.runtime_hours = 0;
|
menu_data.runtime_hours = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InputReg[INPUT_ADDR_RUNTIME_SECOND] = 0x00FF & menu_data.runtime_seconds;
|
||||||
|
InputReg[INPUT_ADDR_RUNTIME_HOUR] = 0x00FF & menu_data.runtime_hours;
|
||||||
|
|
||||||
// 00:00:00,该字符串的长度大于8,因此runtime_show应该分配大于8的内存
|
// 00:00:00,该字符串的长度大于8,因此runtime_show应该分配大于8的内存
|
||||||
sprintf(menu_data.runtime_show, "%02d:%02d:%02d",menu_data.runtime_hours, menu_data.runtime_minutes, menu_data.runtime_seconds);
|
sprintf(menu_data.runtime_show, "%02d:%02d:%02d",menu_data.runtime_hours, menu_data.runtime_minutes, menu_data.runtime_seconds);
|
||||||
lv_span_set_text(guider_ui.screen_main_spangroup_time_span, menu_data.runtime_show);
|
lv_span_set_text(guider_ui.screen_main_spangroup_time_span, menu_data.runtime_show);
|
||||||
|
@ -339,37 +342,40 @@ void battery_show(void)
|
||||||
//正在充电,并且充电尚未结束时,循环播放动画
|
//正在充电,并且充电尚未结束时,循环播放动画
|
||||||
menu_data.battery_cnt = (menu_data.battery_cnt >= 5)?(0):(menu_data.battery_cnt + 1);
|
menu_data.battery_cnt = (menu_data.battery_cnt >= 5)?(0):(menu_data.battery_cnt + 1);
|
||||||
lv_img_set_src(guider_ui.screen_main_animimg_battery, screen_main_animimg_battery_imgs[menu_data.battery_cnt]);
|
lv_img_set_src(guider_ui.screen_main_animimg_battery, screen_main_animimg_battery_imgs[menu_data.battery_cnt]);
|
||||||
|
|
||||||
|
InputReg[INPUT_ADDR_BATTERY] = BAT_CAP_CHARGING;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//充电停止时,根据剩余电量显示对应帧
|
//充电停止时,根据剩余电量显示对应帧
|
||||||
|
InputReg[INPUT_ADDR_BATTERY] = 0x00FF & bat_cpa;
|
||||||
switch (bat_cpa)
|
switch (bat_cpa)
|
||||||
{
|
{
|
||||||
case 0:
|
case BAT_CAP_3:
|
||||||
{
|
{
|
||||||
menu_data.battery_cnt = 1;
|
menu_data.battery_cnt = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case BAT_CAP_3_25:
|
||||||
{
|
{
|
||||||
menu_data.battery_cnt = 2;
|
menu_data.battery_cnt = 2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case BAT_CAP_25_50:
|
||||||
{
|
{
|
||||||
menu_data.battery_cnt = 3;
|
menu_data.battery_cnt = 3;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case BAT_CAP_50_75:
|
||||||
{
|
{
|
||||||
menu_data.battery_cnt = 4;
|
menu_data.battery_cnt = 4;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 15:
|
case BAT_CAP_75:
|
||||||
{
|
{
|
||||||
menu_data.battery_cnt = 5;
|
menu_data.battery_cnt = 5;
|
||||||
}
|
}
|
||||||
|
@ -381,7 +387,6 @@ void battery_show(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lv_img_set_src(guider_ui.screen_main_animimg_battery, screen_main_animimg_battery_imgs[menu_data.battery_cnt]);
|
lv_img_set_src(guider_ui.screen_main_animimg_battery, screen_main_animimg_battery_imgs[menu_data.battery_cnt]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -784,17 +789,8 @@ void input_value_show(void)
|
||||||
|
|
||||||
//获取输入值
|
//获取输入值
|
||||||
pltdata.yreal_scd_value = mux2real(mux_signal.data_pv);
|
pltdata.yreal_scd_value = mux2real(mux_signal.data_pv);
|
||||||
|
memcpy(InputReg + INPUT_ADDR_MUX_PV_L, &pltdata.yreal_scd_value, 2);
|
||||||
// if( MY_ABS(pltdata.yreal_scd_value - pltdata.yreal_scd_value_prv) < (float32)0.01)
|
memcpy(InputReg + INPUT_ADDR_MUX_PV_H, &pltdata.yreal_scd_value + 16, 2);
|
||||||
// {
|
|
||||||
// //变化值过小的情况下不更新显示内容
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// //记录前一时刻的值,用于计算变化量
|
|
||||||
// pltdata.yreal_scd_value_prv = pltdata.yreal_scd_value;
|
|
||||||
// }
|
|
||||||
|
|
||||||
int32_t pvi = 0;
|
int32_t pvi = 0;
|
||||||
|
|
||||||
|
|
|
@ -250,7 +250,7 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
|
||||||
{
|
{
|
||||||
tabdata.item1_page0_sample_interval += step * 100;
|
tabdata.item1_page0_sample_interval += step * 100;
|
||||||
|
|
||||||
if( tabdata.item1_page0_sample_interval > 10000 ) tabdata.item1_page0_sample_interval = 10000;
|
if( tabdata.item1_page0_sample_interval > SAMPLE_INTERVAL_MAX ) tabdata.item1_page0_sample_interval = SAMPLE_INTERVAL_MAX;
|
||||||
if( tabdata.item1_page0_sample_interval < MENU_TASK_PERIOD ) tabdata.item1_page0_sample_interval = MENU_TASK_PERIOD;
|
if( tabdata.item1_page0_sample_interval < MENU_TASK_PERIOD ) tabdata.item1_page0_sample_interval = MENU_TASK_PERIOD;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -259,8 +259,8 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
|
||||||
{
|
{
|
||||||
tabdata.item1_page0_plot_num += step;
|
tabdata.item1_page0_plot_num += step;
|
||||||
|
|
||||||
if( tabdata.item1_page0_plot_num > 20 ) tabdata.item1_page0_plot_num = 20;
|
if( tabdata.item1_page0_plot_num > PLOT_NUM_MAX ) tabdata.item1_page0_plot_num = PLOT_NUM_MAX;
|
||||||
if( tabdata.item1_page0_plot_num < 3 ) tabdata.item1_page0_plot_num = 3;
|
if( tabdata.item1_page0_plot_num < PLOT_NUM_MIN ) tabdata.item1_page0_plot_num = PLOT_NUM_MIN;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,13 @@ extern uint8_t charging_flag;
|
||||||
//写命令
|
//写命令
|
||||||
#define WRITE_CMD 0xEA
|
#define WRITE_CMD 0xEA
|
||||||
|
|
||||||
|
#define BAT_CAP_3 0
|
||||||
|
#define BAT_CAP_3_25 1
|
||||||
|
#define BAT_CAP_25_50 3
|
||||||
|
#define BAT_CAP_50_75 7
|
||||||
|
#define BAT_CAP_75 15
|
||||||
|
#define BAT_CAP_CHARGING 20
|
||||||
|
|
||||||
//I2C读取电池电量
|
//I2C读取电池电量
|
||||||
void read_battery(void);
|
void read_battery(void);
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,21 @@ void hold_deal_range_max(void);
|
||||||
//保持寄存器,处理量程修改事件,修改当前选择的物理量的量程下限
|
//保持寄存器,处理量程修改事件,修改当前选择的物理量的量程下限
|
||||||
void hold_deal_range_min(void);
|
void hold_deal_range_min(void);
|
||||||
|
|
||||||
|
//保持寄存器,处理采样间隔修改事件
|
||||||
|
void hold_deal_sample_interval(void);
|
||||||
|
|
||||||
|
//保持寄存器,处理描点数量修改事件
|
||||||
|
void hold_deal_plot_counts(void);
|
||||||
|
|
||||||
|
//保持寄存器,处理输入曲线&图例颜色修改事件
|
||||||
|
void hold_deal_color_input(void);
|
||||||
|
|
||||||
|
//保持寄存器,处理输出曲线&图例颜色修改事件
|
||||||
|
void hold_deal_color_output(void);
|
||||||
|
|
||||||
|
//保持寄存器,处理语言选择事件
|
||||||
|
void hold_deal_language_select(void);
|
||||||
|
|
||||||
//输入寄存器,上位机只读
|
//输入寄存器,上位机只读
|
||||||
void modbus_reg_update_input(void);
|
void modbus_reg_update_input(void);
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,52 @@ void modbus_reg_update_coil(void)
|
||||||
coil_deal_screen_switch();
|
coil_deal_screen_switch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_coil_val(uint8_t addr, uint8_t bit_val)
|
||||||
|
{
|
||||||
|
if( (addr > COIL_ADD_MAX)||(bit_val > 1) ) return;
|
||||||
|
addr -= COIL_ADD_MIN;
|
||||||
|
if( addr > 200 ) return;
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
if( addr > COIL_ADD_MAX ) return 99;
|
||||||
|
addr -= COIL_ADD_MIN;
|
||||||
|
if( addr > 200 ) return 99;
|
||||||
|
|
||||||
|
uint8_t result = 0;
|
||||||
|
uint8_t pcoil = addr / 8; //数组的第几个元素, 0-7
|
||||||
|
uint8_t pbit = addr % 8; //元素的第几位, 0-7
|
||||||
|
|
||||||
|
result = 0x01 & (CoilState[pcoil] >> pbit);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void coil_deal_ON2OFF(void)
|
void coil_deal_ON2OFF(void)
|
||||||
{
|
{
|
||||||
if( (get_coil_val(COIL_ADDR_ON_OFF) != menu_data.io_on2off)&&(get_coil_val(COIL_ADDR_ON_OFF) < 2) )
|
if( (get_coil_val(COIL_ADDR_ON_OFF) != menu_data.io_on2off)&&(get_coil_val(COIL_ADDR_ON_OFF) < 2) )
|
||||||
|
@ -281,7 +327,6 @@ int16_t rg_max = 0, rg_min = 0;
|
||||||
uint16_t phyunit_prv = 0;
|
uint16_t phyunit_prv = 0;
|
||||||
uint8_t *p8low = 0, *p8up = 0;
|
uint8_t *p8low = 0, *p8up = 0;
|
||||||
int16_t *p16low = 0, *p16up = 0;
|
int16_t *p16low = 0, *p16up = 0;
|
||||||
int16_t neg_watch = 0;
|
|
||||||
void hold_deal_range_type(void)
|
void hold_deal_range_type(void)
|
||||||
{
|
{
|
||||||
//发生变化时才执行以下操作
|
//发生变化时才执行以下操作
|
||||||
|
@ -323,8 +368,6 @@ void hold_deal_range_type(void)
|
||||||
rg_min = VOL[1].low;
|
rg_min = VOL[1].low;
|
||||||
p16low = &tabdata.item0_page0_vlow[1];
|
p16low = &tabdata.item0_page0_vlow[1];
|
||||||
p16up = &tabdata.item0_page0_vup[1];
|
p16up = &tabdata.item0_page0_vup[1];
|
||||||
|
|
||||||
memcpy(&neg_watch, HoldReg + HOLD_ADDR_PHY_LOW, 2);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -386,10 +429,8 @@ void hold_deal_range_type(void)
|
||||||
memcpy(HoldReg + HOLD_ADDR_PHY_UP, &tabdata.item0_page1_TCup[p_temp], 2);
|
memcpy(HoldReg + HOLD_ADDR_PHY_UP, &tabdata.item0_page1_TCup[p_temp], 2);
|
||||||
rg_max = TC[p_temp].up;
|
rg_max = TC[p_temp].up;
|
||||||
rg_min = TC[p_temp].low;
|
rg_min = TC[p_temp].low;
|
||||||
*p16low = tabdata.item0_page1_TClow[p_temp];
|
p16low = &tabdata.item0_page1_TClow[p_temp];
|
||||||
*p16up = tabdata.item0_page1_TCup[p_temp];
|
p16up = &tabdata.item0_page1_TCup[p_temp];
|
||||||
|
|
||||||
memcpy(&neg_watch, HoldReg + HOLD_ADDR_PHY_LOW, 2);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -399,10 +440,8 @@ void hold_deal_range_type(void)
|
||||||
memcpy(HoldReg + HOLD_ADDR_PHY_UP, &tabdata.item0_page2_RTDup, 2);
|
memcpy(HoldReg + HOLD_ADDR_PHY_UP, &tabdata.item0_page2_RTDup, 2);
|
||||||
rg_max = RTD.up;
|
rg_max = RTD.up;
|
||||||
rg_min = RTD.low;
|
rg_min = RTD.low;
|
||||||
*p16low = tabdata.item0_page2_RTDlow;
|
p16low = &tabdata.item0_page2_RTDlow;
|
||||||
*p16up = tabdata.item0_page2_RTDup;
|
p16up = &tabdata.item0_page2_RTDup;
|
||||||
|
|
||||||
memcpy(&neg_watch, HoldReg + HOLD_ADDR_PHY_LOW, 2);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -413,6 +452,8 @@ void hold_deal_range_type(void)
|
||||||
HoldReg[HOLD_ADDR_PHY_UP] = 0;
|
HoldReg[HOLD_ADDR_PHY_UP] = 0;
|
||||||
rg_max = 0;
|
rg_max = 0;
|
||||||
rg_min = 0;
|
rg_min = 0;
|
||||||
|
*p8low = 0;
|
||||||
|
*p8up = 0;
|
||||||
*p16low = 0;
|
*p16low = 0;
|
||||||
*p16up = 0;
|
*p16up = 0;
|
||||||
}
|
}
|
||||||
|
@ -432,7 +473,7 @@ void hold_deal_range_max(void)
|
||||||
//*p8指向了需要修改的uint8,*p16指向了需要修改的int16
|
//*p8指向了需要修改的uint8,*p16指向了需要修改的int16
|
||||||
if( (HoldReg[HOLD_ADDR_PHY_UNIT] == 1)|(HoldReg[HOLD_ADDR_PHY_UNIT] == 5) )
|
if( (HoldReg[HOLD_ADDR_PHY_UNIT] == 1)|(HoldReg[HOLD_ADDR_PHY_UNIT] == 5) )
|
||||||
{
|
{
|
||||||
if( (*p8up == 0)|(*p8low == 0) ) return;
|
if( (!p8up)|(!p8low) ) return;
|
||||||
|
|
||||||
uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_UP];
|
uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_UP];
|
||||||
|
|
||||||
|
@ -452,7 +493,7 @@ void hold_deal_range_max(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( (*p16up == 0)|(*p16low == 0) ) return;
|
if( (!p16up)|(!p16low) ) return;
|
||||||
|
|
||||||
int16_t hold_temp16 = 0;
|
int16_t hold_temp16 = 0;
|
||||||
|
|
||||||
|
@ -483,7 +524,7 @@ void hold_deal_range_min(void)
|
||||||
|
|
||||||
if( (HoldReg[HOLD_ADDR_PHY_UNIT] == 1)|(HoldReg[HOLD_ADDR_PHY_UNIT] == 5) )
|
if( (HoldReg[HOLD_ADDR_PHY_UNIT] == 1)|(HoldReg[HOLD_ADDR_PHY_UNIT] == 5) )
|
||||||
{
|
{
|
||||||
if( (*p8up == 0)|(*p8low == 0) ) return;
|
if( (!p8up)|(!p8low) ) return;
|
||||||
|
|
||||||
uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_LOW];
|
uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_LOW];
|
||||||
|
|
||||||
|
@ -503,7 +544,7 @@ void hold_deal_range_min(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( (*p16up == 0)|(*p16low == 0) ) return;
|
if( (!p16up)|(!p16low) ) return;
|
||||||
|
|
||||||
int16_t hold_temp16 = 0;
|
int16_t hold_temp16 = 0;
|
||||||
|
|
||||||
|
@ -524,52 +565,84 @@ void hold_deal_range_min(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//保持寄存器,处理采样间隔修改事件
|
||||||
|
void hold_deal_sample_interval(void)
|
||||||
|
{
|
||||||
|
if( HoldReg[HOLD_ADDR_SAMPLE_INTERVAL] != tabdata.item1_page0_sample_interval )
|
||||||
|
{
|
||||||
|
if( (MENU_TASK_PERIOD <= HoldReg[HOLD_ADDR_SAMPLE_INTERVAL])&&(HoldReg[HOLD_ADDR_SAMPLE_INTERVAL] <= SAMPLE_INTERVAL_MAX) )
|
||||||
|
{
|
||||||
|
tabdata.item1_page0_sample_interval = HoldReg[HOLD_ADDR_SAMPLE_INTERVAL];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//保持寄存器,处理描点数量修改事件
|
||||||
|
void hold_deal_plot_counts(void)
|
||||||
|
{
|
||||||
|
if( HoldReg[HOLD_ADDR_PLOT_COUNTS] != (0x00FF & tabdata.item1_page0_plot_num) )
|
||||||
|
{
|
||||||
|
if( (PLOT_NUM_MIN <= HoldReg[HOLD_ADDR_PLOT_COUNTS])&&(HoldReg[HOLD_ADDR_PLOT_COUNTS] <= PLOT_NUM_MAX) )
|
||||||
|
{
|
||||||
|
tabdata.item1_page0_plot_num = HoldReg[HOLD_ADDR_PLOT_COUNTS];
|
||||||
|
|
||||||
|
if(menu_data.scr_now == SCREEN_MAIN)
|
||||||
|
{
|
||||||
|
scr_main_chart_update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//保持寄存器,处理输入曲线&图例颜色修改事件
|
||||||
|
void hold_deal_color_input(void)
|
||||||
|
{
|
||||||
|
if( HoldReg[HOLD_ADDR_INPUT_COLOR] != (0x00FF & (uint8_t)tabdata.item1_page0_color_input) )
|
||||||
|
{
|
||||||
|
if( HoldReg[HOLD_ADDR_PLOT_COUNTS] <= 5 )
|
||||||
|
{
|
||||||
|
tabdata.item1_page0_color_input = (COLORS)HoldReg[HOLD_ADDR_PLOT_COUNTS];
|
||||||
|
|
||||||
|
if(menu_data.scr_now == SCREEN_MAIN)
|
||||||
|
{
|
||||||
|
scr_main_chart_update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//保持寄存器,处理输出曲线&图例颜色修改事件
|
||||||
|
void hold_deal_color_output(void)
|
||||||
|
{
|
||||||
|
if( HoldReg[HOLD_ADDR_OUTPUT_COLOR] != (0x00FF & (uint8_t)tabdata.item1_page0_color_output) )
|
||||||
|
{
|
||||||
|
if( HoldReg[HOLD_ADDR_OUTPUT_COLOR] <= 5 )
|
||||||
|
{
|
||||||
|
tabdata.item1_page0_color_output = (COLORS)HoldReg[HOLD_ADDR_OUTPUT_COLOR];
|
||||||
|
|
||||||
|
if(menu_data.scr_now == SCREEN_MAIN)
|
||||||
|
{
|
||||||
|
scr_main_chart_update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//保持寄存器,处理语言选择事件
|
||||||
|
void hold_deal_language_select(void)
|
||||||
|
{
|
||||||
|
if( HoldReg[HOLD_ADDR_LANGUAGE] != (0x00FF & (uint8_t)tabdata.item3_page0_language) )
|
||||||
|
{
|
||||||
|
if( HoldReg[HOLD_ADDR_LANGUAGE] <= 1 )
|
||||||
|
{
|
||||||
|
tabdata.item3_page0_language = (LANGUAGES)HoldReg[HOLD_ADDR_LANGUAGE];
|
||||||
|
|
||||||
|
setting_laguage_switch(tabdata.item3_page0_language);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//输入寄存器,上位机只读
|
//输入寄存器,上位机只读
|
||||||
void modbus_reg_update_input(void)
|
void modbus_reg_update_input(void)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void set_coil_val(uint8_t addr, uint8_t bit_val)
|
|
||||||
{
|
|
||||||
if( (addr > COIL_ADD_MAX)||(bit_val > 1) ) return;
|
|
||||||
addr -= COIL_ADD_MIN;
|
|
||||||
if( addr > 200 ) return;
|
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
if( addr > COIL_ADD_MAX ) return 99;
|
|
||||||
addr -= COIL_ADD_MIN;
|
|
||||||
if( addr > 200 ) return 99;
|
|
||||||
|
|
||||||
uint8_t result = 0;
|
|
||||||
uint8_t pcoil = addr / 8; //数组的第几个元素, 0-7
|
|
||||||
uint8_t pbit = addr % 8; //元素的第几位, 0-7
|
|
||||||
|
|
||||||
result = 0x01 & (CoilState[pcoil] >> pbit);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
|
@ -263,12 +263,12 @@
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>21</count>
|
<count>21</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>neg_watch,0x0A</ItemText>
|
<ItemText>p8up,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>22</count>
|
<count>22</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>tim8_test_cnt,0x0A</ItemText>
|
<ItemText>p8low,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<WatchWindow2>
|
<WatchWindow2>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue