技术论坛

 回复:报警程序,,关于Zane侠说事儿程序中的问题.

返回主题列表
作者 主题
贤贤易色
奇侠

经验值:8138
发帖数:1280
精华帖:6
楼主    2021-04-09 17:25:17
主题:报警程序,,关于Zane侠说事儿程序中的问题. 精编帖 

这是原帖位置:【Zane说编程】之集中报警处理功能块的更新 — SMART版-技术论坛-工业支持中心-西门子中国 (siemens.com.cn)

关于smart #Sound_Out_***  变量声明接口的问题...  这个是个中间变量声明在临时变量区,,,,,都知道临时变量区只能保持1个扫描周期,,,..用这个变量来控制报警鸣笛,,,....我的疑问是这样能保持的住????为啥不直接用inout来填写这个报警鸣笛呢?



另外网络24最后一段程序:


又一次讲报警的数量给写回去,,#StartAddr 是IN啊,,,怎么会这样用呢,不违反规定?如果能用,,这种写法就是为了让报警数量一直不变吧,,,,,,,我感觉是没啥用,,,这个地址的值也可能随时在其它地方更改了啊........希望大家给解惑..

养活一团春意思,撑起两根穷骨头
芳季
至圣

经验值:72120
发帖数:15507
精华帖:101
1楼    2021-04-09 20:35:22
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

这样的。

第一个网络目的已经把你认为不能自锁的事情给解决了。虽然是temp参数,但是这个网络给赋值了。剩下的懂了吧?

最后一个网络是第一个网络的逆操作。两个网络的组合只产生一个效果。手工制作in/out参数。

楼主。我知道你一定不知道。西门子plc的物理输入点是可以写的。

LD I0.0

= I1.1

更何况L。

现在,你应该没有问题了吧?

贤贤易色
奇侠

经验值:8138
发帖数:1280
精华帖:6
2楼    2021-04-09 20:55:12
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

但是这个#NewAlarm_Flg  这个值或许只是1个扫描周期啊...怎么也保持不住啊.......第二个问题可以理解,,.

养活一团春意思,撑起两根穷骨头
芳季
至圣

经验值:72120
发帖数:15507
精华帖:101
3楼    2021-04-09 22:00:37
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

一个周期都不必保持。下个周期由第一个网络一开始就重新写入应该有的值。你可能没有看清楚第一个网络写的是什么。

先赋值再使用,程序完全满足这个条件。第一个网络就向L8.x写入值了。然后后面才出现你说不能自锁的程序。

看看你是在哪里没有想通?

你用过三菱的小型plc没有?它是没法带参数调用子程序的。只能自己手工制作这些携带参数。也是通过这样的mov进去;运行;mov出来来带入带出参数的。

然而。西门子200plc这个带入带出是由系统包办。in参数只带入,out参数只带出,in/out参数就又入又出。temp参数就不入不出。

如果你使用三菱plc并且自己向自己声明:M7000到M7999;D7000到D7999这个范围仅仅用于子程序临时变量用。然后子程序里面全部都是使用这个范围里面的变量。参数传递在call指令之前把in参数mov到M和D,call之后把out参数从M和Dmov到外出来,那么这种行为就相当于200plc的参数传递。三菱的M和D就是200的L。两种行为原理是一致的。

贤贤易色
奇侠

经验值:8138
发帖数:1280
精华帖:6
4楼    2021-04-09 23:10:11
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

程序是思路是这样的:VD1000存放的是报警字的数量假如是10,那就是10个字,,,,, 

 报警字是VW1004,VW1006 VW1008 VW1010 VW1012 VW1014 VW1016 VW1018 VW1020 VW1022

历史故障字是:VW1024,VW1026,VW1028,VW1030,VW1032,VW1034,VW1036,VW1038,VW1040,VW1042

循环的程序就是:写这些字跟读这些字,,,然后发现不一样的位,,...假如有新的报警位报警灯就响,,.....有报警,报警灯就亮........但是我还是觉得这也自锁不了啊.......假如VW1004是1,第一个周期后 新的报警位成立(因为VW1024值是0),,,经过处理此时VW1024也是1,,,,下个周期新的报警位就是0啊,,这时报警灯就不响了啊,因为自锁没锁住啊...............要实现的是有新报警鸣响,,,手都复位鸣响,,,,,,,或者报警消失就不响了.  只要有报警,报警灯就亮.....  不知道我描述的准确不准确...你能明白我说的意思吗?

养活一团春意思,撑起两根穷骨头
贤贤易色
奇侠

经验值:8138
发帖数:1280
精华帖:6
5楼    2021-04-09 23:29:33
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.



第一个循环:VW1004的值是1,,,,,,经过处理跟VW1024值异或,,异或后的值再跟VW1004的值与...(因为是先读VW1024的值,然后再写,经过处理VW1024值是1保存的是VW1004上个周期的值)判断这个结果是否为0,,不为0就是有新报警...

假如这个大循环结束

第二大个循环开始:VW1004的值还是1(数据不变的情况下),,,,,,VW1024的值是1,,,,,,经过异或,与........这个新的报警位是0....  那么对于这个报警鸣响就不成立了吧?你觉得呢?

养活一团春意思,撑起两根穷骨头
芳季
至圣

经验值:72120
发帖数:15507
精华帖:101
6楼    2021-04-10 11:37:03
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

你所说的“不能自锁”是着眼点在参数传递上的问题还是程序逻辑上的问题。我看你一开始说的是关于这个参数是temp不能自锁,但是看完我的解释后你是觉得参数传递上的问题理解了没有?

贤贤易色
奇侠

经验值:8138
发帖数:1280
精华帖:6
7楼    2021-04-10 11:48:21
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

我想表达的意思是说:我的理解能力觉得这#Sound_Out_Flg应该用INout     如果不是的话,,,,根绝我上面分析#NewAlarm_Flg不可能说是一直为1......那么这个报警鸣响就不会一直响了......我一直的想法就是参数传递的问题,,,第一个大周期VW1004是1,   #NewAlarm_Flg的接通条件成立.......   但第二个大期还是1,那#NewAlarm_Flg的接通条件不成立.......而#NewAlarm_Flg接通的又是报警鸣响,,,,,,也就是说第二个大周期鸣响就不响了啊...........我表达的意思你明白了没有?

养活一团春意思,撑起两根穷骨头
芳季
至圣

经验值:72120
发帖数:15507
精华帖:101
8楼    2021-04-10 11:54:28
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

我这么说,第一个网络和最后一个网络就已经达成了这个L8.x成为in/out参数了。至于程序逻辑问题我还没看。

假如你现在对这个in/out没有疑问的话,是不是仍然在逻辑上存在不能自锁的现象?

贤贤易色
奇侠

经验值:8138
发帖数:1280
精华帖:6
9楼    2021-04-10 12:03:01
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

对网络1跟最后一个网络重新给#startaddr这个我能够理解... 因为没PLC没法试这个程序是否正确.

报警灯程序.7z


养活一团春意思,撑起两根穷骨头
贤贤易色
奇侠

经验值:8138
发帖数:1280
精华帖:6
10楼    2021-04-10 12:11:54
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

这是我根据Zane写了一遍,,,,其中加了注释,,,我发现不管是博图还是samrt  他这个报警鸣响都是OUT.....而博图我用的是INOUT仿真是没问题的.......这其中是啥原理呢,他为啥这么用

养活一团春意思,撑起两根穷骨头
贤贤易色
奇侠

经验值:8138
发帖数:1280
精华帖:6
11楼    2021-04-10 16:00:21
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

报警灯程序测试完成的.7z

这是我测试完成的,,,我把#Alarm_Sound 修改成了INOUT可以实现我上述所说的功能,但使用过程中出现个问题....




一开始我以为存报警数量是放在VD里面,,,但是放在VD100后,但是子程序里边用的是BLKMOV_W,也就是说VW100  给了LW6   VW102给了LW8,,,,,假如现在用VD100存放的是10,这时数据在VW102里面....再在后面用W就不行了.........LW6里面是0........这样程序就不正确了....如果用VW100,,那么VW100刚好对应LW16...这样数据才是准确的...

养活一团春意思,撑起两根穷骨头
Zane
至圣

经验值:85170
发帖数:21052
精华帖:399
12楼    2021-04-12 23:04:19
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

就是个暂存器的作用。


把全局变量A变量拷贝到子程序的临时变量区,参与运算后的结果,又送回全局变量A,仅此而已。

临时变量的使用当然是先初始化,然后再使用的

Zane 注册自动化系统工程师 Always save before download
holdkcsxyz
至圣

经验值:13737
发帖数:1560
精华帖:24
14楼    2021-04-13 18:55:01
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

Zane斑竹讲的送回去就是自锁住了啊。本周期自锁住就行了,下个周期又重新先赋值后使用了。

Zane
至圣

经验值:85170
发帖数:21052
精华帖:399
16楼    2021-04-13 21:34:12
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

被  @ 贤贤易色  网友说得我也吓了一跳,我有这么不负责任吗?真是这样可是太对不起大家了!


还是认真地review了一下我的程序,没发现啥问题,而是发现了楼主钻了牛角尖,我传进来2个字,都有用,传出去的也是2个字,当然第一个没啥用,仅此而已。




Zane 注册自动化系统工程师 Always save before download
Zane
至圣

经验值:85170
发帖数:21052
精华帖:399
18楼    2021-04-13 21:53:48
精编帖  主题:回复:报警程序,,关于Zane侠说事儿程序中的问题.

讲这话的时候,我还真把程序具体怎么写的给忘了,我只记得我编写这段程序的初心,就是上面这段话。现在看来没错!



Zane 注册自动化系统工程师 Always save before download
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。