数据类型说明

数据类型是编程语言中非常重要的概念,其作用主要有以下几个方面:

  • 内存分配:不同的数据类型在内存中需要分配不同的空间。例如,整数通常需要占用 4 个字节的内存空间,而浮点数可能需要 8 个字节或更多的空间。因此,正确的数据类型可以确保内存使用效率和程序性能。
  • 数据处理:不同的数据类型可以支持不同的操作和运算。例如,整数可以进行加减乘除等算术运算,而字符串可以进行连接、分割等操作。正确的数据类型可以确保数据处理的正确性和有效性。
  • 输入输出:不同的数据类型需要不同的输入输出方式。例如,整数可以通过标准输入输出进行读写,正确的数据类型可以确保程序能够正确地读写数据。
  • 代码逻辑:不同的数据类型对应不同的含义和用途,因此在编写代码时需要选择正确的数据类型来反映代码逻辑和意图。例如,布尔型变量通常用于控制流程和逻辑判断,而整数和浮点数通常用于数学计算。

综上所述,正确选择和使用数据类型是编程中至关重要的一步,它直接关系到程序的正确性、性能和可维护性。
下面是 neuron 的数据类型:

数据类型数据范围占用字节数据示例
INT8-128~1271比如 100,就是[0x64]
UINT80~2551比如 100,就是[0x64]
INT16-32,768~32,7672比如 100,就是[0x64][0x00]
UINT160~65,5352比如 100,就是[0x64][0x00]
INT32-2,147,483,648~2,147,483,6474比如 100,就是[0x64][0x00][0x00][0x00]
UINT320~4,294,967,2954比如 100,就是[0x64][0x00][0x00][0x00]
INT64-9,223,372,036,854,775,808~9,223,372,036,854,775,8078比如 100,就是[0x64][0x00][0x00][0x00][0x00][0x00][0x00][0x00]
UINT640~18,446,744,073,709,551,6158比如 100,就是[0x64][0x00][0x00][0x00][0x00][0x00][0x00][0x00]
FLOAT(real)-3.40E+38~+3.40E+384比如 100,就是[0x00][0x00][0xC8][0x42]
DOUBLE(long real)-1.79E+308~+1.79E+3088比如 100,就是[0x00][0x00][0x00][0x00][0x00][0x00][0x59][0x40]
BIT0/11 个位0x11 的第 0 位,为 1
BOOLTrue/False1 个位0x11 的第 0 位,为 True
WORD0~65,5352比如 100,就是[0x64][0x00]
DWORD0~4,294,967,2954比如 100,就是[0x64][0x00][0x00][0x00]
LWORD0~18,446,744,073,709,551,6158比如 100,就是[0x64][0x00][0x00][0x00][0x00][0x00][0x00][0x00]

提示

编写程序需要理解数据的本质。例如,int 数据类型下的数字 1065353216 的数据本质是“00 00 80 3F”,而 float 数据类型下的数字 1 的数据本质也是“00 00 80 3F”。然而,当面对数据“00 00 80 3F”时,我们无法确定其代表什么含义。可能会认为 1065353216 太大,显然不对,必然是 float 类型的 1。但这是主观的人为判断,程序并不知道。因此,在解析数据时,必须使用正确的数据类型进行解析,否则会产生乱码。换言之,对于数据来说,应当使用与其原本类型相同的类型进行解析。

关于数据排列问题

上述的数据表格里有例子,int 数据 100 的本质是 “64 00 00 00”,而从我们的人的感官来说,应该是 “00 00 00 64” 比较合理。大部分人的习惯是高位在前,低位在后。但这只是一种规定,数据存储可以有多种排列,大体上分为三种:

  • 小端排列:典型的代表是 C# 语言,三菱 PLC。
  • 大端排列:典型的代表是西门子 PLC。
  • 其他不规则:典型的代表是 modbus 设备。

neuron 支持多种字节顺序,如下表所示:

ENDIAN

字节顺序,适用于 int16/uint16/int32/uint32/float 数据类型,详细说明见下表。

符号字节顺序支持的数据类型备注
#B2,1int16/uint16
#L1,2int16/uint16默认字节顺序
#LL1,2,3,4int32/uint32/float默认字节顺序
#LB2,1,4,3int32/uint32/float
#BB3,4,1,2int32/uint32/float
#BL4,3,2,1int32/uint32/float

.LEN[H][L][D][E]

当数据类型为 STRING 类型时,.LEN 是必填项,表示字符串需要占用的字节长度,每个寄存器中包含HLDE 四种存储方式,如下列表格所示。

符号说明
H一个寄存器存储两个字节,高字节在前低字节在后。
L一个寄存器存储两个字节,低字节在前高字节在后。
D一个寄存器存储一个字节,且存储在低字节。
E一个寄存器存储一个字节,且存储在高字节。