← 返回主页

Pipeline Document

EasyPoint 分配逻辑说明

基于代码实际行为整理,覆盖从 Excel 点表解析到 CPS 输出的主流程。

1. 总体流程概览 Pipeline

上传 Excel 点表 (.xlsx)
读取配置(Schema / BACnet)
解析所有 DDC-* Sheet
逐个 DDC 生成 .cps
打包 ZIP 并下载

Web 端通过 /api/generate 触发生成入口。每个 DDC Sheet 对应一个 CPS 文件,包含一个 CW 主模块和该 Sheet 中全部 IO 模块。

2. Excel 点表解析 ExcelParser

2.1 Sheet 与模块识别

  • 仅处理名称以 DDC- 开头的 Sheet。
  • 第一列匹配 M\d+ 的行为模块起点,第二列判断模块类型(CW* / IO-*)。

2.2 点位识别规则

CW 点位正则:^(UI|DI|DO|AO)\d+$;IO 点位正则:^(UI|DI|DO|AO|AI)\d+$

字段来源说明
name第 1 列点位原名,如 UI1、DI3
display_name第 2 列显示名,为空则视为未分配
typename 前缀UI / DI / AO / DO / AI
channelname 后缀数字通道号
signal_type第 5 列信号类型

3. RefId 分配策略 RefIdAllocator

每个 DDC 独立维护 RefId 计数器,避免模块内部与全局组件 ID 冲突。

固定组件refId
BACnetClientNETwork10
HardIn14
HardOut15
BACnetService18
BACServerNetwork48

动态区间包括:io_internal(49-399)ui/di/uo/doav/bvio_device 等,按类别分别递增。

4. CPS XML 结构 CPSGenerator

CPS 根节点是 <sedonaComposite>,包含 schemacompositelinks 三大块。

<sedonaComposite>
  <schema>...</schema>
  <composite>
    <comp origName="BACnetClientNETwork" .../>
    <comp origName="HardIn" .../>
    <comp origName="HardOut" .../>
    <comp origName="BACnetService" .../>
  </composite>
  <links>...</links>
</sedonaComposite>

5. HardIn / HardOut 构建 Hardware

统一排序规则:sort_key = (0 if display_name else 1, channel),即已分配点位优先。

5.1 HardIn

  • 将 CW 的 UI 与 DI 合并排序并重新连续编号。
  • UI 与 DI 都使用 jciCW::UI;DI 的 inputType 固定为 2。

5.2 HardOut

  • 先 UO(AO) 后 DO,组内分别排序。
  • 两组的 channel 各自从 1 开始递增。

6. BACnetClientNETwork 构建 IO 模块

存在 IO 模块时才创建该节点。系统按模块类型加载 io_module_templates/ 中模板,并重新分配模板内部 refId。

6.1 关键处理

  • IO-0602/IO-1006 的 UI 中,跳过包含 TypeSetTtable Sel 的点位。
  • TypeTempTable 点位根据 signal_type 动态计算 in16
  • IO-2000 的 AI 中同样跳过 Ttable Sel,并处理 TempTable

模板原始 refId 不直接使用,统一由 allocate_io_internal() 重新分配。

7. BACnetService / BACServerNetwork BACnet

BACnet 层负责为硬件点位和 IO 点位建立 AV/BV 对象,instanceNumber 在各自容器内从 1 连续递增。

7.1 AV 规则

  • CW:非干触点 UI + DI + UO(AO) 进入 AV。
  • IO:非干触点 UI、AI、AO 进入 AV。

7.2 BV 规则

  • CW:干触点 UI + DO 进入 BV。
  • IO:干触点 UI + DI + DO 进入 BV。

9. 信号类型映射 SignalTypeMapper

CW 的 UI 点位 inputType 由 signal_type 决定。DI 点位固定为 inputType=2

signal_typeinputType说明
Voltage0to10V0电压输入
resistance1电阻输入
digital / 干接点 / 干触点2数字量输入
Sensor10k_20k310K/20K 传感器
Sensor1k41K 传感器
空值或未知0默认电压输入