回复:2023.7.4练习——报警灯控制程序

已锁定

龟仙人

西门子1847工业学习平台

  • 帖子

    928
  • 精华

    15
  • 被关注

    162

论坛等级:奇侠

注册时间:2006-12-15

普通 普通 如何晋级?

发布于 2023-07-04 21:35:18

2楼

上面的程序用到了输出操作,有可能我们的报警变量不是连续的,比如下面的变量,


这种情况下可以用peak和poke指令将bool型或分散的bool变量整合程字节或是字,要批量操作的前提是变量地址有一定的规律,按照一定的规律就可以批量操作。

以下程序是将一个结构体中的部分位整合到一个word数组中,针对第二张图片中的结构体:

FOR #ForNum := 0 TO 23 DO

    POKE_BOOL(area:=16#84,

              dbNumber:=104,

              byteOffset:=100+#ForNum/2,

              bitOffset:=(#ForNum MOD 2)*4,

              value:=PEEK_BOOL(area := 16#84, dbNumber := 102, byteOffset := 16 + #ForNum * 18, bitOffset := 4));

    POKE_BOOL(area := 16#84,

              dbNumber := 104,

              byteOffset := 100 + #ForNum / 2,

              bitOffset := 1 + (#ForNum MOD 2) * 4,

              value := PEEK_BOOL(area := 16#84, dbNumber := 102, byteOffset := 16 + #ForNum * 18, bitOffset := 5));

    POKE_BOOL(area := 16#84,

              dbNumber := 104,

              byteOffset := 100 + #ForNum / 2,

              bitOffset := 2 + (#ForNum MOD 2) * 4,

              value := PEEK_BOOL(area := 16#84, dbNumber := 102, byteOffset := 16 + #ForNum * 18, bitOffset := 6));

    POKE_BOOL(area := 16#84,

              dbNumber := 104,

              byteOffset := 100 + #ForNum / 2,

              bitOffset := 3 + (#ForNum MOD 2) * 4,

              value := PEEK_BOOL(area := 16#84, dbNumber := 102, byteOffset := 16 + #ForNum * 18, bitOffset := 7));

END_FOR;

以下程序是将连续的BOOL变量存入到word数组中:

//将变量存入数组中,方便比较操作

FOR #ForNum := 0 TO 13 DO

    POKE(area:=16#84,

         dbNumber:=104,

         byteOffset:=6+#ForNum,

         value:=PEEK_WORD(area := 16#84, dbNumber := 102, byteOffset := #ForNum ));

END_FOR;


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10591条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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