跳转到内容
新建笔记

PLC 梯形图(LAD)入门

  • 本质:用电气继电器原理图的“梯子”形象表示控制逻辑。左边是电源正极 (或 L),右边是电源负极/回路 (或 N)。
  • PLC 扫描:CPU 持续循环执行:①读输入 → ②按梯形图自左向右、自上而下求取每条支路的通断 → ③刷新输出。一次循环称为 扫描周期 (scan cycle)。
  • 优点:图形化、易读;电工背景的维护人员无需学编程就能看懂,且与大多数 PLC 品牌兼容(西门子、三菱、欧姆龙、施耐德等)。
符号名称作用与典型用法
──[ ]──常开触点 (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,供后续网络检测
2FB200 BalaceDada (实例 DB210)Plane1Amount/Plane2Amount/staticUnbalanceAmount
publicVariable.FLTol / FRTol / FMTol
调用平衡计算功能块,实时输出三种不平衡量,并读取三条允差
3FC11 Call_balcal串口 270 (CM_1241)通过 RS-232 执行一次平衡计算子程序,与外部平衡仪通讯
4FC202 publicBalace—对平衡结果进行 OK/NG 判定与复位 处理
5FC2 measuringBalance—触发一次 测量平衡过程(采样、滤波等)
6TOF / TON / 置位线圈FirstScan %M1.0
publicVariable.set_sample
Balace_DB.save_D20X3013
上电后 延时 4–5 s 初始化采样 / 保存标志;之后自动复位
7MC_Power轴实例 balance (DB1)使能伺服轴(Power On),AlwaysTRUE 逻辑确保上电即执行
8MC_ResetStop 按钮 %I1.5 istop1复位伺服驱动错误,并在停机后清除故障标志
9MC_MoveVelocityBalace_DB.Speed_D20D0
publicVariable.start
当 start 为 TRUE 时,以设定速度 启动旋转轴;Tag_14 用于内部条件联锁
10MC_HaltpublicVariable.stop处理 正常停机:减速并停稳
11MOVE/定时器/R-S 触点iemergStop %I0.5
Balace_DB.runningState_D20W438 等
复合停机逻辑:同时响应急停、在线 / 离线状态及计时条件,对多项标志位进行清零和复位
12TON+R-SBalace_DB.save_Done_D20X3015保存完成指示:保存成功置位后保持 2 s,再自动复位
13MC_ChangeDynamicBalace_DB.acceleration/stopTime
publicVariable.JerkTime
在线 修改轴的加速 / 减速 / Jerk 时间,并根据首扫或保存标志决定是否执行
14MOVEBalace_DB.measurementSensorType_D20X3016 → %M900.2 qzerosignalOutSwitch根据配置 切换测速传感器(光电 vs. 接近)
15TOFrun_DB.bal_start & eage[4] → %Q0.2 qsignalStop停止采集板信号:平衡启动信号消失后延时 2 s 断开输出
16FC3 alarm—统一调用 报警处理块,生成各类故障报警
17==+MOVEBalace_DB.workpieceDrivenMode_D20W340 → publicVariable.rotorMode根据工件驱动方式 (0/1/2) 设置全局 rotorMode,供界面和逻辑使用
18MOVEBalace_DB.lightNeedleMode_D20W330 → publicVariable.wayOfLoc传递 伺服定位模式(光杠 vs. 刀位等)到全局变量
19FC5 index—调用 分度(定位角度)算法
20Word ==Balace_DB.onLine_D20W342 → singleMode / onlineMode区分 单机 / 联机运行 模式,便于上位机或本机操作
21FC1 communication—与上位机 / HMI 的通讯处理(协议栈、心跳等)
22FC35 Acquisition board watchdogbalcal_DB.rec_data.cnt采集板看门狗,监控数据计数避免死机
23TOFBalace_DB.OK_D20X4416 & eage[18] → Balace_DB.autoPrint_D20X4615旋转件 合格后自动打印标签,触发脉冲 100 ms
24FC6 scaner—条码 / 扫描器处理(读码、解析)
25FB3 ifstop (实例 DB72)istop1 %I1.5对停机按钮做 防重复 / 缓冲逻辑,避免抖动

整行(也叫“一条梯级”)只包含两个元件:一个触点和一个线圈。

位置图形地址 / 变量作用
左侧垂线电源导轨——代表“正电源”或“逻辑 1”起点
[ ]常开触点%I1.4 (注释 istart1)等价于“如果输入 I1.4 为 True/有电”
—水平连线——把逻辑从触点传到线圈
( )线圈"publicVariable".startRun当左侧逻辑成立时,该布尔变量被置为 True
右侧垂线回路导轨——代表“逻辑 0/回路结束”
  1. %I1.4 常开触点

    • %I 代表离散输入(Input)。
    • 1.4 表示 输入模块 1 的第 4 位。
    • 常开(NO)触点只有在对应输入为 1 时才导通,否则断开。
  2. 连线

    • 梯形图从左向右扫描。只要有一处断开,右侧就收不到“电”,整条梯级输出为 0。
  3. "publicVariable".startRun 线圈

    • 这是一个布尔型全局变量,放在数据块 publicVariable 里。
    • 线圈相当于“赋值”动作:左边电路通时 → 把 startRun 置 True;不通时 → 置 False(除非线圈类型做了保持或取反设置,这里看不到,默认为常规线圈)。

运行效果

  • 当物理输入端子 I1.4 被外部信号拉高(比如按下“启动”按钮)时,梯级闭合,PLC 扫描这一段会把 startRun 写成 True。
  • 输入释放后触点断开,startRun 也随即变回 False。

这条梯级不是用基本触点和线圈,而是调用了一个自定义的功能块(FB)。

元素图中文字作用
实例数据块(Instance DB)%DB210 "BalaceDada_DB"存储 FB200 在这条梯级里的“私有”数据(静态变量、上循环的状态等)。
每调一次 FB,都要有独立的 DB。
功能块(Function Block)%FB200 "BalaceDada"你(或他人)写好的平衡计算逻辑。内部可能做转子动平衡、容差判断等运算。
EN / ENO左侧 EN、右侧 ENOEnable / 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 里会用这些阈值判断“是否已达平衡”。

每个 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。
PORT270 "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,所以只是“留口”不接。
黑色水平线—与前面梯级串接逻辑:上一条梯级若不断电,此处也始终有电流通过。因为右侧没再连别的元件,本梯级只负责单独动作,不影响后级。

每个 PLC 扫描周期都调用一次 FC202 publicBalace,用来综合前面算出的剩余不平衡量与允差,生成 “OK / NG” 结果,并在需要时执行复位或清零。

程序段 4 就是“合格 / 不合格判断 + 状态复位”的核心。它把前面计算出的不平衡量和设定的允差结合,生成全局 OK/NG 信号,供机器的打印、停机、报警等后续逻辑使用。若想调整允许范围或复位条件,先查看 FC202 的接口和 publicVariable 中对应的标志位与阈值。

元素含义备注
功能 (FC)%FC202 "publicBalace"“公用平衡判定”子程序。由于是 FC(Function),它 不带实例数据块,仅在本次调用内完成运算;所有状态量通常保存在全局 DB 或输入输出参数中。
ENEnable左侧直接接电源导轨,没有触点 → 恒为 TRUE;说明 PLC 每次循环都执行 FC202。
ENOEnable OutFC 执行完毕返回 TRUE/FALSE;本梯级右侧未再使用它。
黑色水平线回路只把逻辑继续传递,不附带额外元件。

程序段 5 就是“让采样板真正开始采样/让算法对采样数据做一次处理”的触发块,确保在 FB200 进行不平衡计算之前,振动和相位数据已经准备就绪。

元素说明作用
%FC2 measuringBalanceFunction(FC)类型子程序负责一次“测量平衡流程”:
① 触发采样板开始采集或刷新缓存
② 可能进行带通滤波、整周积分、FFT
③ 将原始振动/相位数据写入共享 DB,供 FB200 BalaceDada 下一周期使用
ENEnable 输入左侧直接连电源导轨 → 恒为 TRUE;PLC 每个扫描周期都会调用此 FC
ENOEnable Out返回执行状态(成功 TRUE / 错误 FALSE)。本梯级右侧未再使用,但可在监视表查看
无实例 DBFC 与 FB 的区别FC 不保存上周期状态;所有暂存量要么写在全局 DB,要么用 TEMP 区

这一梯级利用 两个 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_sampleSet 型线圈:
梯级通电 → 把 set_sample 置 TRUE 并保持;
需在别的网络用 R 线圈或 = FALSE 才能清零。
4 s 后或保存完成即被置位

上电后的完整时序

  1. t = 0 s(首扫描) %M1.0 = 1 → TOF.IN = 1 → TOF.Q = 1 TON.IN 被置 1,开始 4 s 计时。
  2. t = 4 s TON 达到设定值 → TON.Q = 1,梯级导通 → set_sample 被 置位 (S)。
  3. t = 5 s 首扫描已结束,%M1.0 变 0;TOF 进入延时计时并在 5 s 时掉电 → TON 立即复位,但线圈已保持。
  4. 之后,只要 save_D20X3013 触点闭合(一次保存完成),梯级马上再次置位 set_sample。

功能目的

  • 上电初始化:先等待 4 s(给硬件/采样板稳定时间),再通知系统“可以开始取样”或“初始化已完成”。
  • 参数保存后重采样:当用户/HMI 保存新参数 (save_D20X3013=1) 时,立即把 set_sample 重新置 1,提醒算法依据新参数重新采样或清零滤波器。

这一梯级调用了 PLCopen Motion Control 库里的 MC_Power 功能块,目的就是—— 让伺服驱动器上电、抱闸释放,使转子轴进入随时可运动的“Power”状态。

元件 / 端口图中文字数据类型功能现场含义
功能块 FBMC_Power—PLCopen 标准块,负责给指定轴通电/断电
实例 DB%DB8 "MC_Power_DB"—该 FB 的私有内存,保存上循环 Busy/内部状态
Axis%DB1 "balance"Axis_ref指向之前在工艺对象管理器 (TCON) 建好的 平衡主轴系统知道要给哪一根轴上电
Enable%M1.2 "AlwaysTRUE"Bool恒为 TRUE ⇒ 持续要求“轴保持上电”通常在 OB100 或首扫已设 1
StopMode常数 0Int0=立即去使能 (STOP0);也可设 1=“控制减速”当 Enable 变 0 时如何脱电
EN—Bool块的使能:左侧直接连电源导轨 ⇒ 每周期调用
Status—Bool轴是否已成功上电;TRUE=OK在线监视此位
Busy—BoolTRUE 表示正在执行电源动作(上电/断电进行中)
Error—BoolTRUE 表示出错
ErrorID / ErrorInfo—Word / DWord出错时的编码 (16#xxxx)调试时查看

运行时序

  1. PLC 开始扫描 OB1 → 进入本梯级。
  2. EN = TRUE 且 Enable = TRUE ⇒ MC_Power 执行“Power On”命令给轴 balance。
  3. 几个周期后驱动器就绪,Status 置 TRUE,Busy 复位;此时电机伺服已上电、准备好后续 MC_MoveVelocity / MC_MoveAbsolute 等运动指令。
  4. 若以后 Enable 被置 0(例如急停),MC_Power 会按 StopMode 指令断电并解除 Status。

在 TIA 博途(STEP 7)的 FB/FC 块接口里,Input、Output、InOut、Static、Temp、Constant 六个关键词并不是“高级语法”,而是“变量/参数的作用域 + 生命周期”的六个抽屉。记住一句话: 谁可以读写?值能活多久?要不要出现在引脚上? 下面用一句话+一个场景帮你全部搞定。

  1. Input(输入参数) • 只读,块内不能改。 • 每次调用从外部传进来,生命周期=本次调用。 • 场景:把现场按钮 Start 传进来,FB 只能读它,不能改它。

  2. Output(输出参数) • 块内可写,外部只读。 • 生命周期=本次调用,但值会立即更新到调用者。 • 场景:FB 计算出 MotorRunning,别的程序只能看结果,不能回写。

  3. InOut(输入/输出参数) • 既能读也能写,双向通道。 • 调用前外部给值,块内可改,调用结束后把改后的值带回去。 • 场景:把数组 Data[1..10] 传进来,FB 内部每个元素加 1,调用结束外部得到新数组。

  4. Static(静态变量) • 块内可读写,外部通过背景 DB 也能读写(不推荐)。 • 值跨扫描周期保持,直到下一次被覆盖。 • 场景:累计运行时间 TotalRunTime,掉电前一直累加。

  5. Temp(临时变量) • 块内可读写,本周期结束立即回收。 • 使用前必须“先写后读”,否则是垃圾值。 • 场景:做 (a+b)*(c-d) 时的中间结果 Temp1, Temp2。

  6. Constant(常量) • 只读,程序运行期间永远不变。 • 不会出现在背景 DB,也不占 PLC 过程映像。 • 场景:圆周率 Pi := 3.14159 或超时时间 T#5s。

速记表

类型谁可读写生命周期是否出现在引脚典型用途
Input外写内读本次调用是传感器、设定值
Output内写外读本次调用后带出是执行器、状态标志
InOut双向本次调用后带回是需要回写的数组/结构
Static内外皆可保持到下一次覆盖否累计量、状态记忆
Temp仅块内本次调用结束回收否中间计算、交换变量
Constant只读整个程序否数学常数、固定超时时间

一句话总结: Input/Output/InOut 是“对外引脚”,Static 是“内部小仓库”,Temp 是“一次性草稿纸”,Constant 是“刻在石头上的字”。


来源:CSDN 原文,首次发布于 2025-08-06。