购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 基础数据类型说明

2.1.1 常用数据类型

众所周知,计算机底层以二进制形式存储数据。然而,在实际的上位机应用中,与PLC等设备通信通常以字节数组形式进行报文传输。而最终显示的数据通常是布尔型、整型、浮点型或字符串等各种数据类型的数据。因此,需要进行字节数组与各种数据类型之间的相互转换,这也是上位机通信数据解析的核心。

我们在讲解各种数据类型的数据相互转换之前,首先要了解一下我们常用的数据类型具体有哪些?这里我们以字节为单位,列举了上位机开发中常用的11种数据类型,如表2-1所示。

表2-1 11种常用的数据类型

以上这些数据类型,在不同的PLC中,可能会使用不同的名称,如西门子PLC中的int对应C#中的short,西门子PLC中的dint对应C#中的int。因此,这个具体要看实际占用的长度和数据范围。C#中的数据类型与西门子PLC数据类型之间的对应关系如表2-2所示。

表2-2 C#中的数据类型与西门子PLC数据类型之间的对应关系

2.1.2 大小端字节顺序

当了解各种数据类型后,我们来探讨一个重要概念—大小端。学过计算机编程或者做过PLC编程的人都应该知道,数据存储是有字节顺序之分的,但是很多人对大小端的概念还是比较模糊。

这是因为在计算机中,对于内存地址的描述很少会使用“大”和“小”这样的词,而是通常使用“高”和“低”来描述。将“大小端”理解为“高低字节顺序”,可能有助于更好地理解这一概念。

大小端的本质是指字节的存储顺序。简单来说,字节顺序是指多字节数据类型数据在内存中的存储顺序。通常有两种字节顺序:大端字节序和小端字节序。在PLC通信和网络通信中,字节顺序通常是固定的,可能与硬件或协议有关,但无论如何,它始终是确定的—要么是大端字节序,要么是小端字节序,并不会混合使用。

大端字节序和小端字节序的区别如下所述。

(1)大端字节序(Big-Endian),也称大端模式或网络字节序。在大端模式中,数据的高位字节存储在低位地址内,而低位字节存储在高位地址内。举个例子,对于数值0x12345678,按照大端模式存储,字节顺序为高位字节0x12存储在低位地址内、低位字节0x78存储在高位地址内,具体如图2-1所示。

(2)小端字节序(Little-Endian),也称小端模式或主机序。在小端模式中,数据的高位字节存储在高位地址内,低位字节存储在低位地址内。继续以0x12345678为例,按照小端模式存储,字节顺序为高位字节0x78存储在低位地址内、低位字节0x12存储在高位地址内,具体如图2-2所示。

大端模式和小端模式在计算机系统中各有其适用的场景,并没有明确的优劣之分。大端模式将高位字节存放在低位地址内,符合人类正常阅读习惯,而小端模式将低位字节存放在高位地址内,更有利于计算机处理数据。

图2-1 大端模式数据存储顺序

图2-2 小端模式数据存储顺序

2.1.3 为什么会存在大小端

当弄清楚大小端的区别之后,接下来思考另一个问题,即为什么存在大小端?

对于早期的计算机系统,处理器通常会从低位字节开始处理数据,因此大多数计算机内部采用小端模式,将低位字节存储在低位地址内。随着计算机处理器的进步,先处理高位还是低位字节对性能影响已经可以忽略不计,但为了向后兼容,计算机系统依然保留了大小端模式的选择。

大小端模式各有优势,小端模式强制转换类型时不需要调整字节内容,直接截取低位字节即可;大端模式由于符号位为第一个字节,很方便判断正负。

因为不同的计算机系统存储数据的方式是不一样的,比如常用的x86就是小端模式,而KEIL C51则是大端模式,很多ARM、DSP都是小端模式,不同品牌的PLC的大小端模式都是不一样的,有些ARM处理器还可以由硬件选择大端模式还是小端模式,这样就会导致,对于一个int类型的数据,它是占用4个字节的,但是其在不同系统中的存储顺序是不一样的。

同时,思考一下另外一个问题,即为什么上位机开发需要考虑大小端?

因为上位机跟PLC等硬件通信的时候,PLC本身就有一个大小端模式,而读取出来的是字节数组,必须按照PLC的大小端模式解析数据,这样才能得到想要的数据。例如,西门子PLC一般采用大端模式,那么我们解析数据的时候就要按照大端模式去解析;如果按照小端模式去解析,那么得到的结果肯定就是不正确的。

在实际应用中,还有可能出现大端反转、小端反转的情况,所以在大端模式和小端模式的基础上加了一层扩展,最终形成4种不同的字节顺序,这里采用枚举类型表示,代码如下所示。

总而言之,计算机在处理数据时会按顺序读取字节,而不考虑数据的大小端模式。程序在读取到数据后,需要根据第一个字节的位置来确定计算机的大小端模式,并据此决定是否需要进行转换。

如果读取到的第一个字节是高位字节,则表示计算机采用大端模式;反之,如果读取到的第一个字节是低位字节,则表示计算机采用小端模式。

大小端模式只是一种规定数据存储的字节顺序方式。在与不同硬件进行通信时,程序需要根据对方的大小端模式对数据进行正确的解析和处理。不同类型的硬件在设计时已经确定了其大小端模式,这种设定在硬件生命周期内不会改变。 /GcBWTI1h9+wTGM06GODjGZKR0cVcISIPcPrhvbRO4IQ8LMXQuwSWy+XwIyDM6cA

点击中间区域
呼出菜单
上一章
目录
下一章
×