每个扫描周期,计数加1,需要最大计数到2^62,
问题1: 如何实现 2^62的 计数,2^31 * 2^31 是否可以用两层for循环嵌套,但是最终超过32位后的数字怎么存储 ??
问题2:计数值需要在HMI显示出来,并且仅可使用一个变量,可是S300 系统仅支持32位,不支持64 位 如何处理。
注:要求仅可使用SCL 编程。具体要求请看图片
最佳答案
提供一个思路
做个数组,低位累计,大于9,进位高位,
将最终的数组换成字符串,在触摸屏上显示,200多位都不是问题
FUNCTION_BLOCK "块_2"
{ S7_Optimized_Access := ''''FALSE'''' }
VERSION : 0.1
VAR
DataInt : Array[0..100] of Int;
DataString : Array[0..100] of Char;
TEST : Int;
I : Int;
DataLen : Int;
TEMP : Int;
OUT : String;
tOut : String;
END_VAR
BEGIN
#DataInt[0]:=#DataInt[0]+1;
#I := 0;
#TEST := #DataInt[0];
WHILE #TEST>9 DO
IF #DataInt[#I] > 9 THEN
#DataInt[#I+1] := #DataInt[#I+1] + 1;
#DataInt[#I] := 0;
END_IF;
#I := #I + 1;
#TEST := #DataInt[#I];
END_WHILE;
FOR #I := 0 TO 100 DO
IF #DataInt[#I] > 0 THEN
#DataLen := #I;
END_IF;
END_FOR;
#I := #DataLen;
#OUT := '''''''';
#tOut := '''''''';
FOR #I := 0 TO #DataLen DO
#DataString[#I] := INT_TO_CHAR(#DataInt[#I] + 48);
#OUT := CONCAT(IN1 := CHAR_TO_STRING(#DataString[#I]), IN2 :=#tOut);
#tOut := #OUT;
END_FOR;
END_FUNCTION_BLOCK
提问者对于答案的评价:
谢谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc289199.html