A #BUSY
JC end1
CALL "RDSYSST"
REQ :=#REQ
SZL_ID :=#SZL_ID
INDEX :=#INDEX
RET_VAL :=#SFC51_RET
BUSY :=#BUSY
SZL_HEADER:=#SSL_HEADER
DR :=#DR
。。。
。。。
。。。
end1:Nop 0
当这个状态为1的时候我就在NW1中直接跳过SFC51被调用的这一段.
问题:被跳过的时候,SFC51还在继续工作吗?我还能读到BUSY复位的状态吗
如果不能读到,发生Busy情况时应该怎么处理。
问题补充:
按正常想法来说是busy后就无法读到,但是作为系统块,也许它能在接受到任务后继续完成工作,而不需要我每次周期都一直在监视它发送请求。完成工作后把数据写入指定地方 复位状态。但是你确认busy无法复位吗?
最佳答案
不行,这里的busy为1后应该是由于busy而影响到的程序被跳过,你的sfc51不应该被跳过,应该是一直执行的,否则你的busy位就永远为1了。
busy这个变量是可以复位的,但是正常情况下是sfc51执行完由sfc51复位busy,你现在跳过sfc51了那么这个busy就不能由sfc51来复位了。你不要想当然,他不是计时器,计时器是不受程序控制扫描的。程序块必须一直扫描才行。你这个程序应该是sfc51没有执行完的情况由程序不允许执行,那么这样的程序是可以由busy来控制的。
提问者对于答案的评价:
你提到的计时器很好的形容我的这种想法。我就是一只使能req的,我这是判断H CPU的master状态的,必须一直在读,程序里还有一些dp诊断等也在call sfc51,当心出现busy,不知道怎么处理。你能将你的想法发到我的邮箱吗?简单的描叙下处理在程序里处理busy. ‘ chao.ning@outlook.com ’
最佳答案作者回复:
你可以用轮询的功能,cpu每扫描一个周期,用一个计数器加1,判断Hcpu master状态调用sfc51判断计数器的值是否等于1等于则调用,不等于不调用,判断dp的调用则判断计数器的值是否等于2,等于2则调用,不等不调用,如果还有其他需要调用sfc51的,你按照上面的模式判断等于3,4,5,6,7,8..........判断完最后一次调用后计数器清零重新计数。为了保证充裕的时间,你可以中间加轮空
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc227751.html