一个好玩的程序求助:如何在S300 PLC 下实现扫描周期的计数

每个扫描周期,计数加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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月31日 上午12:10
下一篇 2020年10月31日 上午12:10

相关推荐