揭秘三菱PLC MODBUS TCP通讯:从理论到实践的全面指南
发布时间: 2024-12-01 12:27:51 阅读量: 72 订阅数: 48
【java】ssm+jsp+mysql+LD算法在线考试系统.zip
![三菱PLC MODBUS TCP通讯](https://www.electroallweb.com/wp-content/uploads/2020/03/COMO-ESTABLECER-COMUNICACI%C3%93N-ARDUINO-CON-PLC-1024x575.png)
参考资源链接:[三菱Q系列PLC MODBUS TCP通讯配置指南](https://wenku.csdn.net/doc/38xacpyrs6?spm=1055.2635.3001.10343)
# 1. MODBUS TCP通讯协议概述
MODBUS TCP通讯协议是工业自动化领域中广泛应用的一种标准通讯协议,它基于TCP/IP网络,为不同厂商的设备提供了高效、稳定的数据交换能力。MODBUS TCP保留了原有的MODBUS RTU协议的许多特性,如功能码的定义,数据格式等,同时利用TCP/IP协议的优势,实现了跨平台的通讯解决方案。
在MODBUS TCP协议中,所有的通讯都是基于客户端-服务器模型进行的,客户端发送请求到服务器,服务器处理请求后返回响应。这种结构使得MODBUS TCP非常适合用于复杂的工业环境,其中可能需要从多个控制设备获取数据或向它们发送指令。
了解MODBUS TCP协议的结构和工作原理对于实现有效的工业通讯至关重要。接下来的章节,我们将深入探讨MODBUS TCP在三菱PLC应用的具体细节,包括网络配置、通讯参数设置以及实际应用案例。通过这些内容,读者将能够掌握如何在三菱PLC中有效地部署和优化MODBUS TCP通讯协议。
# 2. 三菱PLC的基础与配置
## 2.1 三菱PLC硬件概述
在本章中,我们将详细介绍三菱PLC的硬件基础。三菱PLC作为工业自动化领域的重要组件,其硬件性能直接影响整个系统的稳定性和可靠性。本节将从型号选择到性能分析,全面介绍三菱PLC硬件。
### 2.1.1 PLC型号与性能概览
三菱PLC有多个型号,覆盖从小型到大型项目的需求。其中FX系列针对小型应用,Q系列则适合中大型系统。不同型号的PLC具有不同的I/O容量、处理速度和扩展性。比如,FX5U PLC不仅拥有强大的处理能力和丰富的指令集,而且支持高速计数器和定位功能,适用于复杂的控制任务。
当设计一个自动化控制系统时,选择适合的PLC型号至关重要。以下为PLC型号的选择和性能参数对比表格:
| PLC型号 | 应用场景 | I/O容量 | 处理速度 | 扩展性 | 特殊功能 |
|---------|---------|---------|---------|-------|---------|
| FX3U | 小型系统 | 16-128 | 中等 | 中等 | 计数、定位 |
| Q02HCPU | 中型系统 | 32-256 | 高 | 高 | 高速计数 |
| Q170系列 | 大型系统 | 128-1024 | 高 | 高 | 网络通讯、冗余系统 |
### 2.1.2 PLC硬件的安装与设置
安装PLC硬件是整个控制系统部署的基础。正确的安装可以保证设备长期稳定运行。首先,PLC应该放置在干燥、通风、无震动和无腐蚀性气体的环境中。在安装前,应该检查PLC设备是否完好无损,并确保与系统兼容。
PLC的设置包括电源接线、输入输出端口配置和外围设备连接等步骤。以FX3U型号为例,其电源线和地线接在X1的端口,而输入输出端口则根据实际应用连接相应的输入输出模块。此外,还要注意安装防雷保护设备和过载保护设备,以避免由于外部环境造成设备损害。
安装完毕后,应该按照PLC的说明书进行配置,确保其参数设置符合实际应用需求。
## 2.2 三菱PLC网络配置
网络配置是实现PLC与其他系统通信的关键步骤。本节将详细介绍网络参数的设置、以太网模块的配置以及MODBUS TCP通讯参数配置。
### 2.2.1 网络参数的设置与调整
在网络参数设置中,IP地址、子网掩码和网关是必须配置的参数。这些参数决定了PLC在以太网中的位置,确保PLC能与局域网中的其他设备进行通讯。
例如,在GX Works2编程软件中,可以通过网络配置菜单进入网络设置界面,输入正确的IP地址和子网掩码,然后测试网络连接状态,确认设置无误。
```plaintext
IP地址: 192.168.1.100
子网掩码: 255.255.255.0
网关: 192.168.1.1
```
### 2.2.2 以太网模块的配置
以太网模块是PLC进行网络通讯的核心部件。在配置以太网模块之前,应确保模块与PLC型号兼容。配置过程中需要设定模块的通讯速度和模式,如10/100 Mbps自适应或固定速率模式。
下面是一个示例代码,用于通过编程软件设置以太网模块参数:
```plaintext
// 设置通讯端口号为1
SETUP�_10001:
// 通讯端口号1的设置
// IP地址: 192.168.1.200
D100 K192.168.1.200
// 子网掩码: 255.255.255.0
D101 K255.255.255.0
// 网关: 192.168.1.1
D102 K192.168.1.1
// 通讯速度: 10/100 Mbps自适应
D103 K1
// 通讯模式: TCP/IP
D104 K0
// 端口1的设置结束
RET
```
### 2.2.3 MODBUS TCP通讯参数配置
MODBUS TCP是一种广泛采用的工业通讯协议,通过以太网实现设备间的数据交换。在PLC中配置MODBUS TCP通讯参数,首先需要为其分配一个TCP/IP通讯端口,然后设置通讯速率、数据位、停止位和校验方式。
下面是一个配置MODBUS TCP通讯参数的示例代码块,用于定义MODBUS TCP通讯的基本参数:
```plaintext
// MODBUS TCP通讯端口配置
D200: MODBUS TCP端口号(例如:502)
D201: 通讯速率(例如:100)
D202: 数据位(例如:8)
D203: 停止位(例如:1)
D204: 校验方式(例如:无校验)
```
## 2.3 三菱PLC的软件与编程环境
编程软件是PLC实现逻辑控制的核心工具。本节将介绍三菱PLC的编程软件安装与配置,以及编程界面与基础。
### 2.3.1 编程软件的安装与配置
GX Works2和GX Developer是三菱电机推出的两款主流编程软件。GX Works2支持最新PLC系列,用户界面更为友好,功能也更加强大。
软件安装过程中,应确保系统满足软件运行的最低要求。安装完毕后,需要进行软件配置,如指定PLC型号、设置通讯参数等,这样才能与PLC进行有效通讯。
### 2.3.2 编程界面与编程基础
编程界面是编写和调试PLC程序的主要场所。GX Works2提供了一个直观的操作界面,包括项目管理器、梯形图编辑器、指令列表编辑器等。界面右侧还有实时监视和调试功能,可以实时查看PLC运行状态和输出结果。
在编程基础方面,指令系统和梯形图是PLC编程的核心。以下是一个简单的梯形图编程示例:
```plaintext
// 梯形图程序示例:一个简单的启动/停止电路
|---[ 开关S1 ]---[ 常闭S2 ]---( 输出Q1 )---|
```
此例中,当开关S1闭合且S2处于常闭状态时,输出Q1会被激活。
通过上述章节内容的学习,我们对三菱PLC的基础有了全面的了解,包括硬件、网络配置以及软件环境。在下章中,我们将详细探讨MODBUS TCP通讯协议在三菱PLC中的应用。
# 3. MODBUS TCP在三菱PLC中的应用
## 3.1 MODBUS TCP通讯的实现机制
### 3.1.1 数据包格式与功能码解析
MODBUS TCP协议中,数据以消息的形式进行传输,这些消息被封装在TCP数据包中。一个MODBUS TCP消息通常包含设备地址、功能码、数据以及错误检测信息(如循环冗余校验,CRC)。功能码用于指示从站应执行的操作类型,常见的功能码包括读取保持寄存器、读取输入寄存器、写单个寄存器、写多个寄存器等。
下面是MODBUS TCP数据包的一般结构:
1. **设备地址(Unit Identifier)**:标识Modbus从站设备。
2. **功能码(Function Code)**:表示请求或响应的类型。
3. **数据(Data Field)**:执行功能码指定操作需要的数据。
4. **错误检测码(Error Check)**:通常使用CRC校验,确保数据的完整性。
在三菱PLC中实现MODBUS TCP通讯时,需要确保数据包的正确构造和解析,以保证控制命令或数据能够准确无误地在PLC和上位机间传输。
### 3.1.2 建立MODBUS TCP连接
MODBUS TCP通讯协议基于TCP/IP协议,因此建立MODBUS TCP连接首先需要在三菱PLC上配置好网络参数。以下是建立连接的简要步骤:
1. **设置IP地址**:为PLC指定一个IP地址,并设置子网掩码和网关。
2. **配置端口号**:MODBUS TCP通常使用默认端口502。
3. **启用MODBUS功能**:在PLC的通讯设置中启用MODBUS TCP服务器功能。
4. **建立连接**:从上位机通过网络发送MODBUS TCP连接请求到PLC的IP地址和端口。
一旦连接建立,上位机便可以通过构造MODBUS功能码来读写PLC内部的数据,例如寄存器或线圈状态。以下是一个简单的MODBUS TCP连接建立的代码示例:
```python
import socket
import struct
# PLC的IP地址和端口
plc_ip = '192.168.0.100'
plc_port = 502
# 创建TCP/IP连接
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((plc_ip, plc_port))
# MODBUS TCP请求的数据包
transaction_id = 0x0000 # 事务标识符
protocol_id = 0x0000 # 协议标识符
length = 0x0006 # PDU长度(不包括事务标识符和协议标识符)
unit_identifier = 0x01 # 单元标识符
function_code = 0x03 # 功能码 3 - 读保持寄存器
start_address = 0x0000 # 寄存器起始地址
quantity_of_registers = 0x0001 # 寄存器数量
# 构造请求数据包
request = struct.pack(">HHHB", transaction_id, protocol_id, length, unit_identifier) + \
struct.pack("BBH", function_code, start_address >> 8, start_address & 0xFF) + \
struct.pack("BBH", quantity_of_registers >> 8, quantity_of_registers & 0xFF, 0x0000)
# 发送请求
client_socket.send(request)
# 接收响应数据包
response = client_socket.recv(256)
# 关闭连接
client_socket.close()
# 解析响应数据包
response_transaction_id = struct.unpack(">H", response[0:2])[0]
response_unit_identifier = struct.unpack("B", response[2:3])[0]
response_protocol_id = struct.unpack(">H", response[4:6])[0]
response_length = struct.unpack("B", response[6:7])[0]
response_function_code = struct.unpack("B", response[7:8])[0]
response_data = response[8:response_length-1]
```
解析函数码为0x03的响应时,注意检查响应数据包的单位标识符、功能码和CRC校验值,确保数据的有效性和一致性。
## 3.2 读写操作的实现与实践
### 3.2.1 读取操作的实施
在三菱PLC中实施MODBUS TCP读取操作,要求从上位机向PLC发送一个读取请求,并处理返回的数据包。执行读取操作时,我们通常关注PLC内部的寄存器或线圈的状态。
以下是执行读取操作的步骤:
1. **构造读取请求**:根据需要读取的数据类型,选择合适的MODBUS功能码,并构造相应格式的请求数据包。
2. **发送请求**:通过已建立的TCP连接将请求数据包发送给PLC。
3. **接收响应**:等待并接收PLC返回的数据包。
4. **解析响应**:根据MODBUS协议解析返回的数据包,提取所需的数据信息。
示例代码(读取保持寄存器):
```python
# 假设函数代码为0x03,代表读取保持寄存器
function_code = 0x03
start_address = 0x0001 # 寄存器起始地址
quantity_of_registers = 0x0002 # 读取寄存器数量
# 构造读取保持寄存器的请求数据包
request = struct.pack(">BBH", function_code, start_address >> 8, start_address & 0xFF) + \
struct.pack("BBH", quantity_of_registers >> 8, quantity_of_registers & 0xFF, 0x0000)
# 发送请求并接收响应
# ...(同上代码中的发送接收过程)
```
### 3.2.2 写入操作的实施
与读取操作类似,写入操作也需要通过构造特定格式的数据包来执行。不同之处在于,写入操作会修改PLC内部的数据。
以下是执行写入操作的步骤:
1. **构造写入请求**:使用适当的MODBUS功能码,并根据要写入的数据构造数据包。
2. **发送请求**:通过TCP连接发送写入请求。
3. **接收响应**:接收PLC的响应,确认写入是否成功。
示例代码(写入单个保持寄存器):
```python
# 假设函数代码为0x06,代表写入单个保持寄存器
function_code = 0x06
register_address = 0x0001 # 要写入的寄存器地址
register_value = 0x000A # 要写入的值
# 构造写入保持寄存器的请求数据包
request = struct.pack(">BBH", function_code, register_address >> 8, register_address & 0xFF) + \
struct.pack("H", register_value)
# 发送请求并接收响应
# ...(同上代码中的发送接收过程)
```
## 3.3 错误处理与通讯优化
### 3.3.1 通讯故障的诊断与处理
在实施MODBUS TCP通讯时,不可避免地会遇到通讯故障。故障诊断与处理对于保障系统的稳定运行至关重要。故障可能包括但不限于连接失败、超时、数据包损坏和CRC校验错误等。
### 3.3.2 通讯效率的优化策略
通讯效率是衡量PLC与上位机通讯性能的关键指标。在保证通讯正确性的前提下,优化策略包括减少通讯请求的次数、优化数据包大小、合理安排数据包的发送顺序等。此外,还可以通过实施通讯协议栈的参数调优,比如缓冲区大小、超时设置等来进一步提高通讯效率。下面是一个简单的表格,展示了不同参数和优化策略之间的关系。
| 参数 | 描述 | 优化方法 |
|---------------------|---------------------------------------------------|----------------------------------------------|
| 数据包大小 | 影响通讯的数据吞吐量 | 减少单次请求的数据量,增加请求频率 |
| 缓冲区大小 | 决定缓冲能力,影响性能和稳定性 | 适当增加缓冲区大小,避免溢出 |
| 超时设置 | 决定等待响应的时间长度 | 根据通讯状况合理调整,避免频繁重传 |
| 通讯频率 | 决定单位时间内的通讯次数 | 根据应用需求合理安排请求,避免网络拥塞 |
### 3.3.3 错误处理与通讯优化的代码示例
```python
def handle_modbus_error(response):
transaction_id = struct.unpack(">H", response[0:2])[0]
unit_identifier = struct.unpack("B", response[2:3])[0]
function_code = struct.unpack("B", response[7:8])[0]
error_code = struct.unpack("B", response[8:9])[0]
# 根据错误代码处理异常情况
error_messages = {
0x01: "非法功能码",
0x02: "非法数据地址",
0x03: "非法数据值",
# ...其他错误代码
}
if error_code in error_messages:
print(f"错误代码: {error_code}, 描述: {error_messages[error_code]}")
else:
print("未识别的错误代码")
# 使用函数处理响应数据包,并进行错误处理
response = client_socket.recv(256)
if response_function_code == 0x83:
handle_modbus_error(response)
else:
# 正常处理响应数据
# ...(同上代码中的解析响应过程)
```
使用如上的错误处理函数和代码逻辑可以使得通讯过程中遇到的异常情况得到合理的诊断和处理,提高通讯的稳定性。
# 4. 三菱PLC与MODBUS TCP的实际应用案例
## 4.1 案例分析:数据采集与监控
### 4.1.1 系统架构设计
在工业自动化领域,数据采集与监控系统(SCADA)是至关重要的基础设施。本案例介绍如何在三菱PLC中应用MODBUS TCP通讯协议,构建一个稳定可靠的数据采集与监控系统。
系统架构设计是实现有效数据采集与监控的关键。在本案例中,三菱PLC作为系统的控制核心,通过MODBUS TCP通讯协议与上位机、远程监控站以及其他的PLC设备进行通信。
#### 系统架构图
```mermaid
graph LR
A[远程监控站] -->|MODBUS TCP| B[三菱PLC]
B -->|MODBUS TCP| C[上位机]
B -->|MODBUS TCP| D[其他PLC设备]
```
该架构中,PLC负责实时数据采集,并将其通过MODBUS TCP协议发送至远程监控站和上位机。上位机通常为操作员工作站,负责显示实时数据并实现控制逻辑。远程监控站可提供移动监控解决方案,确保了管理人员可以实时掌握工厂运行情况。
### 4.1.2 实施步骤与结果分析
#### 实施步骤
1. **硬件连接**:确保三菱PLC和远程监控站、上位机之间的网络连接正确无误。
2. **网络配置**:在三菱PLC中设置MODBUS TCP通讯参数,包括IP地址、端口号等。
3. **编程逻辑开发**:利用三菱PLC的编程环境,编写相应的数据采集与通讯逻辑。
4. **测试与调试**:上传PLC程序,进行通讯测试和功能验证,确保数据准确无误地传输。
5. **监控界面搭建**:在远程监控站和上位机上搭建用户友好的监控界面。
```mermaid
sequenceDiagram
上位机->>PLC: 请求数据
PLC-->>上位机: 返回采集数据
远程监控站->>PLC: 请求数据
PLC-->>远程监控站: 返回采集数据
远程监控站->>操作员: 显示数据和状态
```
#### 结果分析
通过实施上述步骤,建立了一个能够实时采集并监控三菱PLC运行状态的系统。通过监控界面上的数据显示,PLC采集的数据准确地传输至上位机和远程监控站。通过数据分析,可以及时发现生产异常,对生产过程进行调整。
此外,由于MODBUS TCP协议的稳定性和高效性,通讯过程中的数据丢包、延迟等现象较少,保证了监控系统的可靠性和实时性。
## 4.2 案例分析:远程控制与自动化
### 4.2.1 设计远程控制方案
远程控制与自动化是工业4.0的关键技术之一。本案例通过三菱PLC与MODBUS TCP通讯协议,实现了一套远程控制与自动化系统。
#### 远程控制架构
```mermaid
graph LR
A[远程操作员] -->|MODBUS TCP| B[上位机]
B -->|MODBUS TCP| C[三菱PLC]
C -->|控制命令| D[机械设备]
```
在此架构中,远程操作员通过上位机发送控制命令给三菱PLC,PLC接收到命令后,控制相应的机械设备执行操作。
### 4.2.2 系统实施与调试
#### 实施步骤
1. **远程控制端开发**:开发远程操作员使用的控制界面和软件。
2. **通讯协议配置**:在上位机和PLC上配置MODBUS TCP通讯协议参数。
3. **PLC程序设计**:设计PLC程序以接受远程控制端的命令,并控制机械设备。
4. **安全验证机制**:确保通讯过程中的数据安全和控制命令的合法性。
5. **测试与优化**:测试远程控制系统的响应速度和稳定性,并进行必要的优化。
```plaintext
# PLC控制命令接收伪代码示例
# 通讯协议配置部分
config modbus ip="192.168.1.100" port=502
# 读取远程控制命令函数
def get_remote_command():
command = modbus_read('holding_registers', 100, 1)
return command[0]
# 控制机械设备函数
def execute_command(command):
if command == "START":
start_machinery()
elif command == "STOP":
stop_machinery()
```
#### 结果分析
通过实施远程控制方案,操作员可以不在现场的情况下,控制和管理生产过程。系统响应迅速,控制命令执行准确。确保了生产流程的连续性和自动化水平的提高。同时,安全验证机制的实施,有效地防止了非法访问和控制。
## 4.3 案例分析:故障诊断与维护
### 4.3.1 故障诊断流程
在工业自动化领域,故障诊断与维护是保证生产线稳定运行的重要环节。本案例探讨了如何应用三菱PLC和MODBUS TCP协议实现故障诊断流程。
#### 故障诊断流程图
```mermaid
graph LR
A[三菱PLC] -->|MODBUS TCP| B[故障诊断服务器]
B -->|分析结果| C[维护工程师]
```
在此流程中,PLC实时监测机械设备的状态,并将数据通过MODBUS TCP通讯协议传输至故障诊断服务器。服务器对数据进行分析,发现异常或故障时,及时通知维护工程师。
### 4.3.2 维护策略与预防措施
#### 维护策略
1. **实时监控与报警系统**:确保PLC能够及时发现异常状态并发送报警信号。
2. **历史数据记录与分析**:记录设备的历史运行数据,便于故障发生时的追溯和分析。
3. **定期维护提示**:基于数据分析,制定定期维护计划,并通过系统提示维护工程师。
#### 预防措施
1. **设备运行状态评估**:定期对设备运行状态进行评估,了解设备健康状况。
2. **备件管理与更换计划**:根据设备维护记录,提前准备更换所需备件。
3. **操作员培训与指导**:对操作员进行针对性培训,提高操作准确性和设备使用效率。
### 结语
通过上述案例的分析,可以看出三菱PLC与MODBUS TCP协议在工业自动化领域的实际应用,不仅提高了生产的自动化和智能化水平,也为故障诊断与维护提供了高效的技术支持。这些成功案例为未来工业通讯技术的发展提供了宝贵的经验与方向。
# 5. 进阶技巧与未来展望
随着工业自动化技术的不断进步,三菱PLC结合MODBUS TCP通讯协议的应用越来越广泛,对于进阶技巧的掌握和未来技术的展望显得尤为重要。本章将深入探讨在安全性强化、高级通讯功能的应用,以及预测未来可能的通讯技术趋势。
## 5.1 安全性强化与数据加密
在自动化控制系统中,数据的完整性和安全性至关重要。因此,强化通讯协议的安全性,尤其是在公开的网络上进行数据交换时,显得尤为重要。
### 5.1.1 安全通讯的策略与方法
为保护通讯数据不被窃取或篡改,我们需采取有效的策略与方法。其中包括但不限于:
- 使用虚拟私人网络(VPN)技术,以加密的方式在公共网络上建立专用通讯通道。
- 利用防火墙与入侵检测系统,实时监控和防御未授权的网络访问。
- 进行定期的安全评估和渗透测试,以发现潜在的安全漏洞并及时修补。
### 5.1.2 数据加密技术的应用
数据加密是保障数据传输安全的有效手段。我们通常使用以下几种加密技术:
- 对称加密:在同一时刻,加密和解密都使用相同的密钥。
- 非对称加密:使用一对公钥和私钥,公钥用于加密,私钥用于解密。
- SSL/TLS:建立安全的通讯通道,通过身份认证和数据加密来保障数据安全。
## 5.2 高级通讯功能的应用
随着工业4.0和物联网(IoT)的兴起,三菱PLC通讯技术也在不断发展,提供了更多的高级通讯功能。
### 5.2.1 点对点通讯模式的实现
点对点通讯模式允许两个设备直接进行数据交换,无需通过中央服务器。实现点对点通讯的关键步骤包括:
- 设定PLC的通讯参数,确保两个设备的地址和端口号正确匹配。
- 在PLC程序中编写通讯指令,用于建立和管理点对点通讯。
- 测试通讯过程,并优化相关参数以确保通讯的可靠性和实时性。
### 5.2.2 同步与异步数据处理
同步通讯要求请求和响应操作在时间上同步,而异步通讯则没有这种时间上的严格要求。了解两者的差异和应用场合对于提高系统的性能至关重要:
- 在实时性要求较高的场景中,如自动控制系统,同步通讯模式能够确保即时反馈。
- 对于允许一定延迟的场景,例如数据采集系统,异步通讯可以提高通讯效率和系统的稳定。
## 5.3 三菱PLC通讯技术的未来趋势
展望未来,三菱PLC通讯技术将朝着更高的集成度、更低的延迟以及更广泛的工业互联网应用发展。
### 5.3.1 新技术的集成与发展
随着5G技术的商用化,以及边缘计算的兴起,三菱PLC通讯技术将集成这些新技术,以实现更快的数据传输速度和更短的响应时间。如:
- 5G网络能够提供高带宽和低延迟,非常适合用于远程控制和实时监控。
- 边缘计算将数据处理和存储推向网络边缘,可以减少对中央服务器的依赖,降低网络拥塞。
### 5.3.2 行业应用的拓展与前景分析
三菱PLC通讯技术将不仅仅局限于传统的制造业,未来将拓展至智能建筑、智能交通、智慧城市等多个领域。具体应用前景分析如下:
- 智能建筑:通过PLC通讯技术实现建筑设备的智能控制和能源管理。
- 智能交通:用于管理交通信号灯、监控交通流量,提高交通效率。
- 智慧城市:将PLC通讯技术应用于公共设施的管理,例如照明和环境监控,从而提升城市运行的智能化水平。
在关注安全性、探索新通讯功能及预测未来趋势的同时,我们必须认识到,技术的发展需要符合实际的工业需求和操作人员的技能水平。随着PLC通讯技术的不断进化,预计在不久的将来,我们能够看到更加智能化、网络化和自动化的工业控制系统。
0
0