故事作者:万泉河

最近创作

看看TA的故事

0225【万泉河】一种PLC程序中使用M全局变量的方法

已锁定

万泉河

  • 帖子

    10913
  • 精华

    132
  • 被关注

    1021

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

0225【万泉河】一种PLC程序中使用M全局变量的方法

1770

7

2022-02-26 09:18:14

0225【万泉河】一种PLC程序中使用M全局变量的方法

 

看到题目, 肯定立马有人会跳着杠起来了:你万老师不是反对PLC程序中使用M变量的吗,这怎么还明目张胆地教起人用M变量了?

 

是的,反对用M变量的是我, 纵容人使用M变量的也是我。

 

我自己做的PLC项目,当然可以完全绕过使用M变量。 这在我分享给学员们的学习资料中千百次地得到了验证。 没有一个学员从程序中发现了一个M变量,而跳出来找我索赔的。

 

所以,所有学员, 以及懂一些计算机基本编程原理的同行都知道, 使用M变量的程序实在太LOW, 有太多的后患。

 

这是一个基本的常识。

 

然而也有一些学员,在讨论时会羞羞答答地表示,自己还会酌情用一部分M变量。 主要的原因为自己懒, 因为用M变量实现一些特殊比较便捷。

 

我当然可以表示理解,在工期紧张,现场调试工作量大的情况下,被迫无奈特殊环节使用一点M变量也是有情可原的。 我当然不可能跟着所有学员追杀到他们的工程项目,勒令他们整改。 这本来也不在我的职责与权限之内呀!

 

所以我提出, 你图便捷省事,要使用M变量,允许。 但我可以教给你们一个用起来不那么糟糕混乱的方法。

 

即为本文的内容。

 

何为糟糕混乱呢?有学员就抱怨, 从网上别人处付费购买过的库函数,里面竟然使用了M全局变量!还好是没有密码保护的,程序块插入到PLC后编译打开时直接看到变量下面红色波浪线提示。

 

我自己也经常遇到这样的程序,包括有国外著名自动化公司制作的库函数,打开之后也是一片红色。 那在不了解这个库函数的使用方法之前, 一定是蒙逼的。



 

所以非常反感见到这样的库函数。还装模作样以库的形式归档打包,弄得以为封装地多完善似的。 真还不如发出的直接是原始项目呢!

 

这样的程序库函数,对作者自己其实也比较难受。 因为有波浪线的存在,所以分享的时候就无法加密以实现知识产权保护。 否则别人拿库函数去用的时候,编译都通不过, 自然也没法使用了。

 

有的时候加密的目的还不完全是不让人看到,而可能是为了保护程序代码不被轻易篡改。 比如一个研发工程师做的程序块, 应用到现场,现场调试的是职级比较低的同事,就不希望他们随便更改核心的逻辑算法。那么加密码保护是一种令人比较放心的作法。

 

同事在现场调试中出现了故障,开发者在协助诊断时就不必担心问题出在核心模块被动过了。

 

有人可能会提出:用参数接口啊!

是的, 把使用的变量做成参数放到接口上,调用的时候分配实参,确实可以解决这个问题。 然而, 要知道函数的接口是非常宝贵的,是用于正常的功能参数的。 这种因为程序功能强加到参数接口而多出来的参数,会导致函数调用中异常难用。想想看比如这个FB如果要被调用100次,每次中都还有部分管脚固定分配了某个变量,M0.0, M0.1….那也是相当恶心的。

 

同比之下,倒还不如直接放到程序里面呢!


我给出的方法是, 在FB库函数中,需要使用M变量的地方,用一个FC替代。 FC内部使用M变量,把值送到OUTPUT管脚输出。FB中通过获取FC的OUTPUT管脚的值,得到了需要的M的状态。

 

这里还是以FirstScan 为例。

 

当然, 我以前有些过文章如何不使用S7-1500系统变量而实现FirstScan功能。其实二者在细节上还是有一些差别。所以这里做出来,我自己未来有机会时也可以用到。

 

首先, CPU中设置了系统变量字, 因而生成了变量符号。

 

建立FC:  GetFirstScan

 


然后FB程序中调用这个FC, 并将其输出管脚绑定到FB中所建立的TEMP变量:



这样核心算法FB中就成功得到了需要的M变量的值, 而逻辑中却没有使用M变量。

 

这样,如果需要加密, 则只需要加密FB,而FC保留公开,如此简单的逻辑,随便委托怎样的新手,都不会改错。

 

然后建立起对FB的实例调用:


查看整个程序的调用结构:

 


系统的调用结构从高到低依次为:

 

OB--FC--FB--FC

 

其中被夹在夹心层的FB是核心的逻辑算法功能, 而内外两层的FC皆为简单的,可以公开分享的应用。

 

继而尝试把上面做的FB发布到项目库中,会自动将连带的FC也归档了,得到如下提示:


 


提示内容即为本文所要解决的问题。

 

而且,也说明, 老外在做他的所谓库函数的时候,也肯定被提醒过,看到过这个提示。

 

 

 


0225【万泉河】一种PLC程序中使用M全局变量的方法 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3430条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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