文章目录
- 步骤1:配置确认
- 第二步:数据技术分析。
- 第三步:西门子方技术
PLC经常使用的时间格式时间;一天中的时间;天;日期和时间;很多人只会赋值,不懂存储机制。所以当数据相互转换,需要在不同设备之间传递时间参数时,就会出现一个无法解决的问题。我遇到过这个问题。我的北服PLC需要发送日_时_日期数据给西门子PLC,只能字节传输,我没办法。让我一步一步来解决这个问题。
步骤1:配置确认
北孚plc与西门子Profibus模块的通信和数据交换。配置中只有字节选项,如下图所示。选择了64字节的输入输出接口,数据只能通过BYTE传输,然后转换成需要的日期数据。
第二步:数据技术分析。
我们需要在项目中传输四个时间和日期数据,TIME;一天中的时间;天;日期和时间;下面逐一分析列举:
时间的类型是时间数据,最小单位是1毫秒。格式为:T# xx d xx h xx m xx s xx ms其中:T表示时间常数的开始,#表示它后面的立即数,D表示天,H表示小时,M表示分钟,S表示秒,ms表示毫秒。例如,T#1d2h3m4s500ms表示1天2小时3分4秒500ms。
如下图写一个模拟程序:将时间存储在DWORD中,看看每个字节是怎么显示的。如下面的程序所示,time类型不能直接赋给DWORD,所以需要指示TIME_TO_DWORD进行转换。
让程序运行,给tTime赋值1分钟,如下图所示。存储在DWORD数据结构dwTime中的32位十六进制数是000EA60转换成十进制的数是60000,1分钟I输入是60000毫秒,所以dwTime中存储的数是tTIME的最小单位。在项目中,可以将32位十六进制数000EA 60发送到西门子模块,西门子可以将其转换为时间。
总结1分钟的数据存储结构如下:
一天中的时间类型是一天中的时间。时间的起始时间为12:00AM,最小单位为1ms。时间数据的格式是:TOD#HH:mm:ss。其中:TOD表示时间常数的开始,#表示它后面的数字,HH表示小时,mm表示分钟,ss表示秒。如TOD # 13: 30: 30,表示13: 30: 30。
如下图写一个模拟程序:将时间存储在DWORD中,看看每个字节是怎么显示的。如下程序所示,时间类型不能直接赋给DWORD,需要指示TOD_TO_DWORD进行转换。
让程序运行,并为todTime赋值1: 00,如下图所示。存储在DWORD数据结构dwTime中的32位十六进制数是0036EE80十进制数是3600000,我输入的1: 00比12: 00的起始时间长1小时,也就是3600000ms,所以dwTime中存储的数是tTIME的最小单位。在项目中,可以将32位十六进制数00 36 EE 80发送到西门子模块,西门子可以将其转换为时间。
将1: 00时的数据存储结构总结如下:
日期的类型是DATE,最小单位是秒,起始时间是1970年1月1日。数据类型的格式为:日期#YY-MM-DD。其中:DATE表示日期常数的开始,#表示它后面的数字,YY表示年,MM表示月,DD表示日。例如,日期#1970-1-2表示1970年1月2日。
如下图写一个模拟程序:将时间存储在DWORD中,看看每个字节是怎么显示的。如下面的程序所示,时间类型不能直接赋给DWORD,所以需要指示DATE_TO_DWORD进行转换。
让程序运行并将值1970-01-02赋给dTime,如下图所示。存储在DWORD数据结构dwTime中的32位十六进制数是00 01 51 80;十进制数是86400,我输入的1970-01-02比1970-01-01的起始时间大一天,最小单位是S,也就是86400s,所以dwTime中存储的数是dTIME的最小单位。在项目中,可以将32位十六进制数00 01 51 80发送到西门子模块,西门子可以将其转换为时间。
将1970年1月2日的数据存储结构总结如下:
DATE_AND_TIME类型是日期和时间组合的数据,最小单位是秒,起始时间是1970年1月1日上午12:00。数据格式为DT#YY-MM-DD-HH:mm:ss。其中:DT表示日期和时间常数的开始,#表示它后面的数字,YY表示年,mm表示月,DD表示日,HH表示小时,MM表示分,ss表示秒。如1970-1-2-13: 30: 30,表示1970年1月2日13: 30: 30。
如下图写一个模拟程序:将时间存储在DWORD中,看看每个字节是怎么显示的。如下程序所示,时间类型不能直接赋给DWORD,所以需要指示DT_TO_DWORD进行转换。
让程序运行,并给datTime赋值1970-01-02-00: 01,如下所示。存储在DWORD数据结构dwTime中的32位十六进制数是00 01 51 BC;十进制数是86460,我输入的1970-01-02-00: 01比1970-01-01的起始时间长一天一分钟,最小单位是S,也就是86460s,所以dwTime中存储的数是dTIME的最小单位。在项目中,可以将32位十六进制数00 01 51 BC发送到西门子模块,西门子可以将其转换为时间。
将1970-01-02-00:01的数据存储结构总结如下:
第三步:西门子方技术
西门子的数据结构和Codesys平台的数据结构有些不同。比如DATE_AND_TIME的数据结构如下图所示,转换时要注意。这里就不说西门子了,以后再单独写西门子的数据结构。
最后,时间和日期的数据结构在这里也学得差不多了。不同类型的设备是相似的,有相同的原理。西门子的上述数据结构不同,原理相同,只是划分了不同的字节来存储不同的数据。如果你有任何问题,请在评论区问我。