回复:【编程挑战】同一个FB使用同一个实例多次无条件调用完成功能

已锁定

Letham

西门子1847工业学习平台

  • 帖子

    2023
  • 精华

    43
  • 被关注

    360

论坛等级:至圣

注册时间:2006-04-15

钻石 钻石 如何晋级?

发布于 2022-07-08 09:04:08

4楼

展开查看
以下是引用yming在2022-07-07 18:12:25的发言 >3楼

我也没那么用过。

看了一下,逻辑上确实可行。西门子提供的功能块,能够确保同一扫描周期中,同一背景数据块下,同一FB多次调用的正确输出。


除了通讯这类程序,没遇到啥程序需要这样做?也可能复杂多变的工艺有吧。


以下是引用Letham在2022-07-07 08:27:33的发言 >1楼:这种思路本来就有问...

引用1楼详细内容:

这种思路本来就有问题!

1:一个MODBUS TCP 连接 只用一个背景实例 ,至于多次调了,那是受到了,西门子给做的DEMO的影响!

2:推荐做法是在西门子标准MB_CLIENT基础上再封装一层,一个MODBUS TCP连接只调一次,多个命令,轮询执行,而不是一个命令,单独调用一次。

就像第三方网关一样,配置个命令表,PLC程序内部扫描有多少MB命令需要执行,上一个执行完毕,或者超时,再执行下一个命令;

程序内部 根据命令表动态改变

MB_MODE

MB_DATA_ADDR

MB_DATA_LEN

三个参数类容

最基本原理都是一样的,上一个命令发送完成,或者超时错误等,发送下一个命令。
但是西门子提供的DEMO,如果 读写多个寄存器,线圈等,那么需要自己 更改代码,一个命令使用同样背景实例调用一次,它只是提供了一种可行方法的最基本原理。



这个,是我做的MB_CLIENT程序,按照市场上第三方网关的通用配置设计,一个连接,我只调用一次,有多少命令需要发送,自己配置在DB块里,包括和服务器的连接参数配置。

读过来的数据 ,要存放到什么区域(程序里我写死了,必须是数据块),或者 写命令的 数据来自与哪里,全部配置在命令表里。

下图是我们常用的一个网关配置界面。



人生就像一场旅行!

精华帖版主置评:这是MB_Client经典的命令打包写法。只需修改命令DB。 -yming

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10587条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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