技术论坛

smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因

作者 主题
至圣

经验值: 13629
发帖数: 2834
精华帖: 32
主题:【探讨】smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 楼主 2022-01-07 18:41:18

最近工作太忙了。我抓空看了一些smartPLC的教程,说到边沿出发的问题,本胖认为是没有静态变量的原因。另外,200和smart的边沿存储位是系统分配的,应该是全局变量,这也是子程序中不能直接用边沿指令的一个原因。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1742967&b_id=64&s_id=0&num=10

奇侠

经验值: 8139
发帖数: 843
精华帖: 14
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 1楼 2022-01-07 21:57:47

问题即答案


13478405725
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 2楼 2022-01-07 21:58:28
实际上,并不是你想的这样。
沿指令必须保证这次的的逻辑与上次的逻辑不同。当使用静态变量时因为静态变量不会被其他子程序改变上次记录的状态,所以能正确执行。当不是使用静态变量时,很容易被在其他子程序改掉所以沿指令执行就不正常。
至于smart沿指令不正确很多时候是使用了所有子程序共用的内存L区,L区又是被不同的子程序不停改变的,所以用户犯错就不要怪指令执行不正确了,人家沿指令是忠实的按运算逻辑执行了的。
举个栗子,L区就像公交车的座位,任意一个乘客都能坐任意一个座位(乘务员座位除外)。然后沿指令只会判断这个座位是否有人坐下/离开,而不知道到底是张三还是李四坐的一个道理。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 13629
发帖数: 2834
精华帖: 32
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 楼主 3楼 2022-01-10 08:51:24
以下是引用Zaxife在2022-01-07 21:58:28的发言 >2楼:实际上,并不是你想的这样。 沿指令必须保证这次的的逻辑与上次的逻辑不同。当使用静态变量时因为静态变量不会被其他子程序改变上次记录的状态,所以能正确执行。当不是使用静态变量时,很容易被在其他子程序改掉所以沿指令执行就不正常。 至于smart沿指令不正确很多时候是使用了所有子程序共用的内存L区,L区又是被不同的子程序不停改变的,所以用户犯错就不要怪指令执行不正确了,人家沿指令是忠实的按运算逻辑执行了的。 举个栗子,L区就像公交车的座位,任意一个乘客都能坐任意一个座位(乘务员座位除外)。然后沿指令只会判断这个座位是否有人坐下/离开,而不知道到底是张三还是李四坐的一个道理。

你说得对,可这就是我想的啊。在1200/1500/300/400上编程,我是在接口中定义一个数组,叫P Array【0-15】 of bit,专门用于上下沿的。提供16个沿的存储位,因为STEP7的存储方式,这种bit的静态变量,你定义1个和定义16个是一样的,所以本胖就不管用不用的了,干脆定义16个。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
至圣

经验值: 12705
发帖数: 1584
精华帖: 1
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 4楼 2022-01-10 15:39:17

smart子程序里面想要用沿指令,需要定义一个IN_OUT变量


努力学习西门子
以下网友喜欢您的帖子:

  
版主

经验值: 25989
发帖数: 11808
精华帖: 43
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 5楼 2022-01-10 17:34:55

1、沿指令就是一个指令,指令不会有执行错误的问题,问题在于没有实现“预想”的结果;

2、我们也注意到 ,沿指令是个全局资源,指令本身捆绑了数据,且无法剥离,这就是使用上的局限。

3、取边沿功能不复杂,完全可以自制,当前和前一次扫描状态都可以通过参数传入/传出。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 13629
发帖数: 2834
精华帖: 32
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 楼主 6楼 2022-01-11 11:23:29
以下是引用zbhdm在2022-01-10 15:39:17的发言 >4楼

smart子程序里面想要用沿指令,需要定义一个IN_OUT变量

有个视频教程也是这么教的。一时半会儿想不起来了。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
至圣

经验值: 13629
发帖数: 2834
精华帖: 32
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 楼主 7楼 2022-01-11 13:21:07
以下是引用yanxiao在2022-01-10 17:34:55的发言 >5楼

1、沿指令就是一个指令,指令不会有执行错误的问题,问题在于没有实现“预想”的结果;

2、我们也注意到 ,沿指令是个全局资源,指令本身捆绑了数据,且无法剥离,这就是使用上的局限。

3、取边沿功能不复杂,完全可以自制,当前和前一次扫描状态都可以通过参数传入/传出。

STEP7(含TIA)是可以在FB中用静态变量当边沿存储变量的。自己编程实现上下沿,还没试过。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
版主

经验值: 25989
发帖数: 11808
精华帖: 43
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 8楼 2022-01-11 16:39:15

边沿,很简单的逻辑:

设:C为当前值,P为存贮的上一次扫描保存的值

上沿:(非 P) AND C

下沿:P AND (非C)



 
以下网友喜欢您的帖子:

  
至圣

经验值: 13629
发帖数: 2834
精华帖: 32
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 楼主 9楼 2022-01-12 10:03:49
以下是引用yanxiao在2022-01-11 16:39:15的发言 >8楼

边沿,很简单的逻辑:

设:C为当前值,P为存贮的上一次扫描保存的值

上沿:(非 P) AND C

下沿:P AND (非C)


非常感谢。一会儿试试。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
奇侠

经验值: 7200
发帖数: 1396
精华帖: 1
回复:smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因


只看楼主 10楼 2022-01-13 10:20:43

你真的不知道为什么嘛?



科技在于不断探索
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
smart的子程序接口中没有静态变量是导致载程序中不能直接实用边沿的原因
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。