浏览示例
把语法放回完整程序里看:边沿、定时器、状态机、缓冲站、阀门控制。
打开示例库 →优化块与标准访问的区别:绝对地址、指针、Serialize/Deserialize、数组 DB 和旧程序迁移。
一句话:新 S7-1200/1500 程序默认用优化块:符号访问、无绝对地址、数组/结构更灵活;需要绝对地址、指针或旧库兼容时才用标准访问。
TIA Portal 的 FB/FC/DB 都有一个“块访问”属性:优化访问或标准访问。新建 S7-1200/1500 程序默认是优化块;旧程序、旧库或需要绝对地址时才用标准块。
在 SCL 源码里,块属性写在块头:
1FUNCTION_BLOCK "FB_Optimized"
2{ S7_Optimized_Access := 'TRUE' }
3VERSION : 0.1
4 VAR_INPUT
5 Start : Bool;
6 END_VAR
7BEGIN
8 // ...
9END_FUNCTION_BLOCK
标准访问:
1FUNCTION_BLOCK "FB_Standard"
2{ S7_Optimized_Access := 'FALSE' }
3VERSION : 0.1
4 VAR_INPUT
5 Start : Bool;
6 END_VAR
7BEGIN
8 // ...
9END_FUNCTION_BLOCK
"DB_Data".Values[1],不依赖绝对地址。P# 指针/绝对偏移;需要绝对地址时要显式转换或使用标准块。Serialize/Deserialize 在较新固件(S7-1200 FW ≥ 4.2 / S7-1500 FW ≥ 2.0)支持优化块;旧版本要求标准访问。P#M14.0 WORD 4、BLKMOV 的 legacy 写法)。Serialize/Deserialize 使用标准访问缓冲区时有 64 KB 上限;其他标准块的大小限制看 CPU/块。ReadFromArrayDB/WriteToArrayDB 访问,DB 需要 MemoryReserve=0;否则会报 “Global access to a data block with memory reserve is not permitted”。BLKMOV/PEEK/POKE 等按字节/指针的指令通常需要标准访问或明确的内存布局;新代码优先用 MOVE_BLK/UMOVE_BLK/FILL_BLK。Serialize/Deserialize 的 POS 是零基字节索引;跨 CPU/旧库通信时确认两端都用相同的访问属性和结构定义。P#/BLKMOV/PEEK/POKE 等指针访问;改成符号访问或块移动指令。Serialize/Deserialize、通信缓冲区、文件接口的字节布局。ReadFromArrayDB 等指令对 DB 属性有要求。BLKMOV 指针布局:不同 CPU/标准/优化块的布局不同,旧代码迁移要重新验证。Serialize 成字节流。不能直接按绝对地址访问;优化块按符号访问,需要绝对地址时用标准块或显式转换/指针指令。
旧版本要求标准访问;V2.0 以上优化块也支持,但跨 CPU/旧库通信仍建议确认访问属性和字节布局。
把语法放回完整程序里看:边沿、定时器、状态机、缓冲站、阀门控制。
打开示例库 →把示例导入你的 TIA Portal 工程,生成块、编译并读回核对。
了解 TiaLink →不装博途,用 MCP 逐扫描运行 SCL,做场景验收。
打开云仿真 →