
引言无人机编队表演、工业机器人编排、分布式采集阵列 —— 这些场景有一个共同特征现场有一组同质的嵌入式设备运行期需要能自由组队、动态指定主从角色并由上位机统一调度。把这类需求拆开看到的是两个角色完全不同却又必须共存的事情编排通讯地面控制端上位机、调度终端对设备群整体下发指令、读取状态、推送升级关系是一控多设谁都可以被独立选中、被单独询问。分组数据分发设备群内部选出一台做主设备向同组内其他从设备实时广播数据关系是一主多从主从身份可以根据任务被动态切换。两件事都走 TCP但端口、角色、生命周期全都不同。本文给出的方案把它们拆成 两条独立链路 —— 一条用于编排通讯一条用于一主多从的数据分发 —— 让嵌入式设备既能自由组队、又能保证控制通道“永不断”。接下来将围绕整体架构、模块职责、关键设计决策与协议规划展开。一、整体架构系统里存在两条互相独立的 TCP 链路角色不同、端口不同、生命周期不同。1.1 数据链路Data Link一主多从主设备Master Device数据链路里的 TCP 服务器端监听端口TCP_CTRL_POAT 1024(应用层自定义与控制链路端口号不同)。主设备最多可接入 多少个从设备可由配置参数控制。从设备Slave Device数据链路里的 TCP 客户端主动连接主设备。数据流向主设备 → 所有从设备分发实时业务数据1.2 控制链路Control Link一控多设控制端Controller上位机控制链路里的 TCP 服务器端监听端口 TCP_CTRL_POAT 1025。所有设备主设备 全部从设备控制链路里的 TCP 客户端均主动连接控制端。控制端下发命令设备侧用 ACK 包回执、按需主动上报结果。一台设备同时持有两个 socket一个作为控制链路的客户端连接控制端另一个按身份选择 —— 主设备开 server 端口接从设备或从设备作为 client 连接主设备。两条链路相互解耦一条链路挂掉不影响另一条。1.3 控制链路与数据链路解耦在控制链路与数据链路中创建一个新角色-----协调者(TCP Coordinator)。收到控制端命令后由TCP Coordinator销毁数据链路中旧角色再创建新角色。1.3.1 数据链路角色主变从命令1.3.2 数据链路角色从变主命令1.3.3 数据链路角色从设备连接新主设备命令1.4 协议分层应用层在裸 TCP 字节流之上定义了统一的包结构----------------------------------------------------------------------------------------|Pkg_Header|Pkg_Type | Data_Len | Pkg_Num | Raw_Data |Pkg_Tail|----------------------------------------------------------------------------------------2B1B4B2B Data_Len2B总长度 11 Data_Len数据链路与控制链路使用差异化的包头包尾即使误连到对方端口解析也会立刻失败不会把包错传上业务层。