Network 1 — 调用 Factory IO 通信函数(LAD)

目的:每个周期执行一次 Factory IO 的通信/同步配置。
条件 → 动作:无条件调用 SCL 函数 MHJ-PLC-Lab-Function-S71200。
注意:这段 SCL 不是产线逻辑,而是仿真环境的底层握手;它的内容依赖 Factory IO/TIA 的特定内存布局,换项目时不要直接照搬。
Factory IO 连接示例:LAD 启停主程序 + 一个负责 Factory IO 通信配置的 SCL 函数。
通过 TiaLink 把本示例的 3 个对象导入你当前打开的 TIA Portal 项目。导入前会先预检,默认不覆盖同名对象,导入后不会自动保存。
这是一个 Factory IO 仿真产线的最小连接示例:LAD 主程序负责启动/停止和输出,另一个 SCL 函数负责 Factory IO 的通信配置。
LAD 部分很好懂:启动自锁 → 输送机、指示灯、出料器、推料器得电;停止 → 复位指示灯亮。SCL 部分则是厂商/仿真环境的握手代码,读起来偏底层,初学可以先跳过。
| 信号 | 类型 | 含义 | 作用 |
|---|---|---|---|
START PB |
I(%I0.0) | 启动按钮 | 置位运行标志 |
RESET PB |
I(%I0.1) | 停止/复位按钮(常闭) | 复位运行标志 |
Tag_1 |
M(%M0.0) | 运行标志 | 自锁 |
COVEYOR |
Q(%Q0.0) | 输送机 | 运行时输出 |
START INDICATOR |
Q(%Q0.1) | 启动指示灯 | 运行时亮 |
EMMITOR |
Q(%Q0.3) | 出料器 | 运行时输出 |
REMOVER |
Q(%Q0.4) | 推料器 | 运行时输出 |
RESET INDICATOR |
Q(%Q0.2) | 复位指示灯 | 停止时亮 |
START PB → Tag_1 置位并自锁;Tag_1=1 → 输送机、启动灯、出料器、推料器同时输出;RESET PB → Tag_1 复位,设备停止,复位灯亮;
目的:每个周期执行一次 Factory IO 的通信/同步配置。
条件 → 动作:无条件调用 SCL 函数 MHJ-PLC-Lab-Function-S71200。
注意:这段 SCL 不是产线逻辑,而是仿真环境的底层握手;它的内容依赖 Factory IO/TIA 的特定内存布局,换项目时不要直接照搬。

条件 → 动作:START PB 置位 Tag_1 并自锁;RESET PB 常闭断开时复位。
逻辑:Tag_1 = (START PB OR Tag_1) AND NOT RESET PB

条件 → 动作:Tag_1=1 → COVEYOR、START INDICATOR、EMMITOR、REMOVER 同时为 1。
为什么:四个输出共用同一个运行标志,保证启停一致。
逻辑:COVEYOR = Tag_1(其余三个同理)

条件 → 动作:Tag_1=0 → RESET INDICATOR=1。
逻辑:RESET INDICATOR = NOT Tag_1
| 名称 | 数据类型 | 注释 |
|---|---|---|
| Input | ||
| Output | ||
| InOut | ||
| Temp | ||
| rdTimeReturn | Int | |
| outputTime | DTL | |
| SyncVal | Byte | |
| forVal | Int | |
| forVal_2 | Int | |
| Value | Byte | |
| Constant | ||
| CompVal | Byte | |
| Value_01 | Byte | |
| Value_01_DW | DWord | |
| Value_02_DW | DWord | |
| Return | ||
| Ret_Val | Void | |
12#Value:=PEEK(area := 16#82,3 dbNumber := 0,4 byteOffset := 511Ret_Val);5#Value := #Value + 1;67POKE(area := 16#82,8 dbNumber := 0,9 byteOffset := 511,10 value := #Value);1112POKE(area:=16#81,13 dbNumber:=0,14 byteOffset:=1016,15 value:=#16#A165_D992);16POKE(area := 16#81,17 dbNumber := 0,18 byteOffset := 1020,19 value := #16#58BE_4401);2021POKE(area := 16#81,22 dbNumber := 0,23 byteOffset := 511,24 value := B#16#00);2526FOR #forVal := 0 TO 120 DO27 FOR #forVal_2:=0 TO 10 DO28 #rdTimeReturn:=RD_SYS_T(#outputTimeRET_VAL);29 #rdTimeReturn := WR_SYS_T(#outputTimeRET_VAL);30 #rdTimeReturn := RD_SYS_T(#outputTimeRET_VAL);31 #rdTimeReturn := WR_SYS_T(#outputTimeRET_VAL);32 END_FOR;33 #SyncVal:= PEEK(area := 16#81,34 dbNumber := 0,35 byteOffset := 511Ret_Val);36 IF #SyncVal = #16#34 THEN37 GOTO ;38 END_IF;39END_FOR;40RETURN;414243POKE(area := 16#81,44 dbNumber := 0,45 byteOffset := 511,46 value := B#16#0);474849 目的:与 Factory IO 仿真建立/同步通信。
条件 → 动作:代码用 PEEK/POKE 读写特定内存区域(area 16#81/16#82、DB 0、固定偏移),写入固定标识值,循环调用 RD_SYS_T/WR_SYS_T 并等待同步值;最后清理同步位。
为什么:这类代码通常是仿真软件或厂商提供的"连接初始化"例程,靠固定内存地址和标识值完成握手。
注意:导出代码里有 byteOffset := 511Ret_Val 和空的 GOTO ;,看起来是导出/手工修改造成的语法问题,直接编译可能失败;学习时把它当成"通信例程"理解即可,不要作为 SCL 语法范例。
START PB 和 RESET PB 的常闭状态。511Ret_Val 和 GOTO ; 两处;不同 TIA/Factory IO 版本的地址可能不同。| 名称 | 数据类型 | 地址 | 注释 |
|---|---|---|---|
| START PB | Bool | %I0.0 | |
| RESET PB | Bool | %I0.1 | |
| COVEYOR | Bool | %Q0.0 | |
| START INDICATOR | Bool | %Q0.1 | |
| RESET INDICATOR | Bool | %Q0.2 | |
| EMMITOR | Bool | %Q0.3 | |
| REMOVER | Bool | %Q0.4 | |
| Tag_1 | Bool | %M0.0 |