已经完成了网络,DI口,RS485的数据透传,可通过RS485接收数据

This commit is contained in:
2026-05-06 10:55:55 +08:00
parent 0eea5c1424
commit 61530dccec
258 changed files with 40311 additions and 4851 deletions

View File

@ -27,6 +27,8 @@
#include "cmd_parser.h"
#include "uart2_print.h"
#include "debug_log.h"
#include "data_source.h"
#include "uart3_protocol_discriminator.h"
#include "uart3_protocol_discriminator.h"
#include "uart3_passthrough.h"
#include "uart3_smart_router_config.h"
@ -36,7 +38,7 @@
* 调试宏定义
*============================================================================*/
/* DEBUG_CMD_ROUTER: 调试日志开关置1时启用路由过程日志输出 */
#define DEBUG_CMD_ROUTER 1
#define DEBUG_CMD_ROUTER 0
#if DEBUG_CMD_ROUTER
/* 路由模块日志宏,带模块前缀"[ROUTER]"方便过滤 */
@ -375,6 +377,7 @@ void CmdRouter_Task(void)
*----------------------------------------------------------*/
#if UART3_SMART_ROUTING_ENABLED
{
LOG_DEBUG("UART3", "Protocol state: %d", UART3_Protocol_GetState());
uint8_t byte;
while (MultiUART_ReadByte(PORT_UART3, &byte) > 0) {
@ -387,6 +390,7 @@ void CmdRouter_Task(void)
break;
case ROUTE_PASSTHROUGH:
// 透传数据暂时不加包头由timeout处理时统一加
Passthrough_PushByte(byte);
LOG_DEBUG("UART3", "PTX byte: 0x%02X", byte);
break;
@ -397,11 +401,31 @@ void CmdRouter_Task(void)
}
if (UART3_Protocol_CheckTimeout(current_tick)) {
LOG_DEBUG("UART3", "CheckTimeout triggered");
uint8_t buffer[128];
uint16_t length;
if (UART3_Protocol_GetPassthroughData(buffer, &length)) {
Passthrough_PushBuffer(buffer, length);
LOG_INFO("UART3", "PASSTHROUGH: %d bytes queued", (int)length);
LOG_DEBUG("UART3", "Got passthrough data, length=%d", length);
// 构造ASCII格式的RS485数据消息
char msg[512]; // 足够容纳128字节数据 + 消息头
int msg_len = snprintf(msg, sizeof(msg), "$RS485_DATA,");
// 直接追加原始数据假设ASCII可打印
memcpy(msg + msg_len, buffer, length);
msg_len += length;
msg[msg_len] = '\0'; // 确保字符串结束
// 计算校验和(跳过'$'
uint8_t cs = 0;
for (int i = 1; i < msg_len; i++) {
cs ^= (uint8_t)msg[i];
}
// 追加校验和和结束符
int appended = snprintf(msg + msg_len, sizeof(msg) - msg_len, "*%02X\r\n", cs);
LOG_DEBUG("UART3", "Constructed message: %s", msg);
// 发送ASCII消息
MultiUART_SendString(PORT_UART1, msg);
LOG_INFO("UART3", "PASSTHROUGH: %d bytes sent as ASCII message", (int)length);
} else {
LOG_DEBUG("UART3", "No passthrough data");
}
}