视觉画布设计
canvas-design
基于设计原则创作静态视觉作品,用于海报与品牌图形。
plc-station-db-mapper【文档与办公】面向西门子PLC站台化项目的点位映射技能。支持4种输入方式(DB截图、PDF导出、Excel导出、手动输入),交互式引导用户选择输入类型后,按对应路径标准化为统一Excel并批量生成目标站台点位表。用于 Task/Alarm/State 等类别的点位扩展、补表、续表。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
DB50=20、DB70=2 仅为参考示例,不可默认复用。每次用户调用本 skill 时,必须先询问以下选择:
请选择你本次提供的原始点位格式:
1. DB截图 — TIA Portal 中 DB 块的截图(如 DB50.png),包含 Name/Type/Offset 等列
2. 导出PDF — TIA Portal 导出的 DB 定义 PDF 文件(如 堆垛机DDJ_Data (DB142).pdf)
3. 导出XLSX — TIA Portal 导出的变量表 Excel(如 原料库南D02变量表.xlsx)
4. 手动输入 — 直接给出初始点位列表、偏移量(stride)、以及点位结构
请告诉我编号(1/2/3/4),以及:
- 目标站台范围(如 1009-1022)
- 基准站台号(如 1009)
- 点位类别(如 Task / Alarm / State,可多个)
根据用户的选择,进入对应分支。
适用场景:用户提供 TIA Portal 中 DB 块编辑器的截图(PNG/JPG),截图中能看到字段表格。
Name(字段名)、Type(数据类型)、Offset(偏移量)、Comment(注释)。M[5001] Struct 0.0),说明这是站台化的重复结构。Tag Name:<station>.<category>.<field>(category 由步骤 5 判定)Address:DB{N},{kind}{byte}[.{bit}](用 Offset + DB 号 + 数据类型推断 kind)Data Type、Respect Data Type(默认1)、DescriptionDrive_FAULT → DriveFault)适用场景:用户提供从 TIA Portal 导出的 DB 定义 PDF。
适用场景:用户提供从 TIA Portal 导出的变量表 Excel 文件。
DB{N},X/B/W/D{byte} 或 %DB{N}.DB{X/B/W/D}{byte})%DB TIA 格式(如 %DB142.DBX0.0),先转换为 DB142,X0.0。%I、%Q、%M 开头)16.2、160)--default-db(DB 号)。Name / Tag / Field / 字段 / 字段名 / 变量名Type / Data Type / Datatype / 数据类型 / 类型Address / Addr / Offset / Logical Address / 地址 / 偏移Comment / Description / 备注 / 注释 / 描述适用场景:用户直接提供点位信息,无需解析文件。
DB{N},{kind}{byte} 格式)DB51=20,DB76=2所有分支最终输出统一的 Excel,包含:
# PLC站台点位表
生成日期: YYYY-MM-DD HH:MM:SS
站台范围: 1009-1022 (共14个站台)
基准站台: 1009
DB块步长: DB51=20字节, DB76=2字节
步长来源: auto_struct_size / auto_inferred_from_input / manual
总点位数: N个
Tag Name | Address | Data Type | Respect Data Type | Description
<station>.<category>.<field>
当用户提供的原始数据(截图/PDF/手动输入)未明确区分类别时,根据字段名和含义自动归类:
| 类别 | 判定规则 | 典型字段名关键词 |
|---|---|---|
| Task | 任务相关:任务号、条码、站台地址、货物类型 | Task, Code, StartSta, DestSta, TpType |
| Alarm | 故障/报警类:字段名含 Fault、Error、Alarm | *Fault, *Error, *Alarm, TimeOut, Estop, QF_, QS_, PH_, LS_ |
| State | 运行状态类:运行、负载、选中、备用等 | Running, Load, Run, Select, BY*, State_* |
优先级:
--category 时,全部使用指定类别,不做自动判定。命名规范(参考 reference/托盘输送线.csv):
DriveFault,不用 Drive_FAULT)DB{db_no},{kind}{byte}[.{bit}]
| 数据类型 | Kind | 字节数 |
|---|---|---|
| Boolean / Bool | X | 0.125(需 bit 位 0-7) |
| Byte / Char / USInt / SInt | B | 1 |
| Short / Int / Word / UInt | W | 2 |
| DInt / DWord / UDInt / Real / Float | D | 4 |
%DB142.DBX0.0 → DB142,X0.0
%DB142.DBW160 → DB142,W160
%DB50.DBD2 → DB50,D2
r"^DB(\d+),(X|B|W|D)(\d+)(?:\.(\d+))?quot;
stride = 最后字段的 offset + 该字段字节长度
例:Struct 最后字段 BY2 Int 28.0,Int 占 2 字节 → stride = 28 + 2 = 30。
stride = (byte2 - byte1) / (station2 - station1)
scripts/normalize_screenshot_excel.py截图/OCR 表 → 标准五列 Excel。
python scripts/normalize_screenshot_excel.py \
--input raw_db.xlsx \
--output normalized.xlsx \
--station 1009 \
--category Task \
--default-db 51
scripts/generate_station_table.py标准 Excel → 目标站台批量点位表。支持 3 种模式。
# 模式1: 自动 stride(需 ≥2 站台数据)
python scripts/generate_station_table.py \
--input normalized.xlsx \
--stations 1009-1022 \
--output output/站台点位表.xlsx \
--base-station 1009 \
--insert-separator
# 模式2: Struct 大小作为 stride(单站台即可)
python scripts/generate_station_table.py \
--input normalized.xlsx \
--stations 1009-1022 \
--struct-size DB51=20,DB76=2 \
--output output/站台点位表.xlsx \
--base-station 1009
# 模式3: 手动 stride
python scripts/generate_station_table.py \
--input normalized.xlsx \
--stations 1009-1022 \
--stride DB51=20,DB76=2 \
--output output/站台点位表.xlsx \
--base-station 1009
# 一步到位: 从原始Excel直接生成(跳过normalize中间步骤)
python scripts/generate_station_table.py \
--raw-input raw_db_screenshot.xlsx \
--station 1009 --category Task --default-db 51 \
--stations 1009-1022 \
--struct-size DB51=20 \
--output output/站台点位表.xlsx \
--base-station 1009 \
--insert-separator
注意:
--raw-input模式每次只支持单个--category。如果原始文件包含多个类别(如 Task + Alarm),需要分别运行再合并,或先用 normalize 脚本分类处理。
每次完成后,输出以下信息:
normalize_screenshot_excel.py 增加 Real/Float/USInt/SInt/UInt/UDInt 类型支持%DB TIA 格式地址的自动转换(%DB142.DBX0.0 → DB142,X0.0)--struct-size 参数从单站台直接指定 stride--raw-input 模式)