需要做一个定时启动和定时停止的程序,时间可以在WINCC(6.2版本)中由用户任意修改。我想把小时和分钟按两个变量来控制,变量的类型是REAL,这样设置的话可否直接转换成与系统时钟匹配的小时和分钟,系统的小时和分钟读出来是BCD码形式的,这个之间的转换如何来做呢?
问题补充:
系统时钟读出来的数据是BCD码的,转换成INT类型的数据后只能看到月份、小时和秒的数值,年、日和分钟的数值看不到,怎么转换才能看到年、月、日、时、分、秒这些数据呢?
最佳答案
1、从上位机写整型数INT或实数REAL到PLC,首先该数值需包含以毫秒为单位的时间值,在写入PLC的数据存储区后,利用ITD(Integer to Double Integer)或RND(Real to Double Integer with Rounding Off)将该值转换为双整形,然后将该值写到类型为TIME的变量里,在程序中调用FC40,将TIME转换成S5TIME即可。
2、从上位机写WORD到PLC,首先该数值需包含以某时基为单位的时间值,在写入PLC的数据存储区后,用Word Logic下的WOR_W指令将该值与其时基相或,再利用MOVE指令将得到的数值写入S5TIME类型的变量中。
3、如果使用WinCC作为上位软件,或上位软件支持32位带符号浮点数,可以从上位写32位带符号浮点数到PLC中定义为TIME的变量,然后在程序中调用FC40,将TIME转换成S5TIME即可。
相关资料:
《step7中有关时间和定时器的使用和例程(2007.09.03)》 下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=A0087
《 Step7中的时间、日期和定时器(2004.06.01) 》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=A0019
参见《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
问题补充:
当使用数据类型DATE_AND_TIME (DT) 时,将占用数据存储区的8个连续字节,以BCD码格式保存。该数据类型范围如下:
DT#1990-1-1-0:0:0.0 to DT#2089-12-31-23:59:59.999
下列IEC标准功能块进行与DATE_AND_TIME相关的操作:
•FC3: D_TOD_DT: 将DATE和TIME_OF_DAY (TOD) 结合起来,转换成DATE_AND_TIME (DT)。该功能块的管脚IN1必须在DATE#1990-01-01 到DATE#2089-12-31范围内。
•FC6: DT_DATE: 从DATE_AND_TIME 中取出DATE。
•FC7: DT_DAY : 从DATE_AND_TIME 中取出the day of the week,即星期几。
•FC8: DT_TOD: 从DATE_AND_TIME 中取出时间。
提问者对于答案的评价:
非常感谢楼主的奉献,如果将INT类型的变量通过一系列转换变为S5TIME类型,我将CPU的时钟和上位机(WINCC)同步后,直接读取CPU时钟,然后再和S5TIME的值比较。但是比较的函数里面没有WORD类型的,只有INT、DINT和REAL类型的。那么系统时钟的小时和分钟这两个值怎么读取出来呢?手册中系统的小时和分钟都是BCD码的,而且还是BYTE类型,我通过BCD_I转换时只能读到一个值,例如将年和月的转换出来时只得到月的数值,没有年的。将天和小时的读出来时只有小时的没有天的。将分钟和秒的读出来时只有秒的,没有分钟的。实际上我只要读到星期几、小时和分钟就能完成任务。怎么将BCD码的小时转换为INT或者DINT或者REAL类型的呢,就是这两个值的类型要相同,值也相同时才能做判断的。我要做的程序有好多个计划,每个计划可以设置不同的时间段,在不同的时间段内完成风机的启停和消毒控制。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc308527.html