Przeglądaj źródła

增加了触摸屏上主站的代码

deepseek
ywh 1 miesiąc temu
rodzic
commit
a338c8cfa3
3 zmienionych plików z 28 dodań i 4 usunięć
  1. +24
    -3
      Core/Src/main.c
  2. +2
    -0
      Modbus/Inc/modbus_rtu_slave.h
  3. +2
    -1
      Modbus/Src/modbus_rtu_slave.c

+ 24
- 3
Core/Src/main.c Wyświetl plik

@@ -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;


+ 2
- 0
Modbus/Inc/modbus_rtu_slave.h Wyświetl plik

@@ -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)



+ 2
- 1
Modbus/Src/modbus_rtu_slave.c Wyświetl plik

@@ -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<MODBUS_RETAINED_D_COUNT;index++)


Ładowanie…
Anuluj
Zapisz