在ABB的PLC中,直接用SYS_TIME函数在梯形图中就可以获得一个DWORD的数,可以用来相减得到当前逝去时间的毫秒值。例如当前取得数为FFFFFF00,过一段时间取得数为FFFFFFFF,相减得到FF毫秒,即当前逝去时间为0.255秒。
在西门子step7中可这样吗?
我调用READ_CLK,得到的是一个8个byte的值,我可以取出其中的时、分、秒、毫秒,拼成一个32位的DWORD的数,但有三个问题,一、该数为60进制的数而非100进制的数,不可以直接相减;二、还要考虑0点和23点的转换;三、只能计数到10毫秒级,而不是1毫秒级。
请问,像ABB PLC这样的功能如何实现?
不考虑系统自带的计时器。因为我的逻辑中涉及到循环,虽然有系统自带的SFB计时器,但每个循环都需要不同的计时器,但写代码只写一次,即在循环中只能调用同一个计时器。
谢谢!
最佳答案
1、通过下述IEC标准功能块,可以实现0点和23点的转换,是1毫秒级的:。
下列IEC标准功能块进行与DATE_AND_TIME相关的操作:
、FC3: D_TOD_DT : 从DATE_AND_TIME 中取出DATE。
、FC6: DT_DATE : 功能FC6从格式DATE_AND_TIME提取数据类型格式DATE。
、FC7: DT_DAY : 功能FC7从格式DATE_AND_TIME提取周时。
、FC8: DT_TOD:从格式DATE_AND_TIME提取数据类型格式TIME_OF_DAY。
详见:
参见《TIME, DATE and TIMER in STEP 7》下载:
http://d101.d.iask.com/fs/800/1/3afb689f14c1def3889e0e7413fba89e10236930/pdf/Time%2C+Date+and+Timer+in+STEP+7.pdf
<S7-300400的系统软件和标准功能>下载:
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=1023
2、两个时间值(格式DT)相减:
应用FC34 SB_DT_DT:
功能FC34,两个时间值(格式DT)相减,结果为持续时间(格式TIME)。时间值必须位
于从DT#1990-01-01-00:00:00.000到DT#2089-12-31-23:59:59.999
的范围内。此功能不运行输入检查。如果第一个时间(参数DT1)大于(晚于)第二个
(参数DT2),则结果为正;如果第一个时间小于(早于)第二个,则结果为负。如果
减法结果超出TIME范围,则将结果限制到相应值,并将状态字的二进制结果(BR)
位设置为“0”。
详见上述<S7-300400的系统软件和标准功能>。
提问者对于答案的评价:
和时间有关的函数和解释很详细,谢谢。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc235790.html