diff --git a/Core/Src/main.c b/Core/Src/main.c index 4f3cc98..2690525 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -88,13 +88,34 @@ static void AppTaskStart(void *p_arg) * 4x地址2:收到的有效Modbus帧数; * 4x地址10:触摸屏读写测试值,由协议层保存。 */ - (void)ModbusSlaveSetHoldingRegister( + (void)ModbusSlaveSetHoldingRegister(//OS时钟 HMI_REG_UPTIME_SECONDS, (uint16_t)(OSTimeGet() / OS_TICKS_PER_SEC)); - (void)ModbusSlaveSetHoldingRegister( + (void)ModbusSlaveSetHoldingRegister(//有效帧计数 HMI_REG_RX_FRAME_COUNT, (uint16_t)ModbusSlaveStatistics.validFrameCount); + (void)ModbusSlaveSetHoldingRegister(//从站地址不匹配计数 + 3, + (uint16_t)ModbusSlaveStatistics.ignoredAddressCount); + (void)ModbusSlaveSetHoldingRegister(//非法功能码计数 + 4, + (uint16_t)ModbusSlaveStatistics.illegalFunctionCount); + + (void)ModbusSlaveSetHoldingRegister(//非法地址计数 + 5, + (uint16_t)ModbusSlaveStatistics.illegalAddressCount); + + (void)ModbusSlaveSetHoldingRegister(//非法数据值计数 + 6, + (uint16_t)ModbusSlaveStatistics.illegalValueCount); + + + + + + + /* * 协议解析和应答在任务上下文完成,中断只接收一帧并设置标志。 * 每1ms轮询一次,不在串口中断中执行耗时的CRC和寄存器操作。 @@ -273,7 +294,7 @@ static void MX_USART1_UART_Init(void) /* USER CODE END USART1_Init 1 */ huart1.Instance = USART1; - huart1.Init.BaudRate = 19200; + huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_9B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_EVEN; diff --git a/Modbus/Inc/modbus_rtu_slave.h b/Modbus/Inc/modbus_rtu_slave.h index 23ab2bc..04fb106 100644 --- a/Modbus/Inc/modbus_rtu_slave.h +++ b/Modbus/Inc/modbus_rtu_slave.h @@ -31,6 +31,8 @@ extern "C" #define HMI_REG_DEVICE_ID (0U) #define HMI_REG_UPTIME_SECONDS (1U) #define HMI_REG_RX_FRAME_COUNT (2U) + + #define HMI_REG_WRITE_TEST (10U) #define HMI_COIL_WRITE_TEST (0U) diff --git a/Modbus/Src/modbus_rtu_slave.c b/Modbus/Src/modbus_rtu_slave.c index c53e2ae..ed64eb2 100644 --- a/Modbus/Src/modbus_rtu_slave.c +++ b/Modbus/Src/modbus_rtu_slave.c @@ -812,9 +812,10 @@ void ModbusRetainedRegistersLoad(void) backupData->magic = MODBUS_BACKUP_MAGIC; } } -void ModbusRetainedRegistersPoll() +void ModbusRetainedRegistersPoll(void) { uint16_t index; + // uint16_t address; uint16_t value; for(index=0;index