关于1200 Modbus通讯轮询及共用背景数据块的问题

已锁定

阿龙online

西门子1847工业学习平台

  • 帖子

    4
  • 精华

    0
  • 被关注

    2

论坛等级:游民

注册时间:2010-03-30

普通 普通 如何晋级?

关于1200 Modbus通讯轮询及共用背景数据块的问题

2005

8

2019-05-10 10:57:39

最近在做一个项目,要求使用1200读取电控柜里面一个仪表的参数,有8,9个参数,大概需要分4次读取。于是就是选取了1214C+CM1241Mobus这种方式进行。在编程时遇到疑问:原因时Modbus_Comm_Load的MB_DB参数需要连接下面Modbus_Master功能块的背景数据块,这样对于多次调用Modubs_Master就是个问题了。



 

于是参考了下西门子官方的MODBUS轮询例程,大概进行如下的编写。



到这里就比较惊讶 了,于是去查了下


MB_Master这个就是个FB功能块,带背景数据块,如果按照例程中那样调用,就是出现在程序中多次使用同一个背景数据块的问题,这会不会产生什么问题呢?

(由于手里暂时没有硬件,所以暂时不知道例程是否能得到正确的结果)

 

于是我就做了个测试,目的就是看对于调用同一个同样背景数据库的程序会产生什么影响:

 

1.       首先生成一个公共调用的FB块,分别带了bool和real的数据输入、输入输出、输出和在里面生成的静态变量


2.       程序如下:


Net1如果第一个bool参数(bit1)为True,则将输入的数据+88然后输出到输出变量1 outval1

Net2如果第二个bool参数(bit2)的上升沿,则将第一个输入输出(inoutval1)变量自加1,而将其内部的静态数据(intervals[0])自减1,将结果分别赋值给输出变量2(outval2)和输入输出变量2(inoutval2)

 

3.       生成外部调用

首先使用一个2HZ的脉冲进行将MW50从0~2变化,然后按MW50分别触发bit2的脉冲,


然后下面分3次调用:

 

第一次:


第二次


第三次


 

4.       测试

经过测试,得出如下结果:

a.       如果输入1(bit1)为True时,程序想要的时将输入1(val1)+88.0然后输出到输出变量(outval1)


结果如下:如果3次调用都是false,则对3个的输出结果都不影响。任意一个调用为True,该调用将会影响所有结果,直到下一个调用为真的更改结果。

 

b.       如果bit2有脉冲输入时,那么FB里面想要结果:


输入变量2(bit2)的上升沿会将输入输出1(inoutval1)的结果自加1

同时将内部静态变量intervals[0]自减去1,然后再将该值输出到输出变量2(outval2)和输入输出变量2(inoutval2)

 

而调用的结果:


对于打开脉冲的那个功能块,输入输出2(inoutval2)在跟随变化,而且变化频率是和触发的频率一致,而Outval2的变化会多1,是因为第3个也是打开了脉冲功能。

而对于第一个,关掉脉冲的:


结果输入输出不受影响,而输出将会也是跟随前面的功能块变化。

 

总结:如果非得在同一个程序使用相同的FB背景数据块,那么可能会产生如下结果:

1.       对于输出型的变量,值永远会刷新到输出连接的变量,只要有任何地方更改了改变量值。所有的输出都会是一样并且输出到连接的变量。也就是说,输出变量是共用的。

2.       对于输入输出的变量,如果不触发,则似乎不受影响。变量不共用。

3.       对于内部static变量,里面的所有变量会是共用的,例如如果想使用里面做沿触发存储位是会出错的。

那么问题来了,对于Modbus_Master里面的变量,


这些部分都会是共用,那么数据会得到准确的数值吗?

 

最后看到有人另外一种方案:使用Modbus_Master的输出参数作为变量,然后每次调用完后及时取出来,然后更改参数再读取,可能这样比较靠谱些。


关于1200 Modbus通讯轮询及共用背景数据块的问题 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有13043条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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