恭喜,你发布的帖子
发布于 2021-08-13 06:13:48
5楼
看你是如何调用FC的?是如何赋值的?
版主辛苦,这么晚了还在回复帖子
函数功能比较简单,将包含年月日或者时分秒的数组作为形参带入,函数返回转换好的字符串
首帖的第一第二两张图是函数的数组形参定义和引用,第三和第四张图是将数组形参拆分成单个变量形参,同样的程序,数组形参结果就是错我的,第五张图是实际输出的结果。
在论坛里图可能看起来比较麻烦,我将这个函数COPY过来,刚学SCL写的比较简陋。
FUNCTION "Rtc2Str" : String
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Date_Array : Array[0..2] of USInt;
IsDate : Bool;
END_VAR
VAR_TEMP
StrTemp0 : String;
StrTemp1 : String;
BcdTemp : Byte;
UintTemp : UInt;
END_VAR
BEGIN
#BcdTemp := ((#Date_Array[0] / 10) * 16)+(#Date_Array[0] MOD 10);
#UintTemp := HTA(IN := #BcdTemp, N := 1, OUT => #StrTemp1);
#StrTemp0 := #StrTemp1;
IF #IsDate THEN
#StrTemp0 := CONCAT(IN1 := #StrTemp0, IN2 := '-');
ELSE
#StrTemp0 := CONCAT(IN1 := #StrTemp0, IN2 := ':');
END_IF;
#BcdTemp := ((#Date_Array[1] / 10) * 16) + (#Date_Array[1] MOD 10);
#UintTemp := HTA(IN := #BcdTemp, N := 1, OUT => #StrTemp1);
#StrTemp0 := CONCAT(IN1 := #StrTemp0, IN2 := #StrTemp1);
IF #IsDate THEN
#StrTemp0 := CONCAT(IN1 := #StrTemp0, IN2 := '-');
ELSE
#StrTemp0 := CONCAT(IN1 := #StrTemp0, IN2 := ':');
END_IF;
#BcdTemp := ((#Date_Array[2] / 10) * 16) + (#Date_Array[2] MOD 10);
#UintTemp := HTA(IN := #BcdTemp, N := 1, OUT => #StrTemp1);
#StrTemp0 := CONCAT(IN1 := #StrTemp0, IN2 := #StrTemp1);
#Rtc2Str := #StrTemp0;
END_FUNCTION
调用上层程序是这样的,实参是其他程序保存在DB块里面的运行LOG。
VAR_TEMP
打印字符串 : String;
END_VAR
。
。
。
#打印字符串 := CONCAT(IN1 := '工作日期:', IN2 := "Rtc2Str"(Date_Array := "打印数据".记录1.开始日期.年月日,
IsDate := 1));
。
。
。
数据块的结构只能截图了,无法复制成文本方式
请填写推广理由:
分享
只看
楼主