作者:JTX | 维护:JTX | 最近更新:2026-08-24 | 协议实现核对基线:当前工作区源码
本文档是 FIX AXI 对外 UDP 通信协议的统一维护入口。命令号以
FIX/fixUDPCommon.h 为准,报文解析与回包以 FIX/fixRemoteTask.cpp、
FIX/fixUDPServer.cpp 为准,命令行为以 FIX/fixOperationController.cpp
为准。
修改 UDP 端口、报文布局、编码、ACK、命令号、参数、响应或错误码时,必须在同一改动中更新本文档。320/321 或 400 的详细行为变化时,还应同步更新对应专题文档。
127.0.0.1:692470007000,不会发回请求的源端口。Client 应先绑定 7000 再发送请求,否则可能漏掉快速回包。
所有整数均为当前 Windows x86/x64 实现的小端序。Parameter Length 是字节数,不是字符数;Payload 后不附加 \0。
| Offset | 长度 | 请求包含义 | 响应包含义 |
|---|---|---|---|
| 0 | 6 bytes | 推荐写入 ASCII FIXFIX |
FIX 写入 ASCII FIX000 |
| 6 | 2 bytes | ACK 高 16 位;兼容模式应写 0 | 内部 32 位 ACK 模式回传高 16 位;对外模式为 0 |
| 8 | 2 bytes | ACK 低 16 位 | 原样回传 ACK 低 16 位 |
| 10 | 2 bytes | Command,无符号 16 位 | 普通响应为结果码;异步通知可为事件命令号 |
| 12 | 4 bytes | Payload 长度,有符号 32 位 | Payload 长度,有符号 32 位 |
| 16 | 可变 | Payload | Payload |
历史 Client 常先向前 8 字节写入 FIXFIXFI,随后在 Offset 6 覆盖 ACK 高 16 位。因此线上实际内容不是固定的 8 字节 FIXFIXFI。当前 Server 只校验报文至少 16 字节、前三个字节为 FIX,并严格要求声明的 Payload 长度等于 UDP 报文剩余长度。
Payload 不是无限长。IPv4 UDP 数据报理论上最多 65,507 字节,本协议包头占 16 字节;实际集成应远低于该上限,避免 IP 分片。
1..65535 循环并跳过当前未完成的值。0,只使用低 16 位。6000 用于历史点料计数异步通知,详见第 2.3 节。5001 是异步事件的 Command,不是 ACK。320、321、400 的请求和响应 Payload 明确使用 UTF-8 JSON。普通响应沿用同一个 16 字节包头,但 Offset 10 不再是原请求命令号,而是 FIXUDP_RET 结果码。Client 必须以 ACK 关联请求,不能用响应 Offset 10 识别原命令。
部分旧命令默认不回包。在发送 1302、Payload=1 后,FIX 会强制所有命令回包;该设置会持久化。表格中的“无(默认)”表示 1302=0 时不回包。
异步通知同样发送到 Client 的 7000 端口。其 Offset 10 可能是事件 Command,而不是 FIXUDP_RET;Client 应先按 ACK/Command 识别下列保留事件,再把其它普通包按结果码处理。
保存教学文件后,FIX 可主动发送:
| 字段 | 值 |
|---|---|
| ACK | 0 |
| Command | 5001 |
| Payload | 保存后的教学文件名称 |
开关的设计命令也是 5001,设计参数为 0(关闭)或 1(开启),设置键为 sd_ReturnUDPCMD5001AfterSaving。
即使开关已开启,当前实现也只在正在保存的图像最初由 UDP 加载时发送该通知。
当前实现限制: 当前源码中的 5001 开关命令误用了图像路径参数解析器,普通
0/1Payload 无法通过该分支。因此目前不要依赖 UDP 命令 5001 来修改开关;注册表/QSettings 中已存在非零设置时,保存通知本身仍按上表发送。修复实现时必须同步删除本限制说明。
历史点料流程修改计数后可主动发送:
| 字段 | 值 |
|---|---|
| ACK | 6000 |
| Command | 1(与 RET_GOOD 数值相同) |
| Payload | 修改后的计数文本 |
该通知只在当前图像由 UDP 加载时发送,属于 Counter 历史集成功能,不是 AXI 检测请求的普通响应。
表格中的参数以分号 ; 分隔,除非另有说明。
| Command | 描述 | 参数格式 | 默认返回 | 备注 |
|---|---|---|---|---|
| 101 | 加载图像并执行教学文件 | 图像路径;或 图像路径;教学文件名称[;index[;barcode[;imageName]]] |
结果码,可带自定义 Payload | 仅传图像路径时实际只加载图像。图像路径必须带受支持扩展名,参数解析器据此识别路径结束位置。 |
| 120 | 切换教学文件分组 | 空:显示全部分组;组名:切换到指定分组 |
结果码;Payload 为该范围内教学文件列表 | 分组不存在时会创建。列表以 ; 分隔。 |
| 121 | 删除教学文件分组 | 组名 |
结果码 | 不能删除 Default 和保留虚拟分组。只删除该组独占的教学文件;被其它分组引用的教学文件会保留。 |
| 122 | 重命名教学文件分组 | 原组名;新组名 |
结果码 | 不能重命名 Default 或保留虚拟分组;目标组不能已存在。 |
| 1002 | 加载并显示图像 | 图像路径 |
无(默认) | 创建教学文件的交互流程常先调用本命令。 |
| 1014 | 加载图像和校准信息 | 图像路径;图像路径;mmPerPixel;或 图像路径;mmPerPixel;globalX;globalY |
无(默认) | 1.533 表示 1 pixel = 1.533 mm。源码也接受 3 段形式,但第三段会被忽略,不应使用。 |
| 1015 | 设置当前图像的校准信息 | mmPerPixel |
无(默认) | 协议传入单位固定为 mm/pixel;界面可换算显示单位。 |
| 1100 | 保存/创建 2D 教学文件 | 见第 3.1 节 | 结果码 | 基于当前 2D 图像与当前教学链保存。 |
| 1101 | 应用教学文件 | 教学文件名称 |
结果码 | 应用到当前数据。 |
| 1102 | 编辑教学文件 | 教学文件名称 |
结果码 | 无法进入编辑时返回 64。 |
| 1103 | 删除教学文件 | 教学文件名称 |
结果码 | 教学文件名称在教学目录内全局唯一;删除文件及关联数据,并清理分组引用。 |
| 1104 | 获取教学文件列表 | 空:全部;组名:指定分组 |
结果码 0;Payload 为名称列表 |
名称以 ; 分隔;没有结果时 Payload 为空。 |
| 1105 | 获取正在编辑的教学文件名称 | 空 | 结果码 0;Payload 为名称或空 |
返回当前教学文件名。 |
| 参数 | 行为 |
|---|---|
教学文件名称 |
将当前图像/教学链保存为教学文件 |
教学文件名称;组名 |
切换或创建分组后保存 |
教学文件名称;组名;图像路径 |
先加载指定图像,再保存 |
教学文件名称;组名;图像路径;mmPerPixel |
先按 mm/pixel 校准加载指定图像,再保存 |
尾随空分号会被忽略。超过 4 段返回 RET_ParameterError。
| Command | 描述 | 参数格式 | 默认返回 | 备注 |
|---|---|---|---|---|
| 300 | 旧共享内存配置命令 | 任意 | 8,Payload=CONFIG_MANAGED_BY_FIXCC |
已停止提供配置功能。 队列模式、容量和 GPU 分配由 FIXCC 管理并在 FIX 重启后生效;旧的 x;y;z 说明已失效。 |
| 301 | 从目录加载体数据(Volume) | 目录;宽;高;层数;cvType;spacingX;spacingY;spacingZ |
结果码;成功 Payload=OK |
8 段均必填,spacing 单位为 mm。 |
| 302 | 从目录加载投影数据(Projection) | 目录;宽;高[;张数][;cvType] |
结果码;成功 Payload=OK |
张数默认自动,类型默认 16u。ExternalReconDualQueue 模式不支持本命令。 |
| 303 | 加载投影并触发 CT 重建 | 投影目录;重建 JSON 文件路径 |
结果码;成功 Payload=OK |
尺寸和类型从 JSON 读取;回包表示重建已触发,不等待物理重建结束。ExternalReconDualQueue 模式不支持本命令。 |
| 311 | 加载体数据并应用教学文件 | 体数据目录;教学文件名称 |
结果码;Payload 通常为 OK |
仅处理 Volume,不处理 Projection。 教学文件应用失败后函数仍继续完成,但响应结果码会保留应用错误;Client 必须以结果码而不是 OK Payload 判断成功。 |
| 320 | 从投影目录直接创建 3D 教学文件 | UTF-8 JSON,见第 4.2 节 | 结果码 + UTF-8 JSON | 可选择是否自动重建;支持单队列和 ExternalReconDualQueue。 |
| 321 | 从体数据目录直接创建 3D 教学文件 | UTF-8 JSON,见第 4.3 节 | 结果码 + UTF-8 JSON | 不启动重建。 |
301/302/321 支持的 cvType 写法如下:
| 类型 | 支持写法 |
|---|---|
| 8-bit unsigned | u8、8u、CV_8UC1 |
| 16-bit unsigned | u16、16u、CV_16UC1 |
| 16-bit signed | s16、16s、CV_16SC1 |
| 32-bit float | f32、32f、CV_32FC1 |
301/302 对未知字符串会兼容性回退为 16u;321 会严格拒绝未知类型。
请求 Payload:
{
"schemaVersion": 1,
"teachingFile": "ProjectionTeaching",
"group": "Default",
"projectionDirectory": "D:/Data/Projection",
"reconConfigPath": "D:/Data/Projection/ReconstructionConfig.json",
"autoReconstruct": false,
"overwrite": false
}
字段说明:
| 字段 | 必填 | 默认值 | 说明 |
|---|---|---|---|
schemaVersion |
否 | 1 |
如果提供,只接受整数 1。 |
teachingFile |
是 | — | 教学文件名称,不含 .fixt。 |
group |
否 | Default |
不存在时创建。空字符串也按 Default。 |
projectionDirectory |
是 | — | 只包含 RAW,或只包含 TIFF/TIFF;两类不能混放。建议使用绝对本地路径。 |
reconConfigPath |
是 | — | 硬盘上的重建配置 JSON。FIX 读取一次并记录 SHA-256。 |
autoReconstruct |
否 | false |
false:应用配置后直接保存教学文件;true:重建成功后再保存。 |
overwrite |
否 | false |
是否允许覆盖同名 .fixt。 |
重建配置优先从根对象读取 width、height、depth、cvType;宽高可回退到 detector.sizeU/sizeV,张数可回退到 geometry.scanCount,类型可回退到 detector.dataType。RAW 数据需要有效宽高。加载后的投影堆栈必须匹配配置中声明的尺寸。
autoReconstruct=false 时不会启动重建;autoReconstruct=true 时,单队列调用本机重建,ExternalReconDualQueue 调用 ReconService。后者直到物理重建完成且教学文件保存成功后才回包;重建失败时不保存目标教学文件。
成功响应示例:
{"command":320,"status":"created","teachingFile":"ProjectionTeaching","group":"Default","sourceType":"projection","sourceDirectory":"D:/Data/Projection","autoReconstruct":true,"reconstructed":true,"overwrite":false,"reconConfigPath":"D:/Data/Projection/ReconstructionConfig.json","reconConfigSha256":"..."}
失败时 Offset 10 为相应结果码,Payload 示例:
{"command":320,"status":"error","message":"..."}
请求 Payload:
{
"schemaVersion": 1,
"teachingFile": "VolumeTeaching",
"group": "Default",
"dataDirectory": "D:/Data/Volume",
"width": 2400,
"height": 2400,
"depth": 120,
"cvType": "u16",
"spacingX": 0.005,
"spacingY": 0.005,
"spacingZ": 0.005,
"overwrite": false
}
teachingFile、dataDirectory、cvType、width、height、depth 和三个 spacing 均必填。group 默认 Default,overwrite 默认 false,schemaVersion 规则与 320 相同。autoReconstruct 选项。成功响应结构与 320 相同,但 command=321、sourceType=volume、autoReconstruct=false、reconstructed=false,且没有重建配置路径和哈希。
更集中的 320/321 示例见 UDP_320_321_3D教学文件.md。
| Command | 描述 | 参数格式 | 默认返回 | 备注 |
|---|---|---|---|---|
| 400 | 应用 W/L 效果 JSON 并保存图像 | UTF-8 JSON:inputPath、effectJsonPath、outputPath、loadToViewer |
结果码;成功 Payload=OK |
三个路径必须是绝对本地路径;loadToViewer 为整数 0..3。 |
详细字段、Viewer 行为和错误说明见 UDP_400_效果JSON说明.md。
| Command | 描述 | 参数格式 | 默认返回 | 备注 |
|---|---|---|---|---|
| 1006 | 窗口置顶 | 空 | 无(默认) | — |
| 1007 | 取消窗口置顶 | 空 | 无(默认) | — |
| 1200 | 显示主窗口 | 空;或 x,y,w,h |
无(默认) | 坐标可选。普通非被动模式下可能直接视为成功。 |
| 1201 | 隐藏主窗口 | 空 | 无(默认) | — |
| 1202 | 关闭 FIX | 空 | 无(默认) | 约 300 ms 后执行关闭。 |
| 1204 | 显示参数面板 | 空;或 x,y,w,h |
无(默认) | — |
| 1205 | 隐藏参数面板 | 空 | 无(默认) | — |
| 1211 | 获取主窗口句柄 | 空 | 结果码 0;Payload 为十进制句柄文本 |
不是固定 8 字节二进制。 |
| 1212 | 获取参数面板句柄 | 空 | 结果码 0;Payload 为十进制句柄文本 |
不是固定 8 字节二进制。 |
| 1213 | 设置主窗口父窗口和区域 | parentHandle,x,y,w,h |
无(默认) | 五段逗号分隔的十进制文本。 |
| 1214 | 设置参数面板父窗口和区域 | parentHandle,x,y,w,h |
无(默认) | 五段逗号分隔的十进制文本。 |
| 1301 | 设置/查询未嵌入时的 FIX 可见性 | 0 隐藏;1 显示;2 查询 |
查询时 Payload=0 或 1 |
设置操作的 Payload 无业务含义。 |
| 1302 | 设置/查询 UDP 回应模式 | 0 默认;1 回应全部命令;2 查询 |
查询时 Payload=0 或 1 |
设置持久化。 |
| 1303 | 设置/查询关闭按钮行为 | 0 关闭;1 隐藏;2 查询 |
查询时 Payload=0 或 1 |
设置持久化。 |
| 2301 | 获取 FIX Build 号 | 空 | 结果码 0;Payload 为十进制 Build 号文本 |
可用于替代旧资料中不存在的 --build 启动参数。 |
| 2302 | 设置用户模式 | Operator 或 Engineer |
默认会回包;勿用回包校验参数 | 是普通文本,不是 JSON 数组;兼容别名为 User/Admin。当前实现对其它文本不报参数错误,而是按 Engineer 行为读取。 |
| 2303 | 设置软件标记显示/隐藏 | Hide 或 Show |
默认会回包;勿用回包校验参数 | 是普通文本,不是 JSON 数组;只有 Hide 会隐藏,其它文本均按显示处理。 |
| 2304 | 设置点料结果字体 | color,fontFace,fontScale,thickness,position |
默认会回包;勿用回包校验参数 | 五段逗号分隔;属于 Counter 显示设置。 |
| 5001 | 设置保存教学文件后的 5001 通知 | 设计值:0 或 1 |
无(默认) | 当前实现限制见第 2.2 节。 |
1301~1303 和 2302~2304 的当前控制器函数没有完整的非法参数验证;其中部分函数也不主动清空此前的结果状态。Client 应只发送表中规定值,并只在查询模式下解释查询 Payload。
结果码是位标志,部分检测流程会用按位或组合多个错误。0、1、2 也可作为完整检测状态使用。
| 数值 | 名称 | 说明 |
|---|---|---|
| 0 | RET_OK |
执行成功 |
| 1 | RET_GOOD |
检测结果 GOOD |
| 2 | RET_NG |
检测结果 NG |
| 4 | RET_MISS |
检测目标缺失 / MISS |
| 8 | RET_ParameterError |
参数格式或参数值错误 |
| 16 | RET_ImageNotExists |
图像或所需数据不存在/无法加载 |
| 32 | RET_TeachingFileNotExists |
教学文件不存在或无有效检测模块 |
| 64 | RET_TeachingFileExecError |
教学文件执行或编辑失败 |
| 128 | RET_CaptureImageError |
采图异常 |
| 256 | RET_ImageAlignmentError |
图像对齐错误 |
| 512 | RET_ObjectMatchingError |
目标物体匹配错误或不存在 |
| 16384 | RET_Unknown |
未分类错误;具体原因参阅 Payload 和 FIX 日志 |
例如 RET_NG | RET_ImageNotExists = 18。Client 解析组合结果时应逐位检查,不应只枚举表内单值。
FIX.exe --passive --hideall。
--passive:切换到用于外部嵌入的运行模式。--hideall:启动后隐藏界面。--build 后立即显示版本并退出的实现;请使用 UDP 2301 查询 Build 号。127.0.0.1:7000,启动接收线程。1213 和 1214,把 FIX 主窗口和参数面板嵌入控制软件。1200/1201 和 1204/1205 控制显示。1002,在 FIX 中加载并显示图像。1100 自动保存当前状态。320。通过 autoReconstruct 选择是否先执行重建。321。该命令不重建。320 的 autoReconstruct=true 可能长时间无中间回包。本文档描述 FIX AXI 对外集成所需的稳定命令。共享枚举中还包含 Counter 专用检测命令、内部测试命令和历史命令;它们不是本协议的 AXI 对外承诺,不应仅凭枚举值直接接入。其中:
1106 已废弃并保留编号,不得复用;调用会落入未知命令处理。8000..8004 为内部命令;8003 当前只有枚举,没有执行分支。