已经完成了网络,DI口,RS485的数据透传,可通过RS485接收数据
This commit is contained in:
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user