feat: 心跳包新增固件版本号字段,更新协议文档
This commit is contained in:
@ -48,6 +48,32 @@ extern "C" {
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
// 基准年份
|
||||
#define XTELL_BASE_YEAR 2026
|
||||
/**
|
||||
* 宏定义:3-4-5-4 固件版本编码
|
||||
* y: Year (2026-2033)
|
||||
* m: Month (1-12)
|
||||
* d: Day (1-31)
|
||||
* b: Build (0-15)
|
||||
*/
|
||||
#define MAKE_XTELL_CODE(y, m, d, b) ( \
|
||||
((( (y) - XTELL_BASE_YEAR ) & 0x07) << 13) | \
|
||||
(((m) & 0x0F) << 9) | \
|
||||
(((d) & 0x1F) << 4) | \
|
||||
(((b) & 0x0F) << 0) \
|
||||
)
|
||||
|
||||
// 举例:2026年3月19日,第10次编译 (b=9)
|
||||
// 计算过程: (0 << 13) | (3 << 9) | (19 << 4) | 9 = 0x0600 | 0x0130 | 0x0009
|
||||
#define XTELL_FIRMWARE_CODE MAKE_XTELL_CODE(2026, 5, 10, 1)
|
||||
// ---- - -- -
|
||||
// | | | |
|
||||
// | | | 编译次数
|
||||
// | | 日
|
||||
// | 月
|
||||
// 年
|
||||
|
||||
#ifndef USE_W5500
|
||||
#define USE_W5500 1 /* 默认启用W5500以太网模块 */
|
||||
#endif
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
|
||||
/* Modbus TCP 配置 */
|
||||
#if TEST_A701
|
||||
#define MODBUS_SERVER_IP {192, 168, 6, 4} /* A701 测试服务器 */
|
||||
#define MODBUS_SERVER_IP {192, 168, 0, 6} /* A701 测试服务器 */
|
||||
#else
|
||||
#define MODBUS_SERVER_IP {192, 168, 0, 1} /* 现场生产服务器 */
|
||||
#endif
|
||||
|
||||
@ -388,21 +388,35 @@ int main(void)
|
||||
#if USE_IO_MONITOR
|
||||
if (HAL_GetTick() - g_last_hb_tick >= 30000) {
|
||||
g_last_hb_tick = HAL_GetTick();
|
||||
uint8_t hb_payload[5]; // 扩充为 5 字节
|
||||
hb_payload[0] = IO_Monitor_GetAllStates();
|
||||
hb_payload[1] = (uint8_t)(g_hb_seq >> 8);
|
||||
hb_payload[2] = (uint8_t)(g_hb_seq & 0xFF);
|
||||
|
||||
uint16_t modbus_val = 0xFFFF; // 默认值
|
||||
uint8_t hb_payload[7];
|
||||
uint8_t io_state = IO_Monitor_GetAllStates();
|
||||
|
||||
#if USE_W5500
|
||||
modbus_val = ModbusTCP_Get_LastRegVal(); // 获取最新 Modbus 寄存器值
|
||||
uint8_t phy_link_status;
|
||||
ctlwizchip(CW_GET_PHYLINK, (void *)&phy_link_status);
|
||||
if (phy_link_status == PHY_LINK_ON) {
|
||||
io_state |= 0x80;
|
||||
}
|
||||
#endif
|
||||
hb_payload[3] = (uint8_t)(modbus_val >> 8);
|
||||
hb_payload[4] = (uint8_t)(modbus_val & 0xFF);
|
||||
|
||||
|
||||
hb_payload[0] = (uint8_t)(g_hb_seq >> 8);
|
||||
hb_payload[1] = (uint8_t)(g_hb_seq & 0xFF);
|
||||
|
||||
hb_payload[2] = (uint8_t)(XTELL_FIRMWARE_CODE >> 8);
|
||||
hb_payload[3] = (uint8_t)(XTELL_FIRMWARE_CODE & 0xFF);
|
||||
|
||||
hb_payload[4] = io_state;
|
||||
|
||||
uint16_t modbus_val = 0xFFFF;
|
||||
#if USE_W5500
|
||||
modbus_val = ModbusTCP_Get_LastRegVal();
|
||||
#endif
|
||||
hb_payload[5] = (uint8_t)(modbus_val >> 8);
|
||||
hb_payload[6] = (uint8_t)(modbus_val & 0xFF);
|
||||
|
||||
g_hb_seq++;
|
||||
|
||||
RF433_SendPacket(PROTO_TYPE_HB, hb_payload, 5); // 发送 5 字节
|
||||
|
||||
RF433_SendPacket(PROTO_TYPE_HB, hb_payload, sizeof(hb_payload));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user