更新:

1、保持寄存器基本验证完成;
2、HART通讯:删除终止位判断;
This commit is contained in:
吴俊潮 2025-06-17 15:41:53 +08:00
parent dd24e054a0
commit e5a2c352ec
8 changed files with 16855 additions and 16777 deletions

View File

@ -20,7 +20,7 @@ void duty_tim3(void);
void duty_tim6(void);
void delay_cnt(uint16_t cnt);
void wu_delay_us(__IO uint32_t delay);
void systick_delay_us(__IO uint32_t delay);

View File

@ -422,12 +422,12 @@ void set_nixie_cube_sign(uint8_t on2off, uint8_t sg)
{
case IO_INPUT:
{
menu_data.sign_flag_in = sg;
switch (sg)
{
case SIGN_NULL:
{
//熄灭显示NULL
menu_data.sign_flag_in = 0;
lv_img_set_src(guider_ui.screen_main_ani_in_sign, screen_main_ani_in_sign_imgs[0]);
}
break;
@ -435,7 +435,6 @@ void set_nixie_cube_sign(uint8_t on2off, uint8_t sg)
case SIGN_MINUS:
{
//显示减号(负)
menu_data.sign_flag_in = 1;
lv_img_set_src(guider_ui.screen_main_ani_in_sign, screen_main_ani_in_sign_imgs[1]);
}
break;
@ -462,20 +461,19 @@ void set_nixie_cube_sign(uint8_t on2off, uint8_t sg)
case IO_OUTPUT:
{
menu_data.sign_flag_out = sg;
switch (sg)
{
case 0:
case SIGN_NULL:
{
//熄灭负号
menu_data.sign_flag_out = 0;
lv_img_set_src(guider_ui.screen_main_ani_out_sign, screen_main_ani_out_sign_imgs[0]);
}
break;
case 1:
case SIGN_MINUS:
{
//显示负号
menu_data.sign_flag_out = 1;
lv_img_set_src(guider_ui.screen_main_ani_out_sign, screen_main_ani_out_sign_imgs[1]);
}
break;
@ -504,18 +502,27 @@ void set_nixie_cube(uint8_t io_slc, uint8_t pos, int32_t num)
{
case 99:
{
if( (num < 0)&&(menu_data.sign_flag_in == 0) )
if(input_overflow_flag > SIGN_MINUS)
{
//出现溢出时,显示溢出标志
set_nixie_cube_sign(IO_INPUT, input_overflow_flag);
}
else
{
//未发生溢出时,如果有溢出标志则清除
if(menu_data.sign_flag_in > SIGN_MINUS) set_nixie_cube_sign(IO_INPUT, SIGN_NULL);
if( (num < 0)&&(menu_data.sign_flag_in != SIGN_MINUS) )
{
//出现负数并且没有显示负号时
set_nixie_cube_sign(IO_INPUT, 1);
set_nixie_cube_sign(IO_INPUT, SIGN_MINUS);
}
else if(( (num >= 0)&&(menu_data.sign_flag_in == 1) ))
else if(( (num >= 0)&&(menu_data.sign_flag_in != SIGN_NULL) ))
{
//数值为非负数,但仍然显示负号时
set_nixie_cube_sign(IO_INPUT, 0);
set_nixie_cube_sign(IO_INPUT, SIGN_NULL);
}
}
if(input_overflow_flag > 1) set_nixie_cube_sign(IO_INPUT, input_overflow_flag);
//负数转正数
num = ( num >= 0 )?(num):(0 - num);

View File

@ -176,7 +176,7 @@ void delay_cnt(uint16_t cnt)
}
#define CPU_FREQUENCY_MHZ 165.888 // STM32时钟主频
void wu_delay_us(__IO uint32_t delay)
void systick_delay_us(__IO uint32_t delay)
{
int last, curr, val;
int temp;

View File

@ -48,11 +48,11 @@ void eeprom_spi_writebyte(uint8_t wrt_data)
EEPROM_MOSI_L;
}
wu_delay_us(10); // 空等待
systick_delay_us(10); // 空等待
EEPROM_SCLK_H; //CPHA=0
wu_delay_us(10); // 空等待
systick_delay_us(10); // 空等待
}
EEPROM_SCLK_L;
@ -68,11 +68,11 @@ uint8_t eeprom_spi_readbyte(void)
EEPROM_SCLK_L;
wu_delay_us(10); // 空等待
systick_delay_us(10); // 空等待
EEPROM_SCLK_H;
wu_delay_us(10); // 空等待
systick_delay_us(10); // 空等待
if(EEPROM_MISO)
{
@ -100,13 +100,13 @@ uint8_t SPI_WriteReadByte(uint8_t data)
data = (data << 1);
EEPROM_SCLK_H;
wu_delay_us(5); // 空等待
systick_delay_us(5); // 空等待
if(EEPROM_MISO)
{
data |= 0x01;
}
EEPROM_SCLK_L;
wu_delay_us(5); // 空等待
systick_delay_us(5); // 空等待
}
return(data);

View File

@ -55,51 +55,51 @@ void hart_communicate(st_scom *scom)
//DEVICE <---SIG---> PC
//将来自设备的HART数据装载至com485_tx将comhart_tx的HART数据发送至设备
void transparent_hart(st_scom *scom)
{
if (scom != &scom1_hart) return;
// void transparent_hart(st_scom *scom)
// {
// if (scom != &scom1_hart) return;
HART_RTS(RTS_OFF);
// HART_RTS(RTS_OFF);
//来自HART设备的数据是否接收完成
if (scom->rx_flag == TRUE)
{
scom->rx_flag = FALSE;
// //来自HART设备的数据是否接收完成
// if (scom->rx_flag == TRUE)
// {
// scom->rx_flag = FALSE;
//接收到的数据是否符合HART数据报符合则写入485的tx准备发送至上位机
if ((scom->rx_buff[0] == 0xff) && (scom->rx_buff[1] == 0xff) && (scom->rx_buff[scom->rx_len - 1] == 0xAA))
{
//SIG -> PC
memcpy(scom2_rs485.tx_buff, scom->rx_buff, sizeof(scom->rx_buff));
scom2_rs485.tx_len = scom->rx_len;
scom2_rs485.tx_flag = TRUE;
}
// //接收到的数据是否符合HART数据报符合则写入485的tx准备发送至上位机
// if ((scom->rx_buff[0] == 0xff) && (scom->rx_buff[1] == 0xff) && (scom->rx_buff[scom->rx_len - 1] == 0xAA))
// {
// //SIG -> PC
// memcpy(scom2_rs485.tx_buff, scom->rx_buff, sizeof(scom->rx_buff));
// scom2_rs485.tx_len = scom->rx_len;
// scom2_rs485.tx_flag = TRUE;
// }
//清空缓存区,等待新的数据
memset(scom->rx_buff, 0, sizeof(scom->rx_buff));
scom->rx_len = 0;
}
// //清空缓存区,等待新的数据
// memset(scom->rx_buff, 0, sizeof(scom->rx_buff));
// scom->rx_len = 0;
// }
//来自上位机的数据是否准备完毕
if (scom->tx_flag == TRUE)
{
scom->tx_flag = FALSE;
HART_RTS(RTS_ON);
vTaskDelay(15);
// //来自上位机的数据是否准备完毕
// if (scom->tx_flag == TRUE)
// {
// scom->tx_flag = FALSE;
// HART_RTS(RTS_ON);
// vTaskDelay(15);
//将tx中的数据发送至HART设备
hart_send(&huart1, scom->tx_buff);
// //将tx中的数据发送至HART设备
// hart_send(&huart1, scom->tx_buff);
HART_RTS(RTS_OFF);
// HART_RTS(RTS_OFF);
//清空缓存区,等待新的数据
memset(scom->tx_buff, 0, sizeof(scom->tx_buff));
scom->tx_len = 0;
// //清空缓存区,等待新的数据
// memset(scom->tx_buff, 0, sizeof(scom->tx_buff));
// scom->tx_len = 0;
xTaskResumeFromISR(task_lcdHandle);
xTaskResumeFromISR(task_menuHandle);
screen_suspend_flag = 0;
}
}
// xTaskResumeFromISR(task_lcdHandle);
// xTaskResumeFromISR(task_menuHandle);
// screen_suspend_flag = 0;
// }
// }

View File

@ -79,7 +79,9 @@ void trans_hart2pc(void)
scom1_hart.rx_flag = FALSE;
//接收到的数据是否符合HART数据报符合则写入485的tx准备发送至上位机
if ((scom1_hart.rx_buff[0] == 0xff) && (scom1_hart.rx_buff[1] == 0xff) && (scom1_hart.rx_buff[scom1_hart.rx_len - 1] == 0xAA))
// if ((scom1_hart.rx_buff[0] == 0xff) && (scom1_hart.rx_buff[1] == 0xff) && (scom1_hart.rx_buff[scom1_hart.rx_len - 1] == 0xAA))
// {
if ((scom1_hart.rx_buff[0] == 0xff) && (scom1_hart.rx_buff[1] == 0xff))
{
memcpy(scom2_rs485.tx_buff, scom1_hart.rx_buff, scom1_hart.rx_len);
scom2_rs485.tx_len = scom1_hart.rx_len;
@ -106,7 +108,9 @@ void trans_pc2hart(void)
{
scom2_rs485.rx_flag = FALSE;
if ((scom2_rs485.rx_buff[0] == 0xff) && (scom2_rs485.rx_buff[1] == 0xff) && (scom2_rs485.rx_buff[scom2_rs485.rx_len - 1] == 0xaa))
// if ((scom2_rs485.rx_buff[0] == 0xff) && (scom2_rs485.rx_buff[1] == 0xff) && (scom2_rs485.rx_buff[scom2_rs485.rx_len - 1] == 0xaa))
// {
if ( (scom2_rs485.rx_buff[0] == 0xff) && (scom2_rs485.rx_buff[1] == 0xff) )
{
//接收到的数据是否符合HART数据报符合则写入HART的tx准备发送至HART设备
memcpy(scom1_hart.tx_buff, scom2_rs485.rx_buff, scom2_rs485.rx_len);
@ -120,11 +124,10 @@ void trans_pc2hart(void)
scom1_hart.tx_flag = FALSE;
HART_RTS(RTS_ON);
wu_delay_us(10000);
systick_delay_us(10000);
//将tx中的数据发送至HART设备
HAL_UART_Transmit_DMA(&huart1, scom1_hart.tx_buff, scom1_hart.tx_len);
}
//清空缓存区,等待新的数据

View File

@ -226,6 +226,16 @@ void modbus_reg_update_hold(void)
hold_deal_range_max();
hold_deal_range_min();
hold_deal_sample_interval();
hold_deal_plot_counts();
hold_deal_color_input();
hold_deal_color_output();
hold_deal_language_select();
}
void hold_deal_set_work_mode(void)
@ -490,6 +500,11 @@ void hold_deal_range_max(void)
}
}
}
else
{
//拒绝修改
HoldReg[HOLD_ADDR_PHY_UP] = range_max_prv;
}
}
else
{
@ -511,6 +526,11 @@ void hold_deal_range_max(void)
}
}
}
else
{
//拒绝修改
HoldReg[HOLD_ADDR_PHY_UP] = range_max_prv;
}
}
}
@ -541,6 +561,11 @@ void hold_deal_range_min(void)
}
}
}
else
{
//拒绝修改
HoldReg[HOLD_ADDR_PHY_LOW] = range_min_prv;
}
}
else
{
@ -549,9 +574,9 @@ void hold_deal_range_min(void)
int16_t hold_temp16 = 0;
memcpy(&hold_temp16, HoldReg + HOLD_ADDR_PHY_LOW, 2);
if( ((uint8_t)rg_min <= hold_temp16)&&(hold_temp16 <= *p16up) )
if( (rg_min <= hold_temp16)&&(hold_temp16 <= *p16up) )
{
*p16up = hold_temp16;
*p16low = hold_temp16;
if(menu_data.scr_now == SCREEN_MAIN)
{
@ -562,6 +587,11 @@ void hold_deal_range_min(void)
}
}
}
else
{
//拒绝修改
HoldReg[HOLD_ADDR_PHY_LOW] = range_min_prv;
}
}
}
@ -574,6 +604,11 @@ void hold_deal_sample_interval(void)
{
tabdata.item1_page0_sample_interval = HoldReg[HOLD_ADDR_SAMPLE_INTERVAL];
}
else
{
//拒绝修改
HoldReg[HOLD_ADDR_SAMPLE_INTERVAL] = tabdata.item1_page0_sample_interval;
}
}
}
@ -584,13 +619,21 @@ void hold_deal_plot_counts(void)
{
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];
tabdata.item1_page0_plot_num = 0x00FF & HoldReg[HOLD_ADDR_PLOT_COUNTS];
if(menu_data.scr_now == SCREEN_MAIN)
{
//更新显示模式,强制归零后自动恢复显示值(曲线只有在显示值变化时才刷新,于是在此处手动发生变化)
scr_main_chart_update();
pltdata.y_pri_value = 0;
pltdata.y_scd_value = 0;
}
}
else
{
//拒绝修改
HoldReg[HOLD_ADDR_PLOT_COUNTS] = 0x00FF & tabdata.item1_page0_plot_num;
}
}
}
@ -599,15 +642,20 @@ 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 )
if( HoldReg[HOLD_ADDR_INPUT_COLOR] <= 5 )
{
tabdata.item1_page0_color_input = (COLORS)HoldReg[HOLD_ADDR_PLOT_COUNTS];
tabdata.item1_page0_color_input = (COLORS)HoldReg[HOLD_ADDR_INPUT_COLOR];
if(menu_data.scr_now == SCREEN_MAIN)
{
scr_main_chart_update();
}
}
else
{
//拒绝修改
HoldReg[HOLD_ADDR_INPUT_COLOR] = 0x00FF & (uint8_t)tabdata.item1_page0_color_input;
}
}
}
@ -625,6 +673,11 @@ void hold_deal_color_output(void)
scr_main_chart_update();
}
}
else
{
//拒绝修改
HoldReg[HOLD_ADDR_OUTPUT_COLOR] = 0x00FF & (uint8_t)tabdata.item1_page0_color_output;
}
}
}
@ -639,6 +692,11 @@ void hold_deal_language_select(void)
setting_laguage_switch(tabdata.item3_page0_language);
}
else
{
//拒绝修改
HoldReg[HOLD_ADDR_LANGUAGE] = 0x00FF & (uint8_t)tabdata.item3_page0_language;
}
}
}

File diff suppressed because it is too large Load Diff