【西门子PLC】——如何做一个系统时钟块

如果有这样一个需求,我的驾驶舱系统需要根据PLC的时间计算OEE,或者在一定的时间内执行某个操作时,或者到达某个时间不让客户再继续使用PLC的操作。(文中图的水印为自己之前公众号的名字,现在已更改为上位机自动化技术研究)

总之就是要获取PLC的时间或者根据时间操作PLC,要怎么做?

我们目前想过两个方案:

1)配套上位机或者直接mes对PLC进行点位True或者false的状态切换,去执行相应逻辑 

2)PLC内部进行时钟计算,时间到后,根据需求去做相应逻辑操作。

为了能够做两套设备进行切换以防上位机突然宕机导致PLC的某些逻辑无法操作,这个时候就需要再在PLC内部自己做一个系统时钟获取。而且一开始操作的时候,是需要根据当前所在时间先去初始化时钟的,说明书中如下

图片

实际操作就是

图片

图片

然后修改一下时钟设置一下初始化就好了。

PLC内部存在一个RTC芯片,这块芯片在PLC断电之后仍然还是会执行一段时间的。

那么有人可能会问,PLC如果断电了,该怎么办。如果不带外部时钟电池的话,会有超级电容进行供电的,如果有的话会有电池。但是这个寿命还是需要看具体手册来定。

图片

那我们做这个块的目的呢,就是为了能够实时去自由操作PLC的时间。而不需要再通过以上方法自己去获取和同步,有了信号源,上位机可以修改也可以自由操作去读取。

实现原理

先看一看西门子200Smart中对于时钟的读取和写入的命令块:

图片

图片

1)读取时间逻辑:给一个脉冲上升沿信号(可以是时钟脉冲),然后利用指针*Address指向Address首字节的地址,把当前时间读取到这个地址。

2)又由于读取出来的数值是采用BCD码存储的,为了让人可以懂得什么意思,转换为人看得懂且好操作的整型。按照顺序分别是——>第一个地址是年,第二个是月,依次类推,第6个地址是秒。

3)写时间刚刚好是反过来的,需要把year转换为bcd形式,然后通过系统自带的Set_RTC指令来进行时钟的改变。

实现步骤

1)新建一个子程序,命名为System_Time

2)新建一个变量表如下

图片

3)程序开始实现如下

读:

图片

写:

图片

最后使用的时候就是,注意一般在CPU中是以16进制表示的,所以进行时钟比较的时候也是需要用16进制,而显示在代码块中数值是转换后的10进制数字。

当需要使用这个时间的时候,注意年是只有显示24,比如2024年的时候,然后其他的如果是要得到相对应的值的话,只需要去存入地址首地址那边再根据T字节的顺序,指针指定位置后移位去找就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matrix Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值