恭喜,你发布的帖子
发布于 2026-05-25 16:06:51
37楼
下面是触摸屏上的模拟,有点像那么回事了
图中的M0.0之类的可以换成变量名称,看的更直观些
图中的触点都是向量图,但是是几个向量图的群组,因为触点左右的线条也需要控制颜色,线条的颜色反应了能流的状态,触点后面线条的颜色不仅和触点前面线条颜色有关,还和触点状态有关,所以在触摸屏里定义了很多中间变量来控制线条的颜色(图中需要12个临时变量),当然水平线条的颜色也是需要控制的,触点或线圈内中间的方块是触点的状态,方块的颜色当然也需要控制,而且和触点左右2边的颜色无关
上面的常闭点M0.4左边的线颜色控制变量搞错了,第二个和第三个颜色错了,不过很容易修改过来
为方便修改,直接在同一个宏里出来这些临时变量,下面是代码
macro_command main()
bool T=true
bool F=false
bool M0_0=false
bool M0_1=false
bool M0_2=false
bool M0_3=false
bool M0_4=false
bool M0_5=false
bool M0_6=false
bool M0_7=false
bool M1_0=false
bool M1_1=false
GetData(M0_0, "Siemens S7-200 SMART (Ethernet)", M, 0.0, 1)
GetData(M0_1, "Siemens S7-200 SMART (Ethernet)", M, 0.1, 1)
GetData(M0_2, "Siemens S7-200 SMART (Ethernet)", M, 0.2, 1)
GetData(M0_3, "Siemens S7-200 SMART (Ethernet)", M, 0.3, 1)
GetData(M0_4, "Siemens S7-200 SMART (Ethernet)", M, 0.4, 1)
GetData(M0_5, "Siemens S7-200 SMART (Ethernet)", M, 0.5, 1)
GetData(M0_6, "Siemens S7-200 SMART (Ethernet)", M, 0.6, 1)
GetData(M0_7, "Siemens S7-200 SMART (Ethernet)", M, 0.7, 1)
GetData(M1_0, "Siemens S7-200 SMART (Ethernet)", M, 1.0, 1)
GetData(M1_1, "Siemens S7-200 SMART (Ethernet)", M, 1.1, 1)
bool L01=false
bool L02=false
bool L03=false
bool L04=false
bool L05=false
bool L06=false
bool L07=false
bool L08=false
bool L09=false
bool L10=false
bool L11=false
bool L12=false
L01=T
L02=L01&M0_0
L03=L02&M0_1
L04=L01&M0_2
L05=L04&M0_3
L06=L01&(not M0_4)
L07=L03|L05|L06
L08=L07&M0_5
L09=L08&M0_6
L10=L07&(not M0_7)
L11=L09|L10
L12=L11&M1_0
SetData(L01, "Local HMI", "L01", 1)
SetData(L02, "Local HMI", "L02", 1)
SetData(L03, "Local HMI", "L03", 1)
SetData(L04, "Local HMI", "L04", 1)
SetData(L05, "Local HMI", "L05", 1)
SetData(L06, "Local HMI", "L06", 1)
SetData(L07, "Local HMI", "L07", 1)
SetData(L08, "Local HMI", "L08", 1)
SetData(L09, "Local HMI", "L09", 1)
SetData(L10, "Local HMI", "L10", 1)
SetData(L11, "Local HMI", "L11", 1)
SetData(L12, "Local HMI", "L12", 1)
end macro_command
35楼的模拟梯形图监控状态,只是根据当前状态计算中间变量来模拟能流。
但是感觉西门子的CPU和编程软件之间有一种特殊的通信,会把监控的程序段的每一步的结果(逻辑堆栈及数据)传送给编程软件,编程软件再把每一步的结果显示出来,也就是会显示每一步的即时信息,而不是plc扫描周期结束的状态。有点类似于单步中断,监控时每执行一步就生成一些信息,直到每一段结束,然后把这些信息一次性打包发给编程软件。
下图中当M6.1为OFF时,程序段4的第一行中M0.2为1,这是因为程序段4的最后将M0.2置位为1了,此时M0.2的值的最新状态为1;当M6.1为ON时,程序段4的第一行中M0.2为0,此时M0.2的值最新状态为0。
基于这种特殊通信机制,编程软件就可以显示出即时信息,而不是只显示PLC扫描周期结束的状态。
下面的图用STL监控,可以看到中间结果(逻辑堆栈)。
当然如果数据变化很快,因为通信的延迟有可能只显示出部分状态而跳过部分中间状态,此时就会感觉不连贯。
这些只是猜测,用35楼的触摸屏肯定是不能显示下面的结果的,因为触摸屏只能采集到plc扫描周期结束时的信息,而得不到每一步的中间结果。
欢迎大家来讨论。
请填写推广理由:
分享
只看
楼主