请输入
菜单

FIX AXI UDP 通信协议(通用)

作者: JT下载

FIX AXI UDP 通信协议

作者: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 的详细行为变化时,还应同步更新对应专题文档。


1. 传输约定

1.1 UDP 端口与地址

  • FIX 监听地址: 127.0.0.1:6924
  • Client 回包监听端口: 7000
  • FIX 把普通响应发到请求来源 IP 的固定端口 7000,不会发回请求的源端口。
  • 当前 FIX 只绑定本机回环地址,不接受其它计算机通过局域网直接访问。
  • 普通请求响应会保留该请求的来源 IP;6000/5001 等历史异步通知使用最近一次请求的来源 IP,因此多 Client 并发时不应依赖异步通知的准确路由。

Client 应先绑定 7000 再发送请求,否则可能漏掉快速回包。

1.2 16 字节包头

所有整数均为当前 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.3 ACK

  • Client 应为请求分配 ACK,用它关联异步回包;推荐使用 1..65535 循环并跳过当前未完成的值。
  • 协议预留了 ACK 高 16 位,但 FIX 仅在 Floatech 内部计算机模式下组合为 32 位 ACK。对外兼容 Client 必须把高 16 位设为 0,只使用低 16 位。
  • 普通响应会回传请求 ACK。
  • ACK 6000 用于历史点料计数异步通知,详见第 2.3 节。
  • 5001 是异步事件的 Command,不是 ACK。

1.4 字符编码

  • 命令 320321400 的请求和响应 Payload 明确使用 UTF-8 JSON
  • 其它请求 Payload 当前通过 Windows 本地 8-bit 编码解析;普通响应当前使用 Latin-1 写包。
  • 为避免跨机器区域设置和中文文本回包问题,非 JSON 命令的路径、组名和教学文件名优先使用 ASCII;如必须使用非 ASCII,Client 与目标 FIX 必须做实际联调。

1.5 普通响应

普通响应沿用同一个 16 字节包头,但 Offset 10 不再是原请求命令号,而是 FIXUDP_RET 结果码。Client 必须以 ACK 关联请求,不能用响应 Offset 10 识别原命令。

部分旧命令默认不回包。在发送 1302、Payload=1 后,FIX 会强制所有命令回包;该设置会持久化。表格中的“无(默认)”表示 1302=0 时不回包。


2. 异步通知

2.1 通知包格式

异步通知同样发送到 Client 的 7000 端口。其 Offset 10 可能是事件 Command,而不是 FIXUDP_RET;Client 应先按 ACK/Command 识别下列保留事件,再把其它普通包按结果码处理。

2.2 教学文件保存通知:Command 5001

保存教学文件后,FIX 可主动发送:

字段
ACK 0
Command 5001
Payload 保存后的教学文件名称

开关的设计命令也是 5001,设计参数为 0(关闭)或 1(开启),设置键为 sd_ReturnUDPCMD5001AfterSaving

即使开关已开启,当前实现也只在正在保存的图像最初由 UDP 加载时发送该通知。

当前实现限制: 当前源码中的 5001 开关命令误用了图像路径参数解析器,普通 0/1 Payload 无法通过该分支。因此目前不要依赖 UDP 命令 5001 来修改开关;注册表/QSettings 中已存在非零设置时,保存通知本身仍按上表发送。修复实现时必须同步删除本限制说明。

2.3 点料计数修改通知:ACK 6000

历史点料流程修改计数后可主动发送:

字段
ACK 6000
Command 1(与 RET_GOOD 数值相同)
Payload 修改后的计数文本

该通知只在当前图像由 UDP 加载时发送,属于 Counter 历史集成功能,不是 AXI 检测请求的普通响应。


3. 常用检测与教学命令

表格中的参数以分号 ; 分隔,除非另有说明。

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 为名称或空 返回当前教学文件名。

3.1 命令 1100 参数

参数 行为
教学文件名称 将当前图像/教学链保存为教学文件
教学文件名称;组名 切换或创建分组后保存
教学文件名称;组名;图像路径 先加载指定图像,再保存
教学文件名称;组名;图像路径;mmPerPixel 先按 mm/pixel 校准加载指定图像,再保存

尾随空分号会被忽略。超过 4 段返回 RET_ParameterError


4. 3D 通信命令

4.1 命令汇总

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 u88uCV_8UC1
16-bit unsigned u1616uCV_16UC1
16-bit signed s1616sCV_16SC1
32-bit float f3232fCV_32FC1

301/302 对未知字符串会兼容性回退为 16u;321 会严格拒绝未知类型。

4.2 命令 320:从投影创建教学文件

请求 Payload:

json 复制代码
{
  "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

重建配置优先从根对象读取 widthheightdepthcvType;宽高可回退到 detector.sizeU/sizeV,张数可回退到 geometry.scanCount,类型可回退到 detector.dataType。RAW 数据需要有效宽高。加载后的投影堆栈必须匹配配置中声明的尺寸。

autoReconstruct=false 时不会启动重建;autoReconstruct=true 时,单队列调用本机重建,ExternalReconDualQueue 调用 ReconService。后者直到物理重建完成且教学文件保存成功后才回包;重建失败时不保存目标教学文件。

成功响应示例:

json 复制代码
{"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 示例:

json 复制代码
{"command":320,"status":"error","message":"..."}

4.3 命令 321:从体数据创建教学文件

请求 Payload:

json 复制代码
{
  "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
}
  • teachingFiledataDirectorycvTypewidthheightdepth 和三个 spacing 均必填。
  • 三个尺寸必须为正整数;三个 spacing 必须为正的有限数,单位为 mm。
  • group 默认 Defaultoverwrite 默认 falseschemaVersion 规则与 320 相同。
  • 目录只能包含 RAW 或 TIFF/TIFF,不能混放;实际加载结果的尺寸和类型必须与请求完全一致。
  • 321 不启动重建,也没有 autoReconstruct 选项。

成功响应结构与 320 相同,但 command=321sourceType=volumeautoReconstruct=falsereconstructed=false,且没有重建配置路径和哈希。

更集中的 320/321 示例见 UDP_320_321_3D教学文件.md


5. 图像效果命令

Command 描述 参数格式 默认返回 备注
400 应用 W/L 效果 JSON 并保存图像 UTF-8 JSON:inputPatheffectJsonPathoutputPathloadToViewer 结果码;成功 Payload=OK 三个路径必须是绝对本地路径;loadToViewer 为整数 0..3

详细字段、Viewer 行为和错误说明见 UDP_400_效果JSON说明.md


6. 窗口、面板和设置命令

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=01 设置操作的 Payload 无业务含义。
1302 设置/查询 UDP 回应模式 0 默认;1 回应全部命令;2 查询 查询时 Payload=01 设置持久化。
1303 设置/查询关闭按钮行为 0 关闭;1 隐藏;2 查询 查询时 Payload=01 设置持久化。
2301 获取 FIX Build 号 结果码 0;Payload 为十进制 Build 号文本 可用于替代旧资料中不存在的 --build 启动参数。
2302 设置用户模式 OperatorEngineer 默认会回包;勿用回包校验参数 是普通文本,不是 JSON 数组;兼容别名为 User/Admin。当前实现对其它文本不报参数错误,而是按 Engineer 行为读取。
2303 设置软件标记显示/隐藏 HideShow 默认会回包;勿用回包校验参数 是普通文本,不是 JSON 数组;只有 Hide 会隐藏,其它文本均按显示处理。
2304 设置点料结果字体 color,fontFace,fontScale,thickness,position 默认会回包;勿用回包校验参数 五段逗号分隔;属于 Counter 显示设置。
5001 设置保存教学文件后的 5001 通知 设计值:01 无(默认) 当前实现限制见第 2.2 节。

1301~1303 和 2302~2304 的当前控制器函数没有完整的非法参数验证;其中部分函数也不主动清空此前的结果状态。Client 应只发送表中规定值,并只在查询模式下解释查询 Payload。


7. 错误码

结果码是位标志,部分检测流程会用按位或组合多个错误。012 也可作为完整检测状态使用。

数值 名称 说明
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 解析组合结果时应逐位检查,不应只枚举表内单值。


8. 主窗口和参数面板集成

8.1 启动与嵌入流程

  1. 启动控制软件。
  2. 控制软件启动 FIX.exe --passive --hideall
    • --passive:切换到用于外部嵌入的运行模式。
    • --hideall:启动后隐藏界面。
    • 当前源码没有 --build 后立即显示版本并退出的实现;请使用 UDP 2301 查询 Build 号。
  3. Client 绑定 127.0.0.1:7000,启动接收线程。
  4. 获取或准备控制软件内的父窗口句柄和显示区域。
  5. 发送 12131214,把 FIX 主窗口和参数面板嵌入控制软件。
  6. 按需使用 1200/12011204/1205 控制显示。

8.2 交互创建 2D 教学文件

  1. 控制软件采图并保存到硬盘。
  2. 发送 1002,在 FIX 中加载并显示图像。
  3. 显示 FIX 主窗口和参数面板。
  4. 用户在 FIX 中配置教学链并保存;或由 Client 发送 1100 自动保存当前状态。

8.3 直接创建 3D 教学文件

  • 投影数据:发送 320。通过 autoReconstruct 选择是否先执行重建。
  • 体数据:发送 321。该命令不重建。
  • 两种命令都应等待匹配 ACK 的最终响应后再使用生成的教学文件;尤其 320autoReconstruct=true 可能长时间无中间回包。

9. 文档范围和非公开命令

本文档描述 FIX AXI 对外集成所需的稳定命令。共享枚举中还包含 Counter 专用检测命令、内部测试命令和历史命令;它们不是本协议的 AXI 对外承诺,不应仅凭枚举值直接接入。其中:

  • 1106 已废弃并保留编号,不得复用;调用会落入未知命令处理。
  • 8000..8004 为内部命令;8003 当前只有枚举,没有执行分支。
  • Counter 专用命令的行为应由单独的 Counter 集成文档维护。
上一个
fixSharedMemoryDll — filter.* 命令族接口手册
下一个
FIX UDP Communication Protocol (General)
最近修改: 2026-08-24Powered by