twincat3 中是否有指定整数范围的全局常量?

Are there global constants specifying the integer ranges in twincat3?

我想知道在任何 twincat3 系统库中是否有类似 UINT_MAX (= 65535) 的定义。

在 TwinCAT 中似乎没有任何特定的东西可以满足您的需求。但是在对象的 C 层内部有一些相似


UINT

类型系统中有多个 UINT 版本(UINT、UINT24、UINT40、UINT48、UINT56),它们都致力于相同的信息范围和值。

在 TMC 处理(数据类型)内部查看时,这些数据类型中的每一个都有 2 个属性:

  • DisplayMinValue: #x0000
  • DisplayMaxValue: #xFFFF

这些属性的实现和访问似乎仅限于通过 C 接口访问,无法从 TwinCAT 本身内部访问,但它们确实存在。

我也没见过。但是您可以按如下方式轻松创建它们

PROGRAM MAIN
VAR
    number : UINT;
    UINT_MAX : UINT;
END_VAR

UINT_MAX := number - 1;

您也可以只使用一个变量 UINT_MAX := UINT_MAX - 1;,但是您必须确保 1 只被减去一次。

最简单的方法是在全局变量列表中定义一次并将其放入库中。

解决此问题的另一种方法是使用按位运算符 NOT。定义一个名为 UINT_MAX 的 UINT 并在 PLC 的第一个循环中使用以下代码段:

UINT_MAX := NOT UINT_MAX;