在S5的OB21,OB22中(两者的程序完全相同)用“G”语句生成DB24、DB34两个数据块(另有两个预先编制的DB124、DB134),随即调用FB24,FB24中的程序如下:
L KF +0
T FW240
C DB24
L DW255
L KF +0
><F
JC =M001
M002:
C DB124
DO FW240
L DW0
C DB24
DO FW240
T DW0
C DB134
DO FW240
L DW0
C DB34
DO FW240
T DW0
L FW240
L KF+1
+F
T FW240
L KF+255
<=F
JC =M002
L KF+0
T FW240
M001:***
BE
注:DB124.DW255 = KH 0001,(CPU为S5-115U 943B)
在循环程序中只用到DB24、DB34,(DB124、DB134在循环程序中不使用)用来记录机器上的一个主转动齿轮的齿数,通过记录该齿轮的齿轮脉冲来控制其它机构的动作,我试操作
了这台设备,在自动运行过程中断电(10秒以上)上电,再按下自动运行启动按钮,仍然可以没有错误的运行,我试验了3次以上都没有问题。
我的问题是:
(1)G 语句生成的数据块的内容是全0,还是有随机值在其中?
(2)每次断电上电都会重新生成相同的数据块么?(并且把上次通电时的数据块覆盖?)
(3)用 G 语句生成数据块并写入数值后,断电的情况下,其中的数值会丢失么?(我没注意看这个型号的CPU有没有电池)
(4)(我曾问过的问题的回答是:如果你已经预先编制了数据块,那么这个G DBX语句就可以忽略了。问题ID: 46270)在这次的问题的情况下,上次通电是由语句生成的数据块相对于断电上电后再次遇到“G”语句时情况,是不是与括号内的情况相同呢?
(5)如果情况是相同或类似的,那么是不是可以这样认为:在第一次由“G”指令生成数据块后,在以后的断电上电调用OB21、OB22时,再次遇到这个“G”指令时,会认为是
要生成的数据块已经有了,而忽略“G”语句,只要不出现数据块丢失的情况,这个“G”
会一直被忽略。
如果情况是这样的,就可以理解为什么这台设备可以在断电上电的情况下也不丢失动作了,但这样讲是对的么?
曾给西门子技术支持打过电话,好像说是每次都要生成数据块,并且是全0,如果是这样的
话好像就无法解释不丢失动作的功能了,正确的理解到底是怎样的,请高手们能给个详细彻底的答案,多谢了!!
最佳答案
程序已经告诉你答案了呀,FB24就是将DB124 的内容复制到DB24, DB134的内容复制到DB34。
1如果是用G生成的话,那么肯定是0.
2断电上电如果没有DB24 DB34的话,肯定会生成的。
3生成的DB块和其它预先编制的DB块是一样的,断电保持的。(应该有电池的。)
4 如果已经有DB24 DB34那么下次断电上电,G指令就不执行了,但这里要注意的是,你程序中的FB24还是执行的,那么这是否意味着复制工作是否一定会执行呢?程序的关键点就在
L DW255
L KF +0
><F
JC =M001
如果DB24 DW255 >< 0,那么就不复制,如果等于0就复制,这样就保证了断电上电后,只要DB24 DB34存在 DW255的值不为0,数据就不会清空和覆盖。
5 和你想法一样。
我觉得是这样的,编程的人将一些出厂初始值分别放在DB134 DB124中,如果你换了一台新的PLC,那么一上电,系统就会自动建立DB24 DB34,然后用DB24 DB34工作就可以了。这样保护了出厂值不受干扰。运行中间要是断电重启后,由于DB24 DB34的数据是保持的,重启后还可以继续操作。但要是数据乱了,想恢复出厂值,那么删掉DB24 DB34,重新上电,那么初始值就回来了。
你可以将DB24 DB34数据做个备份,然后删除DB24 DB34 ,重新上电,你看看数据值是否就是DB124 DB134的数据,而且无法继续断电前的操作,而是恢复到初始值,实验如果是这样的话,应该就说明问题了。你也可以自己再加一个指令 G DB44,用一个没有使用过的DB, 断电上电,看看DB44的内容是否为0,就可以证明你的想法了。
提问者对于答案的评价:
好我试试看,谢谢!!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc139257.html