1 LAD 是什么
跳转到“1 LAD 是什么”- 本质:用电气继电器原理图的“梯子”形象表示控制逻辑。左边是电源正极 (或 L),右边是电源负极/回路 (或 N)。
- PLC 扫描:CPU 持续循环执行:①读输入 → ②按梯形图自左向右、自上而下求取每条支路的通断 → ③刷新输出。一次循环称为 扫描周期 (scan cycle)。
- 优点:图形化、易读;电工背景的维护人员无需学编程就能看懂,且与大多数 PLC 品牌兼容(西门子、三菱、欧姆龙、施耐德等)。
2 基础符号速查
跳转到“2 基础符号速查”| 符号 | 名称 | 作用与典型用法 | ||
|---|---|---|---|---|
──[ ]── | 常开触点 (NO) | 当关联位 = 1 时导通;如按钮、传感器信号 | ||
──[/]── | 常闭触点 (NC) | 当关联位 = 0 时导通;常做互锁、故障联锁 | ||
──( )── | 输出线圈 (OUT) | 触点串并逻辑为真时置位;控制继电器线圈、指示灯等 | ||
──(S)── / ──(R)── | 置位/复位线圈 (SET/RESET) | 形成自保持或软件锁存 | ||
| `── | / | ──` | 上升沿 (P) 检测 | 仅当本扫描周期由 0→1 时为真 |
| `── | \ | ──` | 下降沿 (N) 检测 | 仅当本扫描周期由 1→0 时为真 |
──[TON]── | 延时通电定时器 | 例如 TON T0 5 s:条件保持 5 s 后 T0 置位 | ||
──[CTU]── | 向上计数器 | 计数到预设值 (PV) 时置位 |
博创工程目录
跳转到“博创工程目录”
- 添加新设备:往项目里加 PLC、HMI、驱动、I/O、通讯模块等。
- 设备和网络:硬件组态 & 网络拓扑(PROFINET/以太网/串口等)。
- PLC_1:你的控制器本体。
- 未分组的设备:加了设备但还没拖到具体站里,或从网络视图导入后未归属的对象会临时放这里。
- 安全设置:工程与设备安全相关的统一入口。
- 跨设备功能:多个设备都会用到的“全局/跨站”配置。
- 公共数据:面向全项目的通用资料/资源集合。
- 文档服务:自动生成/管理工程文档。
- 语言和资源:多语言与资源管理。
- 版本控制接口:对接外部版本库(VCS),如 Git/TFS(需安装 VCI 插件/配置)。
- 在线访问:浏览网络上的在线设备(CPU、HMI、驱动)。
- 读卡器/USB 存储器:管理存储卡/优盘上的程序包。

- 设备组态:硬件与网络拓扑。设 CPU/模块订货号、固件、槽位、IP/子网、设备名称。
- 在线和诊断:联机后的健康检查中心。
- 程序块:代码区。OB/FB/FC/DB(含实例 DB)都在这。
- 工艺对象:技术对象(TO):运动控制轴、脉冲输出、PID、HSC 等的“参数页”。
- 外部源文件:源代码管理(SCL/AWL/STL 源、导入导出)。
- PLC 变量:全局标签表(符号名 ↔ 地址/数据类型)。
- PLC 数据类型:UDT/枚举等自定义类型。
- 监控与强制表:在线看变量 & 强制值(Force)。
- 在线备份:把在线设备里的程序/硬件读出并保存归档。
- 轨迹(Trace):高速波形记录与分析(类似示波器)。
- OPC UA 通信:OPC UA Server/Client 的节点模型与连接配置。
- 设备仿真数据:与 PLCSIM/虚拟设备关联的配置与数据。
- 程序信息:块占用、扫描时间、下载大小、时间戳、编译信息。
- PLC 报警文本列表:报警/提示文本库(含多语言)。
- 本地模块:本机安装的用户库/自定义块/附加驱动的索引(有些版本显示为“本地库/本地模块”)。

块类型速记:
- OB( Organization Block):组织块(入口/中断/周期执行)
- FC(Function):无记忆函数(本次调用算完就走)
- FB(Function Block):有记忆功能块(需要实例DB保存状态)
- DB(Data Block):数据块(保存参数/状态/配方等)
-
Hardware interrupt [OB40]/[OB41] 硬件中断 OB,来自高速计数器、某些输入的边沿、通信事件等。到点立即打断 OB1 执行,优先级高,用于捕捉脉冲、编码器零位、急停等快事件。
-
Main [OB1] 主循环。PLC 每个扫描周期执行一次。你看到的“程序段1…25”都在这里串起来跑。
-
alarm [FC3] 报警汇总/生成函数。把各处的故障条件统一转换成报警位/报警文本,常与“PLC 报警文本列表”“HMI 报警”对齐。
-
measuringBalance [FC2] “测量流程”函数:触发采样、做一次信号处理(滤波/幅相/缓存),把结果写到共享 DB,供后续计算使用。
-
publicBalace [FC202] OK/NG 判定 + 复位。读取不平衡量与容差,输出合格/不合格标志,并按命令清零。
-
设备有效运行时长 [FC4] 统计有效开机/运行时间的函数(小时表/寿命/保养周期)。常把结果写入某个 DB 里长期保存。
-
balAxisCtrl_v0.4 [FB4] 轴控制 FB(带状态记忆):整理启停、速度命令、回零、定位等对
MC_*指令的封装。 → balAxisCtrl_V0.4_DB [DB15] 是它的实例DB,保存该 FB 的内部状态/上次值。 -
ifstop [FB3] 停机/按钮去抖/边沿检测封装。 → ifstop_DB [DB72] 为它的实例DB。
-
measurePulse_V0_2 [FB2] 脉冲/测量相关 FB(可能与 HSC 配合做测速、找零位等)。 → measurePulse_DB [DB32] 为它的实例DB。
-
HSC_Data [DB36] 高速计数器数据区:当前计数值、捕获值、速度换算等(供 OB40/FB 使用)。
-
MidDB [DB45] “中间变量”DB:临时/共享的中间计算结果或跨块交换区(名字常用于 scratch/bridge)。
-
publicVariable [DB231] 全局参数/标志位库:如
start/stop/set_sample/rotorMode/容差值等。很多块都从这里读写(我们之前多次提到)。
这些是自定义分组,展开后才是具体的 FC/FB/DB/UDT。名字基本能看出职责:
-
balclaV9.5 动平衡算法/配重相关的一组块与数据(版本号 9.5)。核心计算、配方、历史数据通常在这。
-
Communication 通讯相关:与上位机/采集板/扫码枪/串口/以太网协议的 FC/FB(例如
call_balcal、上位机心跳、帧解析等)。 -
data v1.1.2 数据结构/常量/配方版本 1.1.2;里面多为 DB/UDT,存参数、配方、统计。
-
index 分度/定位逻辑(
index算法):按角度找位、对齐、打标等。 -
modbus 若项目用 Modbus,这里会放主站/从站驱动块、寄存器映射 DB 等。
-
scan1.0 扫码器(Barcode)处理:触发、读码、校验、结果输出,版本 1.0。
-
watchdog 看门狗:采集板/上位机/从站在线监测、超时复位、重连逻辑(例如我们在 OB1 看到的 acquisition watchdog)。
balcalV9.5 文件夹基本就是“动平衡算法 + 通讯”的一套库(版本 9.5)。
-
Call_balcal [FC11] 串口/点对点通讯封装,负责和外部平衡仪/采集板交互(你在 OB1 的程序段3已经调用它)。典型会有端口号、发送/接收缓冲区、状态/错误码等接口。
-
balcal [FB11](核心算法) 计算动/静不平衡量、相位、建议配重与角度等;需要“实例数据块”保存内部状态(滤波、上次相位、判稳等)。 → balcal_DB [DB11] 就是它的实例 DB(别删、别复用给其他实例)。
-
angle [FC16] 角度相关的小工具函数:常见是角度归一化(-180/180 或 0…360)、弧度↔角度转换、相角差计算、象限处理等。
-
acgas [FC17] 从命名看像“average/acc/auto-gain/anti-glitch”一类的小算法:平均/增益/去毛刺/自适应。通常被核心 FB 在计算前后调用——具体以端口为准(看看有没有窗口长度、增益、阈值之类的输入)。
-
Bear [FC18] 多半是与“Bearing/轴承侧/前后面名”或“Balance error(缩写)”有关的小运算:比如把 A/B 面数据做合成/分离、静/偶分量拆解,或依据轴承侧选择系数。看接口就能确认(若输入是两面幅相,输出是 static/couple,那就是分解)。
-
xyzp [FC14] 与 xyzq [FC15] 一对“坐标/向量”工具:常见是 极坐标↔直角坐标、向量合成/分解、正交分量(p/q)计算等。
- 如果
xyzp的输入是幅值+角度、输出是 X/Y,那就是 Polar→XY; xyzq反之可能是 XY→Polar 或 XY→正交分量;具体看端口名(R/φ vs. X/Y)。
- 如果
运行期/通讯数据块
-
run_DB [DB13] 运行期的状态与触发标志区(在 OB1 我看到用过
run_DB.bal_start、以及eage[]这种“边沿阵列”)。用于跨块传递“开始/完成/触发沿”等信号。 -
Send_P2P_DB [DB212]、Receive_P2P_DB [DB213] 点对点(P2P/串口)报文的发送/接收缓冲区:通常包含帧数组、长度、校验、状态位、超时计数等。
Call_balcal会读/写这两个 DB。

Communication:和外部世界说话(上位机/条码枪/采集板等)。
-
communication [FC1] 通讯总管函数:处理握手、心跳、命令解析、把需要发/收的数据搬进专用 DB。 典型接口会有:连接状态、错误码、收发缓冲指针。
-
commudata from [DB30] “收到的”数据缓冲/解析结果区。常见字段:
cmd、len、payload[]、rx_ok、时间戳。 -
commudata to [DB31] “要发送”的数据缓冲。把设备状态、测量/平衡结果、报警等填进去由 FC1 发出。
-
commudata total [DB34] 汇总/统计区:累计计数、超时次数、最近错误、通讯开关量(在线、心跳、握手状态)。
调试:把 DB30/31/34 加到监视表,跑一遍就能看懂数据流向。
data V1.1.2:动平衡算法与参数配方的数据区(版本 1.1.2)。
-
BalaceDada [FB200] 你这套的核心计算 FB(把测量数据变成剩余不平衡量、静/偶分量等)。
- 读取:容差/工艺参数(多在 Balace_DB 里)、传感数据(通讯或测量块写入)。
- 写入:
Plane1Amount/Plane2Amount/staticUnbalanceAmount等结果。
-
Balace_DB [DB20] 主参数&状态库:速度、加减速、允差、模式位、启动/保存标志、OK/NG 等。OB1 里多处用到它。
现场调参/HMI基本对它读写:比如速度、容差、打印/保存触发位。
-
Balace_DB2 [DB24] 第二套参数/配方或兼容旧版的参数(具体看字段名)。常用于双工艺/两套工件。
-
BalaceDada_DB [DB210] FB200 的实例 DB(必需)。保存 FB 的内部状态(滤波器、上次值、判稳标志)。
-
data21 [DB21]、data22 [DB22]、data28 [DB28] 版本化的数据页/配方分区(和“v1.1.2”呼应)。可能是不同工序/工件的参数快照或历史统计。
搜索“交叉引用”能看到这些 DB 被谁读写,就知道它们具体扮演什么角色。
-
Number [DB26] 计数号/件号/流水号区(生产计数、OK 计数、打印编号等常放这里)。
-
SN [DB10] 序列号/条码相关的数据区(扫描得到的 SN、比对结果、打印内容等)。
index:分度/找位/定位运动。
-
index [FC5] 分度算法函数:根据目标角度、零位信号、当前轴位置算出下一步运动命令(配合
MC_*块)。 常见端口:目标角、允许误差、到位标志、错误码。 -
calHMIout [DB23] (你这里名字打成 calHMlout)供 HMI 交互的输出/缓存区:把 index 或校准(cal)相关的结果、提示、角度值等写出去给画面显示。
-
cal(文件夹) 一般放校准/标定的小块:例如零位校准、位置补偿、角度传感器对齐等。展开后再看具体块名。
实例分析
跳转到“实例分析”| NW | 主要元件 / 指令 | 关键变量 | 作用摘要 |
|---|---|---|---|
| 1 | 常开触点 → 线圈 | %I1.4 istart1 → publicVariable.startRun | 启动按钮。I1.4 置 1 时,将 startRun 设 TRUE,供后续网络检测 |
| 2 | FB200 BalaceDada (实例 DB210) | Plane1Amount/Plane2Amount/staticUnbalanceAmountpublicVariable.FLTol / FRTol / FMTol | 调用平衡计算功能块,实时输出三种不平衡量,并读取三条允差 |
| 3 | FC11 Call_balcal | 串口 270 (CM_1241) | 通过 RS-232 执行一次平衡计算子程序,与外部平衡仪通讯 |
| 4 | FC202 publicBalace | — | 对平衡结果进行 OK/NG 判定与复位 处理 |
| 5 | FC2 measuringBalance | — | 触发一次 测量平衡过程(采样、滤波等) |
| 6 | TOF / TON / 置位线圈 | FirstScan %M1.0publicVariable.set_sampleBalace_DB.save_D20X3013 | 上电后 延时 4–5 s 初始化采样 / 保存标志;之后自动复位 |
| 7 | MC_Power | 轴实例 balance (DB1) | 使能伺服轴(Power On),AlwaysTRUE 逻辑确保上电即执行 |
| 8 | MC_Reset | Stop 按钮 %I1.5 istop1 | 复位伺服驱动错误,并在停机后清除故障标志 |
| 9 | MC_MoveVelocity | Balace_DB.Speed_D20D0publicVariable.start | 当 start 为 TRUE 时,以设定速度 启动旋转轴;Tag_14 用于内部条件联锁 |
| 10 | MC_Halt | publicVariable.stop | 处理 正常停机:减速并停稳 |
| 11 | MOVE/定时器/R-S 触点 | iemergStop %I0.5Balace_DB.runningState_D20W438 等 | 复合停机逻辑:同时响应急停、在线 / 离线状态及计时条件,对多项标志位进行清零和复位 |
| 12 | TON+R-S | Balace_DB.save_Done_D20X3015 | 保存完成指示:保存成功置位后保持 2 s,再自动复位 |
| 13 | MC_ChangeDynamic | Balace_DB.acceleration/stopTimepublicVariable.JerkTime | 在线 修改轴的加速 / 减速 / Jerk 时间,并根据首扫或保存标志决定是否执行 |
| 14 | MOVE | Balace_DB.measurementSensorType_D20X3016 → %M900.2 qzerosignalOutSwitch | 根据配置 切换测速传感器(光电 vs. 接近) |
| 15 | TOF | run_DB.bal_start & eage[4] → %Q0.2 qsignalStop | 停止采集板信号:平衡启动信号消失后延时 2 s 断开输出 |
| 16 | FC3 alarm | — | 统一调用 报警处理块,生成各类故障报警 |
| 17 | ==+MOVE | Balace_DB.workpieceDrivenMode_D20W340 → publicVariable.rotorMode | 根据工件驱动方式 (0/1/2) 设置全局 rotorMode,供界面和逻辑使用 |
| 18 | MOVE | Balace_DB.lightNeedleMode_D20W330 → publicVariable.wayOfLoc | 传递 伺服定位模式(光杠 vs. 刀位等)到全局变量 |
| 19 | FC5 index | — | 调用 分度(定位角度)算法 |
| 20 | Word == | Balace_DB.onLine_D20W342 → singleMode / onlineMode | 区分 单机 / 联机运行 模式,便于上位机或本机操作 |
| 21 | FC1 communication | — | 与上位机 / HMI 的通讯处理(协议栈、心跳等) |
| 22 | FC35 Acquisition board watchdog | balcal_DB.rec_data.cnt | 采集板看门狗,监控数据计数避免死机 |
| 23 | TOF | Balace_DB.OK_D20X4416 & eage[18] → Balace_DB.autoPrint_D20X4615 | 旋转件 合格后自动打印标签,触发脉冲 100 ms |
| 24 | FC6 scaner | — | 条码 / 扫描器处理(读码、解析) |
| 25 | FB3 ifstop (实例 DB72) | istop1 %I1.5 | 对停机按钮做 防重复 / 缓冲逻辑,避免抖动 |
Num 1
跳转到“Num 1”
整行(也叫“一条梯级”)只包含两个元件:一个触点和一个线圈。
| 位置 | 图形 | 地址 / 变量 | 作用 |
|---|---|---|---|
| 左侧垂线 | 电源导轨 | —— | 代表“正电源”或“逻辑 1”起点 |
| [ ] | 常开触点 | %I1.4 (注释 istart1) | 等价于“如果输入 I1.4 为 True/有电” |
| — | 水平连线 | —— | 把逻辑从触点传到线圈 |
| ( ) | 线圈 | "publicVariable".startRun | 当左侧逻辑成立时,该布尔变量被置为 True |
| 右侧垂线 | 回路导轨 | —— | 代表“逻辑 0/回路结束” |
-
%I1.4常开触点%I代表离散输入(Input)。1.4表示 输入模块 1 的第 4 位。- 常开(NO)触点只有在对应输入为 1 时才导通,否则断开。
-
连线
- 梯形图从左向右扫描。只要有一处断开,右侧就收不到“电”,整条梯级输出为 0。
-
"publicVariable".startRun线圈- 这是一个布尔型全局变量,放在数据块
publicVariable里。 - 线圈相当于“赋值”动作:左边电路通时 → 把 startRun 置 True;不通时 → 置 False(除非线圈类型做了保持或取反设置,这里看不到,默认为常规线圈)。
- 这是一个布尔型全局变量,放在数据块
运行效果
- 当物理输入端子 I1.4 被外部信号拉高(比如按下“启动”按钮)时,梯级闭合,PLC 扫描这一段会把
startRun写成 True。 - 输入释放后触点断开,
startRun也随即变回 False。
Num 2
跳转到“Num 2”
这条梯级不是用基本触点和线圈,而是调用了一个自定义的功能块(FB)。
| 元素 | 图中文字 | 作用 |
|---|---|---|
| 实例数据块(Instance DB) | %DB210 "BalaceDada_DB" | 存储 FB200 在这条梯级里的“私有”数据(静态变量、上循环的状态等)。 每调一次 FB,都要有独立的 DB。 |
| 功能块(Function Block) | %FB200 "BalaceDada" | 你(或他人)写好的平衡计算逻辑。内部可能做转子动平衡、容差判断等运算。 |
| EN / ENO | 左侧 EN、右侧 ENO | Enable / Enable-Out: 梯级左侧没有任何触点,等于常闭——因此 EN 恒为 TRUE,PLC 每次扫描都会执行 FB200。 ENO 是 FB 的执行结果(若库里这样设计),在这里只是把逻辑继续传到黑色水平线;由于右侧没再接元件,也就没用到。 |
| 参数 Plane1Amount, Plane2Amount, staticUnbalanceAmount | 右侧目前在线监时显示 0.0 | 这三个多半是 输出(OUT 或 IN_OUT)参数: - Plane1Amount:第一校正面剩余不平衡量 - Plane2Amount:第二校正面剩余不平衡量 - staticUnbalanceAmount:静不平衡量 在线监状态下,TIA 会把当前数值显示在连线上(橙色竖线旁)。现在还没算出东西,所以都是 0.0。 |
| FLTol / FRTol / FMTol | "publicVariable".FLTol 等 | 典型 输入(IN)参数,来自全局数据块 publicVariable:- FLTol:前左允差 - FRTol:前右允差 - FMTol:可能是前中或整体允差 FB200 里会用这些阈值判断“是否已达平衡”。 |
Num 3
跳转到“Num 3”
每个 PLC 扫描周期都调用一次自定义功能 FC11 call_balcal,并把串口号 270(对应本机的 CM 1241 RS-232 通讯模块)作为参数传进去,用来与外部动平衡测量板/上位机进行串行通讯
| 元素 | 图中文字 | 作用与说明 |
|---|---|---|
| 功能块 (FC) | %FC11 "call_balcal" | 写在库里的单次过程调用(Function Call)。通常 FC 不带实例数据块,无保留内存,只做本次计算/通讯后立即返回。 “balcal”= balance calculation 或 balancer call 的缩写,十有八九是向外部仪器发命令、收回测量数据。 |
| EN | — | Enable:左侧直接连电源导轨,没有触点 → 永远为 TRUE。意味着 PLC 每次扫描都会执行 FC11。 |
| PORT | 270 "Local<CM_1241-(RS232)_1" | 单一输入参数,数据类型一般为 INT 或 WORD。- 数值 270:在 TIA 的系统常量里代表“本地通讯口 1(CM 1241 模块,RS-232)”的句柄 ID。 - FC 内部用这个句柄调用 AG_SEND/AG_RECV 或 TCON/TSEND_C 指令与下位板交互。 |
| ENO | — | Enable Out:FC 执行成功就转 TRUE;若 FC 检测到通讯错误可置 FALSE。此梯级右侧没再用 ENO,所以只是“留口”不接。 |
| 黑色水平线 | — | 与前面梯级串接逻辑:上一条梯级若不断电,此处也始终有电流通过。因为右侧没再连别的元件,本梯级只负责单独动作,不影响后级。 |
Num 4
跳转到“Num 4”
每个 PLC 扫描周期都调用一次 FC202 publicBalace,用来综合前面算出的剩余不平衡量与允差,生成 “OK / NG” 结果,并在需要时执行复位或清零。
程序段 4 就是“合格 / 不合格判断 + 状态复位”的核心。它把前面计算出的不平衡量和设定的允差结合,生成全局 OK/NG 信号,供机器的打印、停机、报警等后续逻辑使用。若想调整允许范围或复位条件,先查看 FC202 的接口和 publicVariable 中对应的标志位与阈值。
| 元素 | 含义 | 备注 |
|---|---|---|
| 功能 (FC) | %FC202 "publicBalace" | “公用平衡判定”子程序。由于是 FC(Function),它 不带实例数据块,仅在本次调用内完成运算;所有状态量通常保存在全局 DB 或输入输出参数中。 |
| EN | Enable | 左侧直接接电源导轨,没有触点 → 恒为 TRUE;说明 PLC 每次循环都执行 FC202。 |
| ENO | Enable Out | FC 执行完毕返回 TRUE/FALSE;本梯级右侧未再使用它。 |
| 黑色水平线 | 回路 | 只把逻辑继续传递,不附带额外元件。 |
Num 5
跳转到“Num 5”
程序段 5 就是“让采样板真正开始采样/让算法对采样数据做一次处理”的触发块,确保在 FB200 进行不平衡计算之前,振动和相位数据已经准备就绪。
| 元素 | 说明 | 作用 |
|---|---|---|
%FC2 measuringBalance | Function(FC)类型子程序 | 负责一次“测量平衡流程”: ① 触发采样板开始采集或刷新缓存 ② 可能进行带通滤波、整周积分、FFT ③ 将原始振动/相位数据写入共享 DB,供 FB200 BalaceDada 下一周期使用 |
| EN | Enable 输入 | 左侧直接连电源导轨 → 恒为 TRUE;PLC 每个扫描周期都会调用此 FC |
| ENO | Enable Out | 返回执行状态(成功 TRUE / 错误 FALSE)。本梯级右侧未再使用,但可在监视表查看 |
| 无实例 DB | FC 与 FB 的区别 | FC 不保存上周期状态;所有暂存量要么写在全局 DB,要么用 TEMP 区 |
Num 6
跳转到“Num 6”
这一梯级利用 两个 IEC 定时器 + 一个并联系统标志,来给全局布尔变量"publicVariable".set_sample 上电后延时置位,并在“参数保存”完成时再次置位。该位通常用来告诉后续逻辑“可以重新采样 / 重新初始化”之类的事件。
梯级结构(由左到右)
| 元件 | 图中文字 | 作用 | 关键时序 |
|---|---|---|---|
| 常开触点 | %M1.0 "FirstScan" | PLC 第一次扫描 时置 1(系统自带位)。离开第一周期后变 0。 | 只在上电或下载后首周期闭合 |
| TOF 定时器 | %DB29 "IEC_Timer_0_DB_6"TOF Time PT = T#5s | Off-Delay: IN=1 时,Q=1; IN 变 0 后,Q 仍保持 1 5 s,之后才变 0。 | 0 – 5 s: Q=1 |
| TON 定时器 | %DB12 "IEC_Timer_0_DB_12"TON Time PT = T#4s | On-Delay:IN 连续为 1 满 4 s 后,Q 置 1。IN 变 0 时立即复位。 | 0 – 4 s: 计时 ≥ 4 s: Q=1 |
| 并联触点 | %DB20.DBX301.3 "Balace_DB".save_D20X3013 | “保存完成” 标志位;当用户/HMI 执行参数保存后置 1。 与上面两只定时器并联——无论哪条支路导通都能驱动线圈。 | 事后由别的逻辑复位 |
| 置位线圈 (S) | "publicVariable".set_sample | Set 型线圈: 梯级通电 → 把 set_sample 置 TRUE 并保持;需在别的网络用 R 线圈或 = FALSE 才能清零。 | 4 s 后或保存完成即被置位 |
上电后的完整时序
- t = 0 s(首扫描)
%M1.0= 1 → TOF.IN = 1 → TOF.Q = 1 TON.IN 被置 1,开始 4 s 计时。 - t = 4 s
TON 达到设定值 → TON.Q = 1,梯级导通 →
set_sample被 置位 (S)。 - t = 5 s
首扫描已结束,
%M1.0变 0;TOF 进入延时计时并在 5 s 时掉电 → TON 立即复位,但线圈已保持。 - 之后,只要
save_D20X3013触点闭合(一次保存完成),梯级马上再次置位set_sample。
功能目的
- 上电初始化:先等待 4 s(给硬件/采样板稳定时间),再通知系统“可以开始取样”或“初始化已完成”。
- 参数保存后重采样:当用户/HMI 保存新参数 (
save_D20X3013=1) 时,立即把set_sample重新置 1,提醒算法依据新参数重新采样或清零滤波器。
Num 7
跳转到“Num 7”
这一梯级调用了 PLCopen Motion Control 库里的 MC_Power 功能块,目的就是—— 让伺服驱动器上电、抱闸释放,使转子轴进入随时可运动的“Power”状态。
| 元件 / 端口 | 图中文字 | 数据类型 | 功能 | 现场含义 |
|---|---|---|---|---|
| 功能块 FB | MC_Power | — | PLCopen 标准块,负责给指定轴通电/断电 | |
| 实例 DB | %DB8 "MC_Power_DB" | — | 该 FB 的私有内存,保存上循环 Busy/内部状态 | |
| Axis | %DB1 "balance" | Axis_ref | 指向之前在工艺对象管理器 (TCON) 建好的 平衡主轴 | 系统知道要给哪一根轴上电 |
| Enable | %M1.2 "AlwaysTRUE" | Bool | 恒为 TRUE ⇒ 持续要求“轴保持上电” | 通常在 OB100 或首扫已设 1 |
| StopMode | 常数 0 | Int | 0=立即去使能 (STOP0);也可设 1=“控制减速” | 当 Enable 变 0 时如何脱电 |
| EN | — | Bool | 块的使能:左侧直接连电源导轨 ⇒ 每周期调用 | |
| Status | — | Bool | 轴是否已成功上电;TRUE=OK | 在线监视此位 |
| Busy | — | Bool | TRUE 表示正在执行电源动作(上电/断电进行中) | |
| Error | — | Bool | TRUE 表示出错 | |
| ErrorID / ErrorInfo | — | Word / DWord | 出错时的编码 (16#xxxx) | 调试时查看 |
运行时序
- PLC 开始扫描 OB1 → 进入本梯级。
EN = TRUE且Enable = TRUE⇒MC_Power执行“Power On”命令给轴balance。- 几个周期后驱动器就绪,Status 置 TRUE,Busy 复位;此时电机伺服已上电、准备好后续
MC_MoveVelocity / MC_MoveAbsolute等运动指令。- 若以后
Enable被置 0(例如急停),MC_Power会按StopMode指令断电并解除 Status。
补充
跳转到“补充”在 TIA 博途(STEP 7)的 FB/FC 块接口里,Input、Output、InOut、Static、Temp、Constant 六个关键词并不是“高级语法”,而是“变量/参数的作用域 + 生命周期”的六个抽屉。记住一句话: 谁可以读写?值能活多久?要不要出现在引脚上? 下面用一句话+一个场景帮你全部搞定。
-
Input(输入参数) • 只读,块内不能改。 • 每次调用从外部传进来,生命周期=本次调用。 • 场景:把现场按钮
Start传进来,FB 只能读它,不能改它。 -
Output(输出参数) • 块内可写,外部只读。 • 生命周期=本次调用,但值会立即更新到调用者。 • 场景:FB 计算出
MotorRunning,别的程序只能看结果,不能回写。 -
InOut(输入/输出参数) • 既能读也能写,双向通道。 • 调用前外部给值,块内可改,调用结束后把改后的值带回去。 • 场景:把数组
Data[1..10]传进来,FB 内部每个元素加 1,调用结束外部得到新数组。 -
Static(静态变量) • 块内可读写,外部通过背景 DB 也能读写(不推荐)。 • 值跨扫描周期保持,直到下一次被覆盖。 • 场景:累计运行时间
TotalRunTime,掉电前一直累加。 -
Temp(临时变量) • 块内可读写,本周期结束立即回收。 • 使用前必须“先写后读”,否则是垃圾值。 • 场景:做
(a+b)*(c-d)时的中间结果Temp1,Temp2。 -
Constant(常量) • 只读,程序运行期间永远不变。 • 不会出现在背景 DB,也不占 PLC 过程映像。 • 场景:圆周率
Pi := 3.14159或超时时间T#5s。
速记表
| 类型 | 谁可读写 | 生命周期 | 是否出现在引脚 | 典型用途 |
|---|---|---|---|---|
| Input | 外写内读 | 本次调用 | 是 | 传感器、设定值 |
| Output | 内写外读 | 本次调用后带出 | 是 | 执行器、状态标志 |
| InOut | 双向 | 本次调用后带回 | 是 | 需要回写的数组/结构 |
| Static | 内外皆可 | 保持到下一次覆盖 | 否 | 累计量、状态记忆 |
| Temp | 仅块内 | 本次调用结束回收 | 否 | 中间计算、交换变量 |
| Constant | 只读 | 整个程序 | 否 | 数学常数、固定超时时间 |
一句话总结: Input/Output/InOut 是“对外引脚”,Static 是“内部小仓库”,Temp 是“一次性草稿纸”,Constant 是“刻在石头上的字”。
来源:CSDN 原文,首次发布于 2025-08-06。