回复:S7-200 Smart软件监视时,显示梯形图的逻辑结果是直接读出来的还是软件经过计算显示出来的?

wingwf2000

  • 帖子

    361
  • 精华

    0
  • 被关注

    2

论坛等级:侠士

注册时间:2021-06-23

钻石 钻石 如何晋级?

发布于 2026-05-25 16:06:51

37楼

展开查看
以下是引用wingwf2000在2026-05-24 14:48:04的发言 >35楼

下面是触摸屏上的模拟,有点像那么回事了

图中的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扫描周期结束时的信息,而得不到每一步的中间结果。

欢迎大家来讨论。




评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9484条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。