更新:

1、频率输入正常(两个校准器,一个输出一个输入,0-100KHz,误差1Hz左右);
2、热电偶和电阻输出功能调试完毕(将DAC7811的MISO断开后,两者能够共同工作);
3、modbus寄存器更新逻辑调整:新增upper_control_flag变量,初始为0,收到“写”命令后置1,寄存器更新后置0;
This commit is contained in:
吴俊潮 2025-07-30 11:31:51 +08:00
parent cd05491dd9
commit 46cc2f2021
11 changed files with 22219 additions and 22209 deletions

View File

@ -12,20 +12,6 @@ long ADS1220RTDGainCorrection = 1;
long ADS1220TCGainCorrection = 1; long ADS1220TCGainCorrection = 1;
BOOL ads1220_spi_init_flag = FALSE; BOOL ads1220_spi_init_flag = FALSE;
// void test1()
// {
// static uint32_t count = 0;
// while(1)
// {
// count = 10000;
// HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET);
// while(!(count--));
// HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET);
// }
// }
static void ads1220_cs(cs_state_type state) static void ads1220_cs(cs_state_type state)
{ {
if (state == CS_L) if (state == CS_L)
@ -71,6 +57,7 @@ static void fun_ads1220_spi1_init(void)
// { // {
// HAL_SPI_TransmitReceive(&hspi1, pTxData, pRxData, 1, 1000); // HAL_SPI_TransmitReceive(&hspi1, pTxData, pRxData, 1, 1000);
// } // }
HAL_StatusTypeDef ads1220spi_status_watch; HAL_StatusTypeDef ads1220spi_status_watch;
static void spi_write_read(uint8_t *pTxData, uint8_t *pRxData, uint16_t Size) static void spi_write_read(uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
{ {
@ -257,22 +244,13 @@ static void ads1220_start(void)
// uint8_t cmd = ADS1220_POWERDOWN_CMD; // uint8_t cmd = ADS1220_POWERDOWN_CMD;
// spi_write_read(&cmd, RcvData, 1); // spi_write_read(&cmd, RcvData, 1);
//} //}
uint8_t in_data_1220[3] = {0}; uint8_t in_data_1220[3] = {0};
int data_1220_raw = 0; int data_1220_raw = 0;
long data_1220 = 0; long data_1220 = 0;
static void ads1220_get_conversion_data(float32 *conversionData) static void ads1220_get_conversion_data(float32 *conversionData)
{ {
uint8_t out_data[3] = {0xff, 0xff, 0xff}; uint8_t out_data[3] = {0xff, 0xff, 0xff};
// uint8_t in_data[3] = {0};
// long data = 0;
// spi_write_read(out_data, in_data, 3);
// data = (((long)in_data[0] << 16) + ((long)in_data[1] << 8) + (long)in_data[2]);
// if (data & 0x800000)
// {
// data ^= 0x00FFFFFF;
// data += 1;
// }
spi_write_read(out_data, in_data_1220, 3); spi_write_read(out_data, in_data_1220, 3);
data_1220_raw = data_1220; data_1220_raw = data_1220;
@ -316,53 +294,66 @@ void ads1220_operation(uint8_t channel, float32 *data_pv)
ads1220_cs(CS_L); ads1220_cs(CS_L);
vTaskDelay(10); vTaskDelay(10);
//HAL_Delay(10);
// if (channel == CH2_OUT_CUR) ads1220_reset();
// { //HAL_Delay(5);
// ads1220_reset(); vTaskDelay(5);
// vTaskDelay(5);
// setup_ads1220( setup_ads1220(
// ADS1220_MUX_AIN2_AVSS, // 输入多路复用器配置 ADS1220_MUX_AIN0_AIN1, // 输入多路复用器配置
// ADS1220_OP_MODE_NORMAL, // 工作模式选择 ADS1220_OP_MODE_NORMAL, // 工作模式选择
// ADS1220_CONVERSION_SINGLE_SHOT, // 转换模式 ADS1220_CONVERSION_SINGLE_SHOT, // 转换模式*
// ADS1220_DATA_RATE_45SPS, // 数据速率 ADS1220_DATA_RATE_45SPS, // 数据速率*
// ADS1220_GAIN_1, // 增益配置 ADS1220_GAIN_1, // 增益配置*
// ADS1220_PGA_BYPASS, // 禁止/启用可编程增益放大器 ADS1220_PGA_BYPASS, // 禁止/启用可编程增益放大器
// ADS1220_IDAC1_DISABLED, // 选择IDAC1将路由到的通道 ADS1220_IDAC1_DISABLED, // 选择IDAC1将路由到的通道
// ADS1220_IDAC2_DISABLED, // 选择IDAC2将路由到的通道 ADS1220_IDAC2_DISABLED, // 选择IDAC2将路由到的通道
// ADS1220_IDAC_CURRENT_OFF, // IDAC电流设置 ADS1220_IDAC_CURRENT_OFF, // IDAC电流设置
// ADS1220_VREF_EXT_REF0_PINS, // 基准电压选择 ADS1220_VREF_EXT_REF0_PINS, // 基准电压选择*
// ADS1220_TEMP_SENSOR_OFF); // 温度传感器 ADS1220_TEMP_SENSOR_OFF); // 温度传感器
// vTaskDelay(5); vTaskDelay(5);
// ads1220_start(); //HAL_Delay(5);
// vTaskDelay(30);
// ads1220_get_conversion_data(data_pv); ads1220_start();
// } //HAL_Delay(30);
// else if (channel == CH10_IN_TC) vTaskDelay(30);
// {
ads1220_reset(); ads1220_get_conversion_data(data_pv);
//HAL_Delay(5);
vTaskDelay(5);
setup_ads1220(
ADS1220_MUX_AIN0_AIN1, // 输入多路复用器配置
ADS1220_OP_MODE_NORMAL, // 工作模式选择
ADS1220_CONVERSION_SINGLE_SHOT, // 转换模式*
ADS1220_DATA_RATE_45SPS, // 数据速率*
ADS1220_GAIN_1, // 增益配置*
ADS1220_PGA_BYPASS, // 禁止/启用可编程增益放大器
ADS1220_IDAC1_DISABLED, // 选择IDAC1将路由到的通道
ADS1220_IDAC2_DISABLED, // 选择IDAC2将路由到的通道
ADS1220_IDAC_CURRENT_OFF, // IDAC电流设置
ADS1220_VREF_EXT_REF0_PINS, // 基准电压选择*
ADS1220_TEMP_SENSOR_OFF); // 温度传感器
vTaskDelay(5);
//HAL_Delay(5);
ads1220_start();
//HAL_Delay(30);
vTaskDelay(30);
ads1220_get_conversion_data(data_pv);
// }
ads1220_cs(CS_H); ads1220_cs(CS_H);
vTaskDelay(5); vTaskDelay(5);
//HAL_Delay(5); //HAL_Delay(5);
} }
// void simulate_SPI_WriteReadByte(uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
// {
// uint8_t i = 0, j = 0;
// uint8_t temp = 0, data = 0;
// for(j = 0; j < Size; j++)
// {
// data = pTxData[j];
// for(i = 0; i < 8; i++)
// {
// temp = ((data&0x80) == 0x80)? 1:0;
// data = data << 1;
// read_data = read_data << 1;
// SPI_CLK(0);
// SPI_MOSI(temp);
// delay_cnt(10);
// SPI_CLK(1);
// delay_cnt(10);
// if(SPI_MISO()==1)
// {
// read_data = read_data + 1;
// }
// SPI_CLK(0);
// }
// }
// }

View File

@ -759,26 +759,6 @@ void input_value_show(void)
void io_on2off_status(void) void io_on2off_status(void)
{ {
switch (tabdata.item3_page0_language)
{
case MENU_SIMPLYFY_CHINESE:
{
lv_label_set_text(guider_ui.screen_main_label_IN, "输入:");
lv_label_set_text(guider_ui.screen_main_label_OUT, "输出:");
}
break;
case MENU_ENGLISH:
{
lv_label_set_text(guider_ui.screen_main_label_IN, "IN:");
lv_label_set_text(guider_ui.screen_main_label_OUT, "OUT:");
}
break;
default:
break;
}
switch (menu_data.io_on2off) switch (menu_data.io_on2off)
{ {
case IO_ON: case IO_ON:
@ -848,6 +828,26 @@ void io_on2off_status(void)
default: default:
break; break;
} }
switch (tabdata.item3_page0_language)
{
case MENU_SIMPLYFY_CHINESE:
{
lv_label_set_text(guider_ui.screen_main_label_IN, "输入:");
lv_label_set_text(guider_ui.screen_main_label_OUT, "输出:");
}
break;
case MENU_ENGLISH:
{
lv_label_set_text(guider_ui.screen_main_label_IN, "IN:");
lv_label_set_text(guider_ui.screen_main_label_OUT, "OUT:");
}
break;
default:
break;
}
} }
void scr_main_recover(void) void scr_main_recover(void)

View File

@ -384,36 +384,36 @@ void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
// uint16_t uit_test_l = 0, uit_test_h = 0; // uint16_t uit_test_l = 0, uit_test_h = 0;
void sig_sv_update(void) void sig_sv_update(void)
{ {
if(progout_data.process == PROGOUT_WAITING) if( !get_coil_val(COIL_ADDR_HOLD_SV_CTRL) )
{ {
//按键修改屏幕上的设定值 -> 将屏幕上的值转化成实际值 -> 实际值再转化成mux输入值 if(progout_data.process == PROGOUT_WAITING)
switch (menu_data.io_on2off)
{ {
case IO_ON: //按键修改屏幕上的设定值 -> 将屏幕上的值转化成实际值 -> 实际值再转化成mux输入值
switch (menu_data.io_on2off)
{ {
mux_signal.data_sv = real2mux( get_output_value() ); case IO_ON:
} {
break; mux_signal.data_sv = real2mux( get_output_value() );
}
break;
case IO_OFF: case IO_OFF:
{ {
mux_signal.data_sv = 0; mux_signal.data_sv = 0;
}
break;
default:
break;
} }
break;
default:
break;
} }
} else
else {
{ program_out_run();
program_out_run(); set_output( mux2real(mux_signal.data_sv) );
set_output( mux2real(mux_signal.data_sv) ); }
}
//本地控制的情况下,保持寄存器的值跟随设定值变化 //本地控制的情况下,保持寄存器的值跟随设定值变化
if(get_coil_val(COIL_ADDR_HOLD_SV_CTRL) == 0)
{
HoldReg[HOLD_ADDR_MUX_SV_H] = ( (uint32_t)mux2real(mux_signal.data_sv) ) >> 16; HoldReg[HOLD_ADDR_MUX_SV_H] = ( (uint32_t)mux2real(mux_signal.data_sv) ) >> 16;
HoldReg[HOLD_ADDR_MUX_SV_L] = ( (uint32_t)mux2real(mux_signal.data_sv) ) & 0x0000FFFF; HoldReg[HOLD_ADDR_MUX_SV_L] = ( (uint32_t)mux2real(mux_signal.data_sv) ) & 0x0000FFFF;
} }

View File

@ -44,8 +44,8 @@ uint8_t ble_init(void)
{ {
if(ble_cnt == 0) if(ble_cnt == 0)
{ {
char ble_id[9]; char ble_id[32];
strcpy (ble_id, "00000001"); strcpy (ble_id, "GSDT_Signal_Generator_V1.0");
write_ble_id(ble_id); //修改蓝牙名称 write_ble_id(ble_id); //修改蓝牙名称
ble_cnt++; ble_cnt++;

View File

@ -18,6 +18,7 @@ extern uint32_t tick_end;
extern uint32_t trans_log_tx; extern uint32_t trans_log_tx;
extern uint8_t sig2slave_step; extern uint8_t sig2slave_step;
extern TRANS_PROCESS st_flag; extern TRANS_PROCESS st_flag;
extern uint8_t upper_control_flag;
void parse_scom_485(st_scom *scom); void parse_scom_485(st_scom *scom);

View File

@ -6,6 +6,7 @@ uint32_t tick_end = 0;
//uint32_t trans_log_rx = 0; //uint32_t trans_log_rx = 0;
uint32_t trans_log_tx = 0; uint32_t trans_log_tx = 0;
TRANS_PROCESS st_flag = TRANSPARENT_WAIT; TRANS_PROCESS st_flag = TRANSPARENT_WAIT;
uint8_t upper_control_flag = 0; //modbus协议处理中执行写入功能时令 upper_control_flag = 1
void parse_scom_485(st_scom *scom) void parse_scom_485(st_scom *scom)

View File

@ -14,6 +14,8 @@ void modbus_registers_update(void)
//输入寄存器 //输入寄存器
modbus_reg_update_input(); modbus_reg_update_input();
upper_control_flag = 0;
} }
//线圈寄存器,读写 //线圈寄存器,读写
@ -83,10 +85,10 @@ uint8_t get_coil_val(uint8_t addr)
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)
{ {
//进入此处说明线圈寄存器的值被上位机修改 //进入此处说明线圈寄存器的值被上位机修改
if( menu_data.scr_now == SCREEN_MAIN ) if( (menu_data.scr_now == SCREEN_MAIN)&&(upper_control_flag) )
{ {
//只有在主界面时,修改内容才生效 //只有在主界面时,修改内容才生效
menu_data.io_on2off = get_coil_val(COIL_ADDR_ON_OFF); menu_data.io_on2off = get_coil_val(COIL_ADDR_ON_OFF);
@ -102,31 +104,39 @@ void coil_deal_ON2OFF(void)
void coil_deal_light(void) void coil_deal_light(void)
{ {
if( (get_coil_val(COIL_ADDR_LIGHT) != tabdata.item3_page0_lightflag)&&(get_coil_val(COIL_ADDR_LIGHT) < 2) ) if(get_coil_val(COIL_ADDR_LIGHT) != tabdata.item3_page0_lightflag)
{ {
//进入此处说明线圈寄存器的值被上位机修改 //进入此处说明线圈寄存器的值被上位机修改
tabdata.item3_page0_lightflag = get_coil_val(COIL_ADDR_LIGHT); if(upper_control_flag)
if(tabdata.item3_page0_lightflag)
{ {
LIGHT_ON; tabdata.item3_page0_lightflag = get_coil_val(COIL_ADDR_LIGHT);
if(tabdata.item3_page0_lightflag)
{
LIGHT_ON;
}
else
{
LIGHT_OFF;
}
//如果当前页面存在该内容,则更新文本
if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item_cursor == ITEM_3) ) set_item3_text(LIGHT_STATUS);
} }
else else
{ {
LIGHT_OFF; set_coil_val(COIL_ADDR_LIGHT, tabdata.item3_page0_lightflag);
} }
//如果当前页面存在该内容,则更新文本
if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item_cursor == ITEM_3) ) set_item3_text(LIGHT_STATUS);
} }
} }
void coil_deal_save(void) void coil_deal_save(void)
{ {
if( (get_coil_val(COIL_ADDR_CONFIG_SAVE) == 1)&&(tabdata.item3_page0_saveflag == 0) ) if( get_coil_val(COIL_ADDR_CONFIG_SAVE) != tabdata.item3_page0_saveflag )
{ {
if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item3_page0_resetflag != 1) ) if( (upper_control_flag)&&(tabdata.item3_page0_resetflag != 1)&&(tabdata.item3_page0_saveflag == 0)\
&&(get_coil_val(COIL_ADDR_CONFIG_SAVE))&&(menu_data.scr_now == SCREEN_SETTING) )
{ {
//当前处于设置界面,并且未处于重置过程中,执行保存 //上位机控制、未处于复位过程、未保存、需要保存、当前位于设置界面时,才能执行保存
tabdata.item3_page0_saveflag = 1; tabdata.item3_page0_saveflag = 1;
} }
else else
@ -139,11 +149,12 @@ void coil_deal_save(void)
void coil_deal_reset(void) void coil_deal_reset(void)
{ {
if( (get_coil_val(COIL_ADDR_CONFIG_RESET) == 1)&&(tabdata.item3_page0_resetflag == 0) ) if( get_coil_val(COIL_ADDR_CONFIG_RESET) != tabdata.item3_page0_resetflag )
{ {
if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item3_page0_saveflag != 1) ) if( (upper_control_flag)&&(tabdata.item3_page0_saveflag != 1)&&(tabdata.item3_page0_resetflag == 0)\
&&(get_coil_val(COIL_ADDR_CONFIG_RESET))&&(menu_data.scr_now == SCREEN_SETTING) )
{ {
//当前处于设置界面,并且未处于保存过程中,执行复位 //上位机控制、未处于保存过程、未复位、需要复位、当前位于设置界面时,才能执行复位
tabdata.item3_page0_resetflag = 1; tabdata.item3_page0_resetflag = 1;
} }
else else
@ -261,7 +272,7 @@ void hold_deal_set_work_mode(void)
if( (HoldReg[HOLD_ADDR_SET_WORK_MODE] != work_mode_pv)&&(0 < HoldReg[HOLD_ADDR_SET_WORK_MODE])&&(HoldReg[HOLD_ADDR_SET_WORK_MODE] <= 28) ) if( (HoldReg[HOLD_ADDR_SET_WORK_MODE] != work_mode_pv)&&(0 < HoldReg[HOLD_ADDR_SET_WORK_MODE])&&(HoldReg[HOLD_ADDR_SET_WORK_MODE] <= 28) )
{ {
//只有在主界面才接受修改 //只有在主界面才接受修改
if(menu_data.scr_now == SCREEN_MAIN) if( (menu_data.scr_now == SCREEN_MAIN)&&(upper_control_flag) )
{ {
SIG_FUNCTIONS iom; SIG_FUNCTIONS iom;
SIG_FUNCTIONS_TYPE iomt; SIG_FUNCTIONS_TYPE iomt;
@ -323,14 +334,16 @@ void hold_deal_set_work_mode(void)
void hold_deal_muxsv(void) void hold_deal_muxsv(void)
{ {
if( !get_coil_val(COIL_ADDR_HOLD_SV_CTRL) ) return;
//上位机控制的情况下,设定值跟随保持寄存器的值变化 //上位机控制的情况下,设定值跟随保持寄存器的值变化
uint32_t hold_temp = (HoldReg[HOLD_ADDR_MUX_SV_H] << 16) + HoldReg[HOLD_ADDR_MUX_SV_L]; uint32_t hold_temp = (HoldReg[HOLD_ADDR_MUX_SV_H] << 16) + HoldReg[HOLD_ADDR_MUX_SV_L];
float32 real_hold = 0; float32 real_hold = 0;
memcpy(&real_hold, &hold_temp, 4); memcpy(&real_hold, &hold_temp, 4);
if( (real2mux(real_hold) != mux_signal.data_sv)&&get_coil_val(COIL_ADDR_HOLD_SV_CTRL)&&get_coil_val(COIL_ADDR_HOLD_SV_ENSURE) ) if( (real2mux(real_hold) != mux_signal.data_sv)&&get_coil_val(COIL_ADDR_HOLD_SV_ENSURE) )
{ {
if( (menu_data.scr_now == SCREEN_MAIN)&&(pltdata.yreal_pri_low <= real_hold)&&(real_hold <= pltdata.yreal_pri_up) ) if( (upper_control_flag)&&(menu_data.scr_now == SCREEN_MAIN)&&(pltdata.yreal_pri_low <= real_hold)&&(real_hold <= pltdata.yreal_pri_up) )
{ {
set_output(real_hold); set_output(real_hold);
} }
@ -515,7 +528,7 @@ void hold_deal_range_max(void)
if( (!p8up)|(!p8low) ) 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];
if( (*p8low <= hold_temp8)&&(hold_temp8 <= (uint8_t)rg_max) ) if( (*p8low <= hold_temp8)&&(hold_temp8 <= (uint8_t)rg_max)&&(upper_control_flag) )
{ {
*p8up = hold_temp8; *p8up = hold_temp8;
*p8up_prv = *p8up; *p8up_prv = *p8up;
@ -546,7 +559,7 @@ void hold_deal_range_max(void)
int16_t hold_temp16 = 0; int16_t hold_temp16 = 0;
memcpy(&hold_temp16, HoldReg + HOLD_ADDR_PHY_UP, 2); memcpy(&hold_temp16, HoldReg + HOLD_ADDR_PHY_UP, 2);
if( (*p16low <= hold_temp16)&&(hold_temp16 <= rg_max) ) if( (*p16low <= hold_temp16)&&(hold_temp16 <= rg_max)&&(upper_control_flag) )
{ {
*p16up = hold_temp16; *p16up = hold_temp16;
*p16up_prv = *p16up; *p16up_prv = *p16up;
@ -597,7 +610,7 @@ void hold_deal_range_min(void)
if( (!p8up)|(!p8low) ) 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];
if( ((uint8_t)rg_min <= hold_temp8)&&(hold_temp8 <= *p8up) ) if( ((uint8_t)rg_min <= hold_temp8)&&(hold_temp8 <= *p8up)&&(upper_control_flag) )
{ {
*p8low = hold_temp8; *p8low = hold_temp8;
if(menu_data.scr_now == SCREEN_MAIN) if(menu_data.scr_now == SCREEN_MAIN)
@ -626,7 +639,7 @@ void hold_deal_range_min(void)
int16_t hold_temp16 = 0; int16_t hold_temp16 = 0;
memcpy(&hold_temp16, HoldReg + HOLD_ADDR_PHY_LOW, 2); memcpy(&hold_temp16, HoldReg + HOLD_ADDR_PHY_LOW, 2);
if( (rg_min <= hold_temp16)&&(hold_temp16 <= *p16up) ) if( (rg_min <= hold_temp16)&&(hold_temp16 <= *p16up)&&(upper_control_flag) )
{ {
*p16low = hold_temp16; *p16low = hold_temp16;
@ -658,7 +671,7 @@ void hold_deal_sample_interval(void)
if( HoldReg[HOLD_ADDR_SAMPLE_INTERVAL] != tabdata.item1_page0_sample_interval ) 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) ) if( (MENU_TASK_PERIOD <= HoldReg[HOLD_ADDR_SAMPLE_INTERVAL])&&(HoldReg[HOLD_ADDR_SAMPLE_INTERVAL] <= SAMPLE_INTERVAL_MAX)&&(upper_control_flag) )
{ {
tabdata.item1_page0_sample_interval = HoldReg[HOLD_ADDR_SAMPLE_INTERVAL]; tabdata.item1_page0_sample_interval = HoldReg[HOLD_ADDR_SAMPLE_INTERVAL];
@ -679,7 +692,7 @@ void hold_deal_plot_counts(void)
if( HoldReg[HOLD_ADDR_PLOT_COUNTS] != (0x00FF & tabdata.item1_page0_plot_num) ) 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) ) if( (PLOT_NUM_MIN <= HoldReg[HOLD_ADDR_PLOT_COUNTS])&&(HoldReg[HOLD_ADDR_PLOT_COUNTS] <= PLOT_NUM_MAX)&&(upper_control_flag) )
{ {
tabdata.item1_page0_plot_num = 0x00FF & HoldReg[HOLD_ADDR_PLOT_COUNTS]; tabdata.item1_page0_plot_num = 0x00FF & HoldReg[HOLD_ADDR_PLOT_COUNTS];
@ -710,7 +723,7 @@ void hold_deal_color_input(void)
if( HoldReg[HOLD_ADDR_INPUT_COLOR] != (0x00FF & (uint8_t)tabdata.item1_page0_color_input) ) if( HoldReg[HOLD_ADDR_INPUT_COLOR] != (0x00FF & (uint8_t)tabdata.item1_page0_color_input) )
{ {
if( HoldReg[HOLD_ADDR_INPUT_COLOR] <= 5 ) if( (HoldReg[HOLD_ADDR_INPUT_COLOR] <= 5)&&(upper_control_flag) )
{ {
tabdata.item1_page0_color_input = (COLORS)HoldReg[HOLD_ADDR_INPUT_COLOR]; tabdata.item1_page0_color_input = (COLORS)HoldReg[HOLD_ADDR_INPUT_COLOR];
@ -738,7 +751,7 @@ 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] != (0x00FF & (uint8_t)tabdata.item1_page0_color_output) )
{ {
if( HoldReg[HOLD_ADDR_OUTPUT_COLOR] <= 5 ) if( (HoldReg[HOLD_ADDR_OUTPUT_COLOR] <= 5)&&(upper_control_flag) )
{ {
tabdata.item1_page0_color_output = (COLORS)HoldReg[HOLD_ADDR_OUTPUT_COLOR]; tabdata.item1_page0_color_output = (COLORS)HoldReg[HOLD_ADDR_OUTPUT_COLOR];
@ -766,7 +779,7 @@ void hold_deal_language_select(void)
if( HoldReg[HOLD_ADDR_LANGUAGE] != (0x00FF & (uint8_t)tabdata.item3_page0_language) ) if( HoldReg[HOLD_ADDR_LANGUAGE] != (0x00FF & (uint8_t)tabdata.item3_page0_language) )
{ {
if( HoldReg[HOLD_ADDR_LANGUAGE] <= 1 ) if( (HoldReg[HOLD_ADDR_LANGUAGE] <= 1)&&(upper_control_flag) )
{ {
tabdata.item3_page0_language = (LANGUAGES)HoldReg[HOLD_ADDR_LANGUAGE]; tabdata.item3_page0_language = (LANGUAGES)HoldReg[HOLD_ADDR_LANGUAGE];

View File

@ -46,22 +46,26 @@ void modbus_analysis_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
case WriteSingleReg: case WriteSingleReg:
writesinglereg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个寄存器 writesinglereg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个寄存器
upper_control_flag = 1;
break; break;
case WriteMultiCoil: case WriteMultiCoil:
writemulticoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个线圈 writemulticoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个线圈
upper_control_flag = 1;
break; break;
case WriteMultiReg: case WriteMultiReg:
writemultireg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个寄存器 writemultireg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个寄存器
upper_control_flag = 1;
break; break;
case WriteSingleCoil: case WriteSingleCoil:
writesinglecoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个线圈 writesinglecoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个线圈
upper_control_flag = 1;
break; break;
default: default:
modbus_errfunction_rtu(upRxdbuf[1], 0x01); // 错误码处理 modbus_errfunction_rtu(upRxdbuf[1], 0x01); // 错误码处理
break; break;
} }
} }

View File

@ -332,7 +332,7 @@ void start_rs485(void const * argument)
} }
//更新modbus的寄存器值 //更新modbus的寄存器值
//开机动画结束后再执行 //开机动画结束后再执行否则会与数据初始化中的EEPROM读取产生冲突
if(menu_data.scr_init_flag == 1) if(menu_data.scr_init_flag == 1)
{ {
modbus_registers_update(); modbus_registers_update();

View File

@ -270,21 +270,6 @@
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>cali_paras</ItemText> <ItemText>cali_paras</ItemText>
</Ww> </Ww>
<Ww>
<count>23</count>
<WinNumber>1</WinNumber>
<ItemText>in_data_1220</ItemText>
</Ww>
<Ww>
<count>24</count>
<WinNumber>1</WinNumber>
<ItemText>data_1220_raw</ItemText>
</Ww>
<Ww>
<count>25</count>
<WinNumber>1</WinNumber>
<ItemText>data_1220</ItemText>
</Ww>
</WatchWindow1> </WatchWindow1>
<WatchWindow2> <WatchWindow2>
<Ww> <Ww>

File diff suppressed because it is too large Load Diff