【PROFINET通信秘籍】:基恩士扫码枪与西门子PLC的完美对接指南
发布时间: 2025-01-07 05:17:58 阅读量: 27 订阅数: 12
# 摘要
本文详细探讨了PROFINET通信技术基础,基恩士扫码枪的技术原理、接口和通讯协议,以及西门子PLC通信机制和基于TIA Portal的编程方法。文章重点阐述了扫码枪与PLC的对接实践,包括准备工作和实际操作流程,以及在对接过程中可能出现的常见问题和故障排除方法。此外,本文还提出了性能优化与维护建议,通过案例分析展示了这些技术在实际工业环境中的应用,并对未来技术发展趋势和行业标准进行了展望。本文旨在为工业自动化领域的工程师提供实践指导和理论支持,以提升生产效率和系统稳定性。
# 关键字
PROFINET通信;基恩士扫码枪;西门子PLC;TIA Portal编程;故障排除;性能优化
参考资源链接:[基恩士与西门子PLC Profinet通信指南:SR-5000/2000/1000系列连接教程](https://wenku.csdn.net/doc/7siqniz6sh?spm=1055.2635.3001.10343)
# 1. PROFINET通信基础
PROFINET是一种基于工业以太网的自动化网络通信技术,旨在实现工业自动化设备之间的高速数据交换。它的设计思想源自于对实时性、确定性和数据集成能力的强烈需求。在本章中,我们将探讨PROFINET的基本概念、网络架构及其实现方式。
## 1.1 PROFINET概述
PROFINET(Process Field Net)是一种用于工业自动化应用的网络技术,支持从传感器到管理层的整个工厂范围的数据通信。它主要由德国自动化工业协会PI(Profibus International)开发,并得到了众多工业自动化企业的支持。
## 1.2 PROFINET架构组件
PROFINET网络架构由以下关键组件构成:
- **PROFINET IO 设备**:包括各种传感器和执行器等现场设备。
- **PROFINET IO 控制器**:通常指PLC(可编程逻辑控制器),负责控制和管理网络中的IO设备。
- **PROFINET IO 监视器**:用于监控网络状态,收集生产数据。
- **交换机和路由器**:用于网络连接和数据流的路由。
## 1.3 PROFINET通信协议
PROFINET IO采用标准以太网硬件和TCP/IP协议栈。它能够提供实时数据交换(Isochronous Real Time,IRT),保证数据传输的确定性和同步性。此外,PROFINET还具备等时通信、分布式设备和自动化集成的功能。在接下来的章节中,我们将进一步探讨PROFINET与其他工业通讯设备如基恩士扫码枪以及西门子PLC的交互方式。
# 2. 基恩士扫码枪技术解析
## 2.1 基恩士扫码枪的工作原理
### 2.1.1 扫描技术与数据输出
基恩士扫码枪是利用光学原理识别条码的一种设备。它通过内置的光源照射条码,条码的条纹和空隙因反射率不同,被扫描器内部的光电转换器转换为电信号,通过放大、整形后,最终转换为计算机可以识别的数字信号。
条码扫描器的关键部件是解码电路,用于将电信号翻译成代表条码内容的数字代码。解码电路通常集成在扫描器的主控制电路板上。大多数基恩士扫码枪支持多种编码方式,包括但不限于UPC、EAN、Code 39、Code 128等。
当条码扫描器读取条码后,会将数据输出。输出格式可以是键盘仿真、串行通信或者USB等。用户可以根据实际应用的需要选择合适的输出格式。例如,键盘仿真适合于直接与计算机键盘接口相连,用于输入条码数据;串行通信适合于与各种工业控制器相连,用于自动化数据处理。
### 2.1.2 常见的扫码枪配置和设置
基恩士扫码枪的配置和设置通常在用户手册中都有详细的说明。配置包括选择扫描模式、设置解码选项、调整灵敏度等。设置可以手动操作,也可以通过计算机软件进行。
在设置过程中,可能会遇到需要调整的参数,例如:
- 解码类型:根据实际应用的条码类型进行选择。
- 输出格式:根据数据处理系统的接口要求进行选择。
- 阈值设置:调整触发灵敏度,以适应不同环境下的条码扫描。
为了优化扫码枪的性能,用户还可以调整激光的扫描速率、对焦精度等参数。一些高级的基恩士扫码枪还提供了图像处理功能,可以在扫描时校正条码的扭曲和损坏,进一步提高扫描准确性。
### 2.1.3 代码块及逻辑分析
以下是一个示例代码,展示如何使用基恩士扫码枪进行条码的扫描和数据输出:
```c
// 假设使用串行接口进行数据输出
#include <SoftwareSerial.h>
// 基恩士扫码枪默认串行通信参数
SoftwareSerial k扫一扫(10, 11); // RX, TX
void setup() {
// 打开串行通信接口
Serial.begin(9600);
// 打开与扫码枪的通信接口
k扫一扫.begin(9600);
}
void loop() {
// 判断扫码枪是否有数据发送过来
if (k扫一扫.available() > 0) {
// 读取扫码枪发送的数据
String barcode = k扫一扫.readString();
// 输出条码数据
Serial.println(barcode);
}
}
```
在这个代码段中,我们使用Arduino的`SoftwareSerial`库创建了一个软件串行端口`k扫一扫`,用于与基恩士扫码枪通信。使用`begin`函数初始化串行通信的波特率设置为9600,这也是基恩士扫码枪的默认波特率。在`loop`函数中,通过`available`函数检查是否有来自扫码枪的数据。如果有,就通过`readString`函数读取数据并输出到串行监视器。
### 2.1.4 表格:基恩士扫码枪扫描模式对比
| 扫描模式 | 描述 | 适用场景 |
| --- | --- | --- |
| 手动触发模式 | 用户按下扫描按钮时触发扫描 | 需要人工干预的场景 |
| 自动扫描模式 | 扫描器检测到条码时自动开始扫描 | 自动化生产线 |
| 连续扫描模式 | 扫描器持续扫描,无需用户干预 | 快速连续读取条码的场合 |
## 2.2 基恩士扫码枪的接口和通讯协议
### 2.2.1 接口类型与适用场景
基恩士扫码枪提供多种接口类型,以适应不同的应用需求。常见的接口类型包括键盘接口、RS-232串行接口、USB接口和以太网接口。
- 键盘接口:模拟键盘输入,适合传统计算机系统,不需要额外驱动。
- RS-232接口:常用于工业控制领域,便于远程通信和设备集成。
- USB接口:现代通用接口,具有即插即用特性,方便快速部署。
- 以太网接口:支持网络连接,适合分布式系统和远程数据管理。
每种接口类型都有其特定的适用场景。例如,在工业自动化场合,RS-232因其稳定性和可靠性被广泛使用。在个人电脑和笔记本上,USB接口由于其通用性和易用性而更受青睐。
### 2.2.2 数据传输协议的分析
基恩士扫码枪在与外部设备通信时,支持多种数据传输协议。数据格式可包括但不限于文本字符串、特定格式的数据包等。以串行通信为例,数据传输协议通常包括起始位、数据位、停止位和校验位等参数。
通常情况下,基恩士扫码枪的通信参数是可配置的,以匹配目标系统的参数。这样可以确保数据能够正确无误地传输到接收设备。为了方便用户操作,基恩士提供配套的软件工具,用户可以通过软件界面来配置这些参数。
### 2.2.3 代码块及逻辑分析
以下代码展示如何使用Arduino实现基恩士扫码枪的串行通信,并获取扫描到的条码数据:
```c
#include <SoftwareSerial.h>
// 定义数据接口
SoftwareSerial k扫一扫(10, 11); // RX, TX
// 初始化变量
String barcode;
int barcodeLength = 0;
void setup() {
// 开始串行通信
Serial.begin(9600);
k扫一扫.begin(9600);
}
void loop() {
// 检查是否从扫码枪接收到数据
if (k扫一扫.available()) {
// 读取数据直到遇到换行符
while (k扫一扫.available() && barcodeLength < 30) {
char inChar = k扫一扫.read();
// 将读取的数据追加到字符串中
barcode += inChar;
barcodeLength++;
}
// 处理条码数据
if (barcodeLength > 0) {
// 输出条码信息
Serial.println("Scanned: " + barcode);
// 重置条码字符串变量
barcode = "";
barcodeLength = 0;
}
}
}
```
在上述代码中,我们首先包含了`SoftwareSerial`库以支持额外的串行接口。通过`SoftwareSerial`对象`k扫一扫`来与基恩士扫码枪进行通信。在`loop`函数中,我们不断检查串行缓冲区是否有数据,并逐个字符地读取数据,直到遇到换行符为止。这样可以确保读取到的是一整条完整的条码数据。读取完成后,将条码数据输出并通过`println`函数打印出来,并重置条码字符串变量以便下一次扫描。
### 2.2.4 mermaid格式流程图:基恩士扫码枪数据处理流程
```mermaid
graph LR
A[开始扫描] --> B[条码数据采集]
B --> C[数据预处理]
C --> D[数据格式化]
D --> E[数据传输]
E --> F[数据接收]
F --> G[数据解析]
G --> H[数据应用]
```
该流程图展示了基恩士扫码枪从扫描到数据应用的完整过程。在数据传输阶段,根据扫码枪和接收设备之间的通信协议,数据会被发送出去。在接收设备端,数据被进一步处理和解析,最终应用到具体的应用场景中。
# 3. 西门子PLC通信机制
### 3.1 西门子PLC的PROFINET配置
#### 3.1.1 硬件配置与网络拓扑设计
在进行西门子PLC的PROFINET配置时,首先需要关注硬件配置。这涉及到选择合适的CPU模块、通信模块、以及相关的I/O模块。例如,对于一个典型的PROFINET网络,至少需要一个CPU模块支持PROFINET接口,并至少配置一个通信模块。
在硬件选型完成后,下一步是设计网络拓扑结构。PROFINET网络通常可以构建为线性拓扑、星型拓扑或环形拓扑。线性拓扑适合简单的应用,星型拓扑则适用于更复杂的应用场景,而环形拓扑则提供了网络的冗余性,适用于需要高可靠性的环境。
```mermaid
graph LR
A[PROFINET网络] -->|线性| B[线性拓扑]
A -->|星型| C[星型拓扑]
A -->|环形| D[环形拓扑]
B -->|适合简单应用| E[简单控制网络]
C -->|复杂应用| F[复杂控制网络]
D -->|高可靠性| G[高可靠性网络]
```
#### 3.1.2 软件配置与通信参数设置
在硬件安装完毕之后,就需要通过西门子的TIA Portal软件进行软件配置。在TIA Portal中,首先需要创建一个新项目,并将你的硬件设备拖入到项目中,按照实际的硬件布局进行配置。然后,设置PROFINET设备的IP地址和子网掩码。每个PROFINET设备在网络中必须有唯一的IP地址,这通常是在设备的设备网络配置中进行设置。
```plaintext
设备 > 设备和网络 > 新建 > 网络配置 > 设备IP设置...
```
在通信参数设置方面,通常需要考虑设备的优先级、数据速率和通信协议等参数。这些参数应当根据实际的网络负载和实时性要求进行设置,以达到最佳的网络性能。
### 3.2 西门子PLC的编程与通信
#### 3.2.1 基于TIA Portal的编程
使用TIA Portal进行西门子PLC的编程是目前最新的趋势。TIA Portal提供了一个集成的工程框架,允许工程师进行从硬件配置到程序编写的一体化工作。在编程过程中,工程师可以使用梯形图、功能块图或语句列表等多种编程语言。
编程时的基本步骤包括创建项目、配置PLC设备、编写程序逻辑、进行程序编译和下载到PLC。特别地,当涉及到通信时,需要通过编写数据块(DB)来实现数据的交换。例如,使用GET和PUT指令在PLC内部与PROFINET设备之间进行数据读写。
```plaintext
源DB > 编写数据块 > 使用GET和PUT指令 > 目标设备
```
#### 3.2.2 数据交换与通信模块的实现
数据交换与通信模块的实现是保证PLC与外部设备(如扫码枪)间数据流动的关键。在TIA Portal中,可以使用“通信”块或“通信模块”来实现PROFINET通信。配置完成后,需要进行数据块的详细编程,确保数据可以正确地从一个设备传输到另一个设备。
在数据块中,你需要定义输入和输出变量,并为每个变量指定地址。当其他设备需要读取或写入数据到这些变量时,通过网络进行通信,实现数据交换。编程时,可以使用间接寻址的方式来动态读写数据,这在处理不同设备间的通信时非常有用。
```plaintext
通信模块 > 配置地址 > 编写数据块 > 间接寻址 > 动态数据交换
```
```plaintext
// 示例代码段
// 假设有一个输入数据块 DB1 和输出数据块 DB2
// 编写数据块示例
DATA_BLOCK DB1
BEGIN
Var1 : INT := 0;
Var2 : REAL := 0.0;
END_DATA_BLOCK
DATA_BLOCK DB2
BEGIN
Var3 : BOOL := FALSE;
Var4 : STRING[10] := '';
END_DATA_BLOCK
// 使用间接寻址在程序中动态读写数据
VAR
间接地址 : INT := 10; // 假设是DB1中的Var1的地址
数据值 : INT;
END_VAR
DATA_BLOCK DB1
// 通过间接地址读取数据
数据值 := IDB[间接地址];
// 修改数据值
IDB[间接地址] := 数据值 + 1;
END_DATA_BLOCK
```
通过上述步骤,西门子PLC能够实现与外部设备的稳定通信,确保数据的准确交换。这为实现复杂的自动化控制提供了基础。
# 4. 扫码枪与PLC的对接实践
## 4.1 对接前的准备工作
### 4.1.1 环境搭建和设备检查
在开始扫码枪与PLC的对接工作之前,必须确保环境搭建得当。首先,需要检查PC系统是否安装了对应的驱动软件和开发环境。其次,验证PLC和扫码枪是否符合工作电压和温度要求,并检查所有设备的物理连接是否完好。对于网络环境,确保PLC和PC在同一局域网内,并且网络通讯没有阻碍。此外,需要确保使用的通讯协议与PLC和扫码枪的支持列表相匹配。准备工作还包括确认设备的固件或软件版本,确保它们是最新的,或者至少兼容即将进行的操作。
### 4.1.2 软件版本与兼容性分析
软件版本的兼容性是扫码枪与PLC对接能否成功的关键。首先,要查看基恩士扫码枪的固件版本,确保它支持所需的通信协议,并能够与PLC兼容。其次,检查西门子PLC的软件版本,特别是TIA Portal的版本,确保其能够支持将要使用的PROFINET配置。如果有必要,可通过官方渠道下载并安装最新的固件或软件更新。在某些情况下,可能需要进行特定的软件设置才能激活所需的通讯功能。做好软件版本和兼容性的前期分析,可以避免在对接过程中出现不必要的问题,从而保证整个对接流程的顺利进行。
## 4.2 实际操作流程
### 4.2.1 扫码枪与PLC的物理连接
物理连接是扫码枪与PLC对接的第一步。首先,确认扫码枪和PLC支持的物理接口类型,并选择合适的通讯线缆。对于基恩士扫码枪,常见的接口类型包括RS-232、RS-485、USB或者以太网接口。对于西门子PLC,根据其型号,可能支持的接口为ProfiBus、PROFINET等。连接时,确保所有的接线都是正确和牢固的。为避免信号干扰,应使用屏蔽线缆。完成物理连接后,可通过简单的测试来验证通讯是否正常。
### 4.2.2 数据交换与处理逻辑
数据交换是扫码枪与PLC对接的核心环节。在这一过程中,扫码枪获取的数据将通过预定义的接口和协议发送给PLC。PLC接收到数据后,根据其内部程序逻辑进行处理。数据处理逻辑可能涉及数据格式的转换、数据的过滤和校验,以及数据的存储或输出控制等。编写PLC程序时,应确保数据交换模块与PLC的其他模块能够良好地协同工作。通常,数据处理逻辑的实现是基于事件或中断驱动的,这意味着PLC需要设计相应的触发机制来处理扫码枪发送的数据。数据处理完成后,PLC可以输出相应的控制信号到执行机构,或者将处理结果记录到数据库中。下面将通过示例代码,展示数据交换和处理逻辑的实现细节。
```plc
// 示例代码:西门子PLC通过PROFINET接收基恩士扫码枪的数据并处理
// 假设使用TIA Portal进行编程
// 创建一个数据块DB1用于存储扫码枪传输的数据
// 数据块结构可能包含以下字段:
// - RawData: 字符串类型,用于存储原始数据
// - ValidData: 布尔类型,指示数据是否有效
ORGANIZATION_BLOCK OB1 // 主程序块
VAR
ReceivedData: STRING; // PLC接收到的数据
i: INT; // 循环变量
END_VAR
IF DB1.ValidData THEN // 如果数据有效
FOR i := 1 TO LEN(DB1.RawData) DO
// 数据处理逻辑,例如解析和验证数据
// ...
END_FOR;
DB1.ValidData := FALSE; // 准备接收下一批数据
END_IF;
// 程序逻辑用于数据处理
// ...
// 假设从PROFINET接口接收数据的逻辑如下
// 这部分通常由TIA Portal自动生成,具体细节依赖于项目配置
```
在上述示例中,PLC通过PROFINET接口接收扫码枪传输的数据,并将其存储在数据块DB1中。PLC程序通过检查`DB1.ValidData`标志位来判断数据是否有效。如果有效,PLC程序将执行相应的数据处理逻辑。处理结束后,PLC会将`ValidData`标志位设置为FALSE,为接收下一批数据做准备。通过这种方式,扫码枪与PLC之间的数据交换和处理逻辑得以实现。
以上章节详细介绍了扫码枪与PLC对接实践中的准备工作和实际操作流程。通过本章节的介绍,我们可以看到,在实际操作中,每一步都需要细致入微的操作和精确的逻辑设计,确保通讯的准确性和数据处理的可靠性。这不仅涉及硬件的物理连接,更涉及到软件编程中的数据处理逻辑,这些都是保证整个工业自动化系统稳定运行的基础。
# 5. 故障排除与优化策略
## 5.1 常见问题诊断与解决
### 5.1.1 通信故障的排查步骤
在工业自动化系统中,通信故障是导致系统停机的主要因素之一。为了能够快速定位和解决问题,制定一套系统性的排查步骤是至关重要的。以下是诊断通信故障的一般步骤:
1. **检查物理连接**:首先要检查的是扫码枪与PLC之间的物理连接是否正确无误,包括接口类型匹配和电缆连接情况。确定没有松动或损坏的电缆和连接器。
2. **电源和指示灯状态**:确认设备电源供应正常,以及设备上的状态指示灯是否显示正确。指示灯通常可以提供设备工作状态的初步信息。
3. **软件配置检查**:检查软件中的通信配置是否与实际网络设置相匹配,包括IP地址、端口号、设备地址等参数。
4. **诊断工具的使用**:使用系统提供的诊断工具或第三方工具来检查网络流量和通信状态。例如,使用西门子PLC的诊断软件可以查看PROFINET通信模块的状态。
5. **逐步排查网络**:逐步缩小排查范围,从物理层到应用层逐一检查可能的问题点。通过逐层诊断,可以更精确地定位问题。
6. **查看日志文件**:查看PLC和扫码枪的日志文件,往往能够发现错误代码或者异常事件,根据日志提示进一步分析。
7. **复位设备**:在安全的前提下,尝试重启扫码枪和PLC,这有时可以解决由暂时性错误引起的通信问题。
8. **升级固件和软件**:确认所有硬件设备上的固件和软件都是最新的,旧版本可能存在已知的兼容性问题或漏洞。
### 5.1.2 系统稳定性的提升技巧
提升系统稳定性是避免生产损失和确保生产效率的关键。以下是一些提高系统稳定性的技巧:
1. **使用冗余设计**:通过采用冗余的硬件配置和网络设计,可以确保当一个组件或路径失败时,系统仍能继续工作。
2. **定期备份配置**:定期备份PLC和扫码枪的配置文件,以便在出现故障时能够快速恢复到一个已知的良好状态。
3. **实施定期监控**:使用自动化工具对通信网络进行实时监控,可以及早发现并解决潜在的通信问题。
4. **强化安全措施**:通过加强网络安全和访问控制,防止未授权访问导致的系统故障或安全漏洞。
5. **优化设备布局**:合理布局设备可以减少信号干扰和电缆故障的可能性。
6. **实施预防性维护**:定期对设备进行检查和维护,可以预防一些由于设备老化引起的故障。
## 5.2 性能优化与维护建议
### 5.2.1 通信参数的调优方法
通信参数的正确配置对于系统性能有着直接的影响。以下是一些调优通信参数的策略:
1. **调整缓冲区大小**:合理设置数据传输时的缓冲区大小,可以有效减少数据丢失和重传次数。
2. **优化帧大小**:适当增加或减少帧大小可以提高数据传输效率,但需注意避免过大导致的数据包分片。
3. **时间参数调整**:调整超时和重试次数等时间参数,可避免网络短暂中断导致的通信失败。
4. **心跳间隔设置**:配置适当的心跳间隔,可以保证通信线路的实时性和活跃性。
5. **流量控制**:在数据交换量大的情况下,实施流量控制策略可以避免网络拥塞。
### 5.2.2 定期维护与升级的策略
定期维护和升级是保障系统长期稳定运行的必要手段。以下是一些维护和升级策略:
1. **制定维护计划**:按照系统的重要性制定合适的维护计划,可以包括周检查、月检查和年检查。
2. **遵循制造商建议**:依照制造商的维护手册和建议执行操作,可以确保系统按照预期运行。
3. **升级策略**:对于硬件升级,需要考虑系统的兼容性以及成本效益。对于软件更新,应考虑新版本的特性和潜在的稳定性问题。
4. **培训操作人员**:定期培训操作人员,确保他们了解最新的操作方法和故障排除技巧。
5. **创建维护记录**:详细记录每次维护和升级的细节,包括更改、问题和解决办法,这将为未来的故障排除和优化提供宝贵信息。
通过细致的故障排除和持续的性能优化,可以确保自动化系统稳定可靠的运行。在下一章,我们将通过具体的案例分析来进一步探讨这些理论如何应用于实践,并展望PROFINET技术的未来发展。
# 6. 案例分析与未来展望
## 6.1 典型应用案例
在本节中,我们将深入探讨PROFINET技术在工业自动化领域中的实际应用案例,并展示一些成功实施的项目,以便读者更好地理解其实际应用。
### 6.1.1 行业应用分析
PROFINET作为一种工业以太网技术,被广泛应用于各个行业,尤其是在制造业和流程工业中,它提供了一种灵活、可靠的通信方式。以下是一些行业的典型应用:
- **汽车制造**:在汽车制造业中,机器人和自动化设备需要实时地交换大量的数据,以保证装配线的同步运行。使用PROFINET,可以确保整个生产线的数据实时性和高效性。
- **食品加工**:食品加工行业对温度、湿度等环境参数的监测要求非常严格。通过将传感器和控制器通过PROFINET相连,可以实现对这些参数的实时监控。
- **包装行业**:在包装行业,PROFINET可用于对包装机械进行集中控制,从而提高生产效率和灵活性。
### 6.1.2 成功案例展示
让我们通过以下成功案例展示PROFINET技术的应用:
**案例一:自动化仓库系统**
在一个现代化的自动化仓库中,使用了PROFINET技术来控制货位机器人。通过这种实时通信系统,仓库管理系统能高效地调度货位,实现货物的存取,并减少了等待时间。系统中,西门子PLC作为控制中心,通过PROFINET与基恩士扫码枪和其他自动化设备相连,实现了无缝的仓储管理。
**案例二:制药过程控制**
在制药行业中,环境的严格控制和配方的精确配比是至关重要的。制药公司利用PROFINET网络连接所有的生产装备,如混合器、填充机等,并通过实时数据交换确保整个生产过程的质量控制和合规性。
## 6.2 PROFINET技术的未来发展
### 6.2.1 趋势预测与技术革新
随着工业4.0和智能制造的推进,PROFINET技术也在不断地发展和改进。未来的趋势可能包括:
- **更高传输速率**:以满足更大数据量和实时性要求。
- **增强安全性**:工业通信系统的安全性将不断强化,以防止数据泄露和恶意攻击。
- **开放性和互操作性**:与更多行业的标准和平台集成,实现更广泛的互操作性。
### 6.2.2 行业标准与市场机遇
PROFINET作为一种开放的技术标准,具有很大的市场潜力和应用前景。标准化的接口和协议将促进不同制造商的设备之间的无缝集成,从而为整个工业自动化市场带来新的机遇。
- **跨行业应用**:随着技术的成熟,PROFINET将被应用到更多新的行业领域。
- **教育和培训**:随着对这一技术的需求增加,相关的教育和培训服务也会越来越多,为IT和自动化工程师提供专业的学习资源。
通过这些案例和未来趋势的分析,我们可以看到PROFINET技术在自动化行业中的重要性和不断增长的潜力。随着技术的演进,它将继续推动工业自动化的发展,为企业创造更多的价值。
0
0