用非西门子品牌的组态软件、对西门子PLC进行上位机开发时,有时会遇到这样的情况:当需要读、写PLC中的time类型的数据时,会有一点点困难。因为非西门子品牌的组态软件,大多数是不支持西门子time类型的数据,这个时候,需要怎么办呢?我们只需要将time类型,转换为通用的数据类型,比如说浮点型real,就可以愉快的进行读写操作了!
如何在西门子PLC中实现time类型与real类型的互转
本次所讲解的方法,硬件用的是西门子315pn/dp型号的PLC,软件是西门子博途15.1。
本次介绍的案例time类型变量是一个PID参数中积分时间,单位是ms。在上位机中写入的数值的单位是秒。
real类型转为为time类型,用于在上位机中对PLC中的time写入
转换思路:
需要先进行秒和毫秒之间的转换,数据类型为浮点型。再将转换后的值由浮点型进行取整后,取整为dint类型,具体的功能块的实现,请看下图。
Time类型转换为real类型,用来读取plc中time类型的数据。
转换思路:
和real类型转换为time类型的思路,大致相反。具体的实现过程见下现。
下图是在OB1中的调用情况。
如何用C#读、写西门子time类型数据
本案例使用的软件是VS 2019,与西门子的通信的通信库是S7.NetPlus,使用的是winform框架。
在窗体中使用两个按钮,一个按钮用来读取plc中time类型数据,读取的内容显示,在label标签上。一个按钮用来写入数据,将text box中输入的数据写入给plc的time类型变量。实现代码见下图
对于读写time类型这种比较特殊的数据,使用上图中read与write方法比较简单方便直接,在实际项目中可以把这一类的数据整理到一起进行封装处理。如果使用readbytes方法,解析起来可能要麻烦一些。
下图是读、写操作的测试结果