步骤D:用例 22_multi_instance(FB 共享体多实例隔离,a=102/204/306)+ 全量回归

This commit is contained in:
2026-08-27 09:21:22 +08:00
parent c19e306512
commit 766e3a39b2
8 changed files with 61 additions and 2 deletions
@@ -0,0 +1,6 @@
# 期望:编译通过;FB 共享体多实例隔离
- Counter 编译为**单一共享函数**fn 0),MAIN 两次 `CALL 0`(c1/c2 各一次,c2 两次调用)
- 调用点 `LOADK r1` 装载**不同实例地址**(值区偏移),字段访问 `LOAD_PTR/STORE_PTR r1+off`
- `count` 是实例字段:c1 每周期 +1、c2 每周期 +2,互不干扰
- 全局 `a = c1.q * 100 + c2.q`:周期 1/2/3 = 102 / 204 / 306
+4
View File
@@ -0,0 +1,4 @@
(* globals.st *)
VAR_GLOBAL
a : INT;
END_VAR
+27
View File
@@ -0,0 +1,27 @@
(* main.st *)
FUNCTION_BLOCK Counter
VAR_INPUT
inc : BOOL;
END_VAR
VAR_OUTPUT
q : INT;
END_VAR
VAR
count : INT;
END_VAR
IF inc THEN
count := count + 1;
END_IF
q := count;
END_FUNCTION_BLOCK
PROGRAM MAIN
VAR
c1 : Counter;
c2 : Counter;
END_VAR
c1(inc := TRUE);
c2(inc := TRUE);
c2(inc := TRUE);
a := c1.q * 100 + c2.q;
END_PROGRAM
@@ -0,0 +1,11 @@
[project]
name = "case22"
entry = "program MAIN"
cycle_limit = 1000
dt_ms = 10
[files]
st = ["globals.st", "main.st"]
[gvl]
file = "globals.st"