该文章保姆级别 5行代码教会你在CodeSys系统里面获取当前时间,包括年月日,时分秒,学不会隔着网线来k我。
代码执行软件我用的是禾川的HCP编辑器,如果需要帮助可以dd,看到了会回复。
注意:
①如果只需要时间就只需要看标题2
②如果需要进阶获取信息就看标题3
目录
1、先看效果:
2、获取时间代码:
玩过codesys的都知道,变量区和代码区是分开的,不要C到一坨了,如果下面的代码CV都不会,回家吧孩子。
//变量区
错误代码: SysTimeRtc.RTS_IEC_RESULT;
UTC实时时间戳: DWORD;
北京时间时间戳: DWORD;
时间解析: DATE_AND_TIME;
时间解析字符串: STRING;
当前时间格式化: STRING(255);
————————————————————————————————————————————————————————————————————
//代码区:
//1、获取UTC时间戳(精确到秒)
//输入参数:是为了接收函数执行时的错误信息(0表示没错误)
//输出参数:是UTC时间戳
UTC实时时间戳 := SysTimeRtcGet(错误代码);
//2、将UTC时间戳转换为北京时间戳【一定要这一步,不然差好几个小时】
//输入参数1:UTC时间戳
//输出参数2:接收转换后的时间戳参数
//输出参数:是为了接收函数执行时的错误代码
错误代码 := SysTimeRtcConvertUtcToLocal(UTC实时时间戳, 北京时间时间戳);
//3、将时间戳 转为 人看得懂格式:转换后的格式是:DT#2025-5-11-22:20:4
//输入参数:需要转换的时间戳
//返回参数:转换后的信息
时间解析 := UDINT_TO_DT(北京时间时间戳);
//4、转换成字符串
时间解析字符串:=TO_STRING(时间解析);
//5、通过 REPLACE 将字符串中的不必要的东西替换掉 替换后: '2025-05-11-22:22:44'
//STR1:源字符串
//STR2:修改的内容
//P=1从第一个字符开始
//L=3是长度=3
当前时间格式化:=REPLACE(STR1:=时间解析字符串,STR2:='',L:=3,P:=1);
3、单独获取信息补充代码:
如果你还想单独获取到每一个信息的话,你可以参考下面的代码:
3.1效果:
3.2代码:
//变量区:
毫秒时间戳: SysTimeRtc.SYSTIME;
时间具体解析: SysTimeRtc.SYSTIMEDATE;
当前年: UINT;
当前月: UINT;
当前日: UINT;
当前时: UINT;
当前分: UINT;
当前秒: UINT;
当前星期几: UINT;
当前今年第几天: UINT;
当前毫秒: UINT;
aaa: DWORD;
bbb: DWORD;
ccc: DATE_AND_TIME;
ddd: STRING;
eee: STRING(255);
______________________________________________________________
//代码区:
//1、获取UTC时间戳(精确到毫秒)
SysTimeRtcHighResGet(毫秒时间戳);
//2、通过该方法进行转换
//参数1:是UTC时间戳
//参数2:是转换后的结构体变量
SysTimeRtcConvertHighResToLocal(毫秒时间戳, 时间具体解析);
//3、可以对结构体里面的独立变量取出来
当前年:=时间具体解析.wYear;
当前月:=时间具体解析.wMonth;
当前日:=时间具体解析.wDay;
当前时:=时间具体解析.wHour;
当前分:=时间具体解析.wMinute;
当前秒:=时间具体解析.wSecond;
当前星期几:=时间具体解析.wDayOfWeek;
当前今年第几天:=时间具体解析.wYday;
当前毫秒:=时间具体解析.wMilliseconds;
//如果不仅仅想在这里获取到单独的,也想获取到一个格式化好的字符串,那么就加上下面的代码
//毫秒/1000就是秒,转为DWORD
aaa:=TO_DWORD(毫秒时间戳/1000);
SysTimeRtcConvertUtcToLocal(aaa,bbb);
ccc := UDINT_TO_DT(bbb);
ddd:=TO_STRING(ccc);
eee:=REPLACE(STR1:=ddd,STR2:='',L:=3,P:=1);