基于串口自定义协议的数据通信方式设计
串口自定义通信协议程序

串口自定义通信协议程序【原创实用版】目录一、串口通信协议的基础知识二、自定义串口通信协议的实现方法三、温度采集器与上位机串口通信协议的设计实例四、自定义串口通信协议的应用优势与局限性正文一、串口通信协议的基础知识串口通信协议是一种基于串行通信的数据传输方式。
与并行通信相比,串口通信协议具有线路简单、成本低的优点。
在电子设备之间进行数据传输时,常常使用串口通信协议。
在串口通信中,数据是逐个比特按顺序进行传输的。
发送方将数据字符从并行转换为串行,按位发送给接收方。
接收方收到串行数据后,再将其转换为并行数据。
这种通信方式在仅使用一根信号线的情况下完成数据传输,具有线路简单、成本低的优点。
但是,由于串口通信是按位进行的,因此传输速度较慢,且容易受到噪声干扰。
二、自定义串口通信协议的实现方法自定义串口通信协议的实现方法主要包括以下几个步骤:1.选择合适的硬件层通信协议。
常见的硬件层通信协议有 RS-232、RS-485 等。
选择合适的通信协议需要考虑通信距离、通信速率、抗干扰能力等因素。
2.设计数据帧格式。
数据帧格式包括起始符、地址符、数据长度、数据内容、校验和、结束符等。
起始符用于指示数据帧的开始,地址符用于指示数据帧的地址,数据长度用于指示数据帧的数据内容长度,数据内容用于存储实际的数据信息,校验和用于检验数据传输的正确性,结束符用于指示数据帧的结束。
3.编写下位机程序。
下位机程序主要负责发送和接收数据,实现硬件层通信协议。
在编写下位机程序时,需要考虑数据帧的组装、发送、接收、解析等方面。
4.编写上位机程序。
上位机程序主要负责与下位机进行通信,实现数据采集、控制等功能。
在编写上位机程序时,需要考虑数据帧的解析、数据处理、控制指令的发送等方面。
三、温度采集器与上位机串口通信协议的设计实例假设我们需要设计一个温度采集器与上位机之间的串口通信协议,用于实现温度采集数据上传和上位机控制每路温度测量通道的开启功能。
组态王自定义串口协议编程

组态王自定义串口协议编程一、引言在自动化控制系统领域,组态王是一款广泛应用于监控和控制系统的软件。
为了实现与其他设备的通信,组态王提供了自定义串口协议编程功能。
本文将详细介绍如何进行自定义串口协议编程,以满足实际工程需求。
二、组态王简介组态王(KingView)是一款国内知名的监控和控制软件,具有良好的人机界面、强大的数据处理和通信功能。
组态王支持多种通信协议,如Modbus、Profibus、以太网等。
在实际工程中,用户可以根据需求自定义串口协议,实现与其他设备的通信。
三、自定义串口协议编程原理自定义串口协议编程主要包括以下几个方面:1.初始化串口:设置串口参数,如波特率、数据位、停止位等。
2.发送数据:按照协议格式,将数据发送给其他设备。
3.接收数据:接收其他设备发送的数据,并按照协议解析。
4.错误检测与处理:实现错误检测和处理功能,保证数据传输的可靠性。
四、具体操作步骤1.打开组态王,新建一个工程。
2.在工程中添加一个串口通信设备。
3.配置串口通信设备的属性,如波特率、数据位、停止位等。
4.编写自定义协议程序,实现数据的发送和接收。
5.调试并优化程序,确保通信正常。
五、实战案例分享以下是一个自定义串口协议编程的实战案例:1.设备A发送数据:设备A按照自定义协议格式,将数据发送给设备B。
2.设备B接收数据:设备B接收到数据后,按照协议解析并处理。
3.数据处理:设备B将解析后的数据上传至组态王,进行实时监控。
六、注意事项1.在编写自定义协议时,要确保协议的稳定性和可靠性。
2.注意错误检测与处理,避免因为传输错误导致系统不稳定。
3.调试过程中,密切关注数据传输情况,及时发现问题并进行优化。
七、总结通过本文的介绍,相信大家对组态王自定义串口协议编程有了更深入的了解。
在实际工程中,根据需求编写自定义串口协议,可以有效提高设备的通信效率和系统的稳定性。
正点原子 串口自定义协议解析

正点原子串口自定义协议解析一、概述串口通信是嵌入式系统中常用的一种通信方式,在嵌入式系统设计中,由于硬件资源有限、处理器速度较慢等原因经常需要进行高效的数据传输。
而串口自定义协议的设计则是串口通信中的重要一环,它可以提高数据传输的稳定性和可靠性。
本文将介绍正点原子串口自定义协议的解析,以及如何在嵌入式系统中应用该协议进行数据通信。
二、正点原子串口自定义协议概述1. 正点原子是一家专注于嵌入式系统开发的公司,他们提供了一套完整的嵌入式开发评台,包括开发板、软件工具等。
在串口通信方面,正点原子提供了一套串口自定义协议的解决方案,该协议可以在嵌入式系统中提高数据传输的可靠性和稳定性。
2. 正点原子串口自定义协议的特点:(1) 基于帧的通信:正点原子串口自定义协议采用固定帧格式进行通信,包括帧头、数据域、校验码等字段,使得接收端可以准确地识别和解析每一帧数据。
(2) 支持数据校验:协议中包含数据校验字段,可以用于检测数据传输过程中出现的错误,提高数据传输的可靠性。
(3) 灵活的配置和扩展:协议的帧格式可以根据具体的应用需求进行灵活配置和扩展,满足不同场景下的数据通信要求。
三、正点原子串口自定义协议帧格式解析1. 帧头:帧头是一段固定的标识符,用于标识一帧数据的开始,通常为一个字节的特定数值。
2. 数据域:数据域包含了要传输的有效数据,长度可以根据应用需求进行灵活配置。
3. 校验码:校验码用于对数据进行校验,常见的校验算法包括CRC校验、奇偶校验等。
4. 帧尾:帧尾标识了一帧数据的结束,通常为一个特定的标识符。
四、正点原子串口自定义协议的应用1. 在嵌入式系统中使用正点原子串口自定义协议:(1) 在嵌入式系统的发送端,需要将要发送的数据按照协议的帧格式进行封装,包括添加帧头、校验码等。
(2) 然后通过串口发送模块将封装好的数据发送出去。
(3) 在接收端,通过串口接收模块接收到数据后,需要进行帧解析,包括对帧头、校验码的检测,以及对数据的解析提取。
自定义串口通讯协议编写

自定义串口通讯协议编写自定义串口通讯协议编写本文确定了以下各方的身份。
1. 发送方:(以下简称“发送方”)2. 接收方:(以下简称“接收方”)双方要求遵守中国的相关法律法规。
同时,双方还要确保本协议的法律效力和可执行性。
以下条款规定了各方的权利和义务,以及履行方式、期限和违约责任等相关内容。
一、发送方的权利和义务1. 发送方应确保向接收方发送的数据准确无误、完整和可读性,并承担因数据错误造成的全部责任。
2. 发送方应保证发送的数据符合法律规定,不侵犯第三方的权益,遵守商业道德。
3. 发送方应遵守协议约定的履行方式和期限,如有变更应及时通知接收方,并经接收方同意后修改协议。
4. 发送方应承担因违反本协议规定而造成的违约责任,并赔偿接收方因此遭受的全部损失。
二、接收方的权利和义务1. 接收方应确保接受到的数据准确无误、完整和可读性,并承担因数据错误造成的全部责任。
2. 接收方应保证接受的数据符合法律规定,不侵犯第三方的权益,遵守商业道德。
3. 接收方应遵守协议约定的履行方式和期限,如有变更应及时通知发送方,并经发送方同意后修改协议。
4. 接收方应承担因违反本协议规定而造成的违约责任,并赔偿发送方因此遭受的全部损失。
三、履行方式和期限1. 发送方应按照协议约定的方式发送数据,接收方应按照协议约定的方式接受数据。
2. 发送方应在约定的期限内发送数据,接收方应在接收到数据后及时处理,并按照约定的期限做出回应。
四、协议的决定1. 如果本协议的任何条款被视为无效或无法执行,则该条款应被视为与协议分离,不影响协议的有效性和可执行性。
2. 如果本协议的任何条款被修改,双方应及时通知对方,并经双方同意后修改协议。
五、争议解决1. 双方应尽一切合理努力和善意解决任何争议或纠纷。
2. 如果仍不能解决,则应通过友好协商解决。
如果友好协商无法解决争议,双方应提交本协议规定的有管辖权的人民法院解决。
六、协议的效力1. 本协议自双方签署之日起生效。
组态王自定义串口协议编程

组态王自定义串口协议编程【最新版】目录1.组态王简介2.串口协议编程基础3.组态王自定义串口协议编程方法4.实际应用案例5.总结正文一、组态王简介组态王(KingView)是一款由北京三维力控科技有限公司研发的工业自动化监控软件,广泛应用于各类工业自动化控制系统中。
组态王具有强大的数据采集、处理、显示和控制功能,能够满足各种复杂工程的应用需求。
在组态王中,串口通信是一种常见的数据传输方式,通过自定义串口协议编程,可以实现与其他设备或系统的无缝对接。
二、串口协议编程基础串口协议编程是指通过编写程序实现数据在串口之间的传输和接收。
通常情况下,串口协议编程需要考虑以下几个方面:1.波特率:波特率是指每秒钟传输的比特数,通常用“bps”表示。
常见的波特率有 9600、19200、38400、57600 和 115200 等。
2.数据位:数据位是指每次传输时所传输的二进制位数,通常为 7 位或 8 位。
3.奇偶校验:奇偶校验是一种用于检测数据传输错误的校验方法,常见的有奇校验和偶校验。
4.停止位:停止位是指数据传输结束后,用于标识数据传输结束的位数,通常为 1 位或 2 位。
三、组态王自定义串口协议编程方法在组态王中,自定义串口协议编程可以通过以下步骤实现:1.创建通信串口:在组态王中,首先需要创建一个通信串口,用于与其他设备或系统进行数据传输。
2.配置串口参数:根据实际通信需求,设置串口的波特率、数据位、奇偶校验和停止位等参数。
3.编写发送数据函数:通过编写函数,实现数据的发送。
在函数中,需要将数据按照串口协议进行格式化,然后通过串口发送数据。
4.编写接收数据函数:同样地,通过编写函数,实现数据的接收。
在函数中,需要从串口接收数据,并根据串口协议进行解格式化。
5.编写数据处理函数:根据实际应用需求,编写数据处理函数,对接收到的数据进行处理。
四、实际应用案例以组态王与某 PLC 通信为例,首先创建一个通信串口,并配置好串口参数。
基于MODBUS协议TMS320F2812与PC机串口通信软件设计

基于MODBUS协议TMS320F2812与PC机串口通信软件设计摘要:本文首先介绍了基于MODBUS协议的TMS320F2812DSP与PC机进行串口通信时的硬件连接。
然后,详细阐述了从机通信程序和主机通信模块的软件设计。
其通信程序协议采用了一种通用工业标准Modbus协议。
采用中断方式实现数据的接收和发送,保证了数据传输的可靠性。
利用C语言编写DSP从站通信程序,以便于程序的移植。
关键词:MODBUS TMS320F2812 PC 串口通信1 前言在众多微处理器当中,一般都会集成有一路或者多路硬件UART(异步串行通信接口)通道,能够非常方便地实现串行通信。
在工业控制、电力通讯、智能仪表等领域,常常使用简便易用的串行通信方式作为数据交换的手段[2]。
MODBUS是MODICON公司于1979年开发的一种通讯协议,是广泛应用于电子控制器上的一种通用语言通过此协议,控制器之间、控制器和其他设备之间可以进行通信,它已经成为一种通用工业标准。
通过它不同厂商生产的控制设备可以连成一个网络进行集中监控。
Modbus协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程、如何回应其它设备的请求,以及怎样侦测错误并记录等。
它制定了消息域和内容的公共格式。
以MCU为核心的静止无功补偿装置需要将采集到的实时数据和故障数据上传给PC机的控制界面,以便于人机交互。
利用MODBUS协议实现PC机与MCU之间的串口通信。
在本文设计的系统中以PC机作为主站(上位机) ,以TI公司的TMS320F2812DSP控制器作为从站(下位机) ,实现基于MODBUS的主从式通信。
图1为DSP与PC机的模块方框图[3]。
.图1 DSP与PC机的模块方框图2 硬件连接方法MODBUS标准物理层采用了RS-232串行通信标准,远距离或多点通讯时可以考虑用RS-422或者RS-485串行通信标准来代替。
串口自定义通信协议程序

串口自定义通信协议程序下面是一个简单的串口自定义通信协议程序的示例代码:```pythonimport serial# 打开串口ser = serial.Serial('COM1', 9600)# 定义通信协议相关的常量CMD_START = b'\x02' # 命令起始标志CMD_END = b'\x03' # 命令结束标志READ_CMD = b'\x10' # 读取数据命令WRITE_CMD = b'\x20' # 写入数据命令ACK = b'\x06' # 命令执行成功响应# 自定义的处理命令函数def process_command(command):if command == READ_CMD:# 读取数据的操作data = b'\x01\x02\x03' # 假设读取到的数据是 0x01, 0x02, 0x03return dataelif command.startswith(WRITE_CMD):# 写入数据的操作data = command[1:] # 假设要写入的数据是命令后面的字节# 执行写入操作return ACK # 写入成功响应else:# 未知命令return b'\x15' # 命令错误响应while True:# 读取串口数据data = ser.read_until(CMD_END)# 解析命令if data.startswith(CMD_START) and data.endswith(CMD_END): command = data[1:-1]# 处理命令并返回响应response = process_command(command)# 发送响应数据ser.write(CMD_START + response + CMD_END)```这是一个基于Python的串口通信程序,使用了自定义的通信协议。
串口自定义通信协议程序

串口自定义通信协议程序1. 简介串口自定义通信协议程序是一种用于在计算机和外部设备之间进行数据传输的程序。
通过串口通信,可以实现计算机与各种外设(如传感器、电机、显示器等)之间的数据交互。
自定义通信协议则是为了实现特定的数据传输需求而定义的一套规则和格式。
本文将介绍串口自定义通信协议程序的设计原理、实现步骤以及相关注意事项。
2. 设计原理串口自定义通信协议程序的设计原理基于以下几个核心概念:2.1 串口通信串口通信是一种通过串行接口(通常是RS-232接口)进行数据传输的方式。
串口通信使用单根传输线进行数据的发送和接收,其中一根线为数据线(TXD),负责发送数据;另一根线为接收线(RXD),负责接收数据。
2.2 自定义通信协议自定义通信协议是为了满足特定的数据传输需求而定义的一套规则和格式。
通信协议包括数据的帧格式、数据的编码方式、数据的校验等内容。
通过自定义通信协议,可以确保数据的可靠传输和正确解析。
2.3 数据帧数据帧是通信协议中最基本的单位,包含了数据的起始标志、数据内容、校验码等信息。
数据帧的起始标志用于标识一个数据帧的开始,数据内容是要传输的实际数据,校验码用于验证数据的完整性和准确性。
2.4 流控制流控制是为了解决数据发送和接收速度不一致导致的数据丢失或混乱问题。
常用的流控制方式包括硬件流控制和软件流控制。
硬件流控制通过控制RTS(请求发送)和CTS(清除发送)信号来实现数据的流控,软件流控制则通过发送和接收端的协商来控制数据的流动。
3. 实现步骤下面是串口自定义通信协议程序的实现步骤:3.1 确定通信需求首先需要确定通信的具体需求,包括数据传输的类型(单向还是双向)、数据的格式和数据的传输速率等。
3.2 设计数据帧格式根据通信需求,设计数据帧的格式,包括起始标志、数据内容和校验码等。
起始标志用于标识一个数据帧的开始,数据内容是要传输的实际数据,校验码用于验证数据的完整性和准确性。
3.3 实现数据的发送和接收根据串口通信的原理,实现数据的发送和接收功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于串口自定义协议的数据通信方式设计•引言计算机与计算机之间的数据交换不仅可以采用常用的通信协议进行联网方式交换,还可以采用串行通信方式或并行通信方式通过非常规的通信协议方式交换。
不同安全等级的计算机之间需要进行数据传输(出于安全考虑,多数是从安全等级高的计算机向安全等级低的计算机单向传输数据) ,而不同安全等级的计算机是不允许进行直接网络连接的,由此设计了自定义通信协议下通过串行通信端口RS2232 实现处于不同安全等级的计算机之间进行数据传输。
1.RS232 串行端口一组比特数据在多条线上同时被传送的传输方式被称为并行传输。
在传输过程中各数据位可并行传送,传送速度快、效率高,多用于要求实时、快速的场合。
但是有多少数据位就需要多少根数据线,传送成本高。
而串行端口通信是数据通过一根传输线逐位传送,数据传送按位顺序进行,至少只需要一根传输线即可完成,节省传输线。
由于串行通信方式使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用.1.1 RS 2232 端口简介RS232 串行通信端口属于PC 机(个人计算机)及电信应用领域中最为成功的串行数据标准。
它被定义为一种在低速率串行通信中增加通信距离的单端标准,是目前PC 机与通信工业中应用最广泛的一种串行通信接口。
现在的PC机一般有1 到2 个串行通信端口COM1 及COM2 ,这些串行通信端口均为9 个引脚,即异步通信的9 个信号。
在通信速率低于20 kbit / s时,与其直接连接的电缆最大物理距离为15 m(即直接传输距离) 。
RS232 标准规定,若不使用Modem ,在码元畸变小于4 %的情况下,数据终端设备(DTE)和数据通信设备(DCE)之间最大传输距离为15 m。
一般应用中当通信距离小于12 m 时,可以用电缆线直接连接标准RS232 端口。
若距离较远, 须附加调制解调器(Modem) 。
本方案中传输数据的2 台计算机距离很近,采用最基本的接法,将RS232 端口的关键引脚直接用电缆线相连。
RS2232 端口引脚说明见表1。
1.2 硬件连接基于网络安全考虑,自定义协议方式的串行通信端口引脚连接采用单向通信方式,见图1 所示。
用一根电缆线将发送端的TXD 引脚与接收端的RXD 引脚连接,用另一根电缆线连接发送端和接收端的GND 引脚。
如果考虑双向通信或要求进行双向信息对话,则需要连接另外相应的TXD 和RXD引脚,其他引脚是用来传递控制信号的;或者用双串口分别单向连接则安全性更好,其通信程序也就更复杂些。
2.数据通信的实现2.1 通信控件实现串行通信端口之间通信通常有如下几种方法:1)使用Windows 的API函数编写串行通信端口通信程序,该方法较为复杂,需要掌握专业性很强的通信知识,其优点是可实现比较强大的功能,应用面比较广泛,适合编写较为复杂的低层次通信程序。
2)采用与编程语言相适应的控件来实现串行端口通信,该方法实现比较容易,如在Visual Bas ic语言中使用MSCOMM 控件(MSCOMM 控件为Microsof t 的OCX 控件) 、在Delp hi 语言中使用dpComPort 控件等。
本实例采用Delp hi 语言平台开发。
AdpComPort 控件(AdpComPort 属于VCL 控件而非OCX控件)编译后的程序不需要其他额外的动态链接库或注册到系统的控件支持而可以运行于32 位的Windows 操作系统中,具有较好的可移植性,且该控件具有丰富的与串行通信端口密切相关的属性及事件,提供了对串行通信端口的各种操作,该控件还支持多线程。
2.2 AdpComPort的主要属性、方法和事件1)主要属性Baud :设定波特率19200 ,9600 ,4800 等,根据实际需要来确定,在串行端口打开后也可更改波特率,实际波特率会随之更改。
CommNumber :填写0 , 1 , 2 , … 分别表示为COM1 ,COM2 ,COM3 , …等串行端口的名字,在打开串行端口前,必须设置好此值。
Parity :奇偶校验位,可根据实际情况确定。
Open :值为True 时表示打开串行端口,为False 时表示关闭串行端口。
2)主要方法PutChar :发送指定的字符。
Put St ring :发送指定的字符串。
GetChar :接收字符。
3)主要事件On Trigger : ( CP : TObject ; Msg ,Trigger Handle , Data : Word) ,当Msg 为APW_TRIGGERAVAIL 时表示有数据到达该串行通信端口,从而触发该事件,可以声明一个数据类为Char 的变量chrRcv 来接收该数据,接收语句为:chrRcv : = AdpComPort1. GetChar 即可。
2.3 设计步骤本实例中2 台计算机之间采用RS2232 串口通信,实际要求2 台计算机处于无人监控下运行。
在源计算机(即发送数据端计算机)的通信程序窗体中加入AdpComPort 控件、定时器控件、连接数据库的控件,以及其他辅助功能需要的控件。
由定时器定时读取和源计算机连接的网络数据库的数据,进行相应处理后,通过AdpComPort 控件的Put St ring发送到指定的串行端口。
在目标计算机(即接收数据端计算机) 的通信程序窗口加入AdpComPort 控件、连接数据库的控件,以及其他辅助功能需要的控件。
当AdpComPort 控件的事件(On Trigger)检测指定串行通信端口有数据时,将数据接收下来,进行分析处理后提交到相应数据库内。
数据流程如图2 所示。
2.4 程序编写1)发送端主要代码在源计算机的定时器事件中先将数据类型为St ring 的st rSnd经过特别处理(如将中文字符转变为Unicode 码或加密等)后再加上前后缀数据标志发送到串行端口上。
主要代码如下。
/ / st rSnd为需要发送的字符串(可为经过特别处理的字符串) 。
procedure Send (st rSnd :St ring) ;begin/ /在源计算机上显示发送的数据MemoSnd. Lines. Add ( st rSnd) ;/ /“TAG” 为数据前缀标志,“3 ” 为数据后缀标志st r Snd : =’TA G ’ + st rSnd +’ 3’ ;/ /发送指定的字符串AdpComPort1. PutSt ring (st rSnd) ;/ /还可加入判断串行端口是否已经发送完毕的语句等…end。
2)接收端主要代码目标计算机的AdpComPort 控件的事件(On Trigger)的主要代码如下。
procedure AdpComPort1Trigger ( CP : TObject ; Msg ,TriggerHandle , Data : Word) ; varwrdLen :Word ;chrRcv :Char ;st rRcv , st rData : st ring ;begintryif Msg = APW_TRIGGERAVAIL then beginfor wrdLen : = 1 to Data do begin/ /逐个接收字符chrRcv : = AdpComPort1. GetChar ;/ /是结束标志“3 ” 就中断接收,开始分析数据if chrRcv =’ 3’ then breakelse st rRcv : = st rRcv + chrRcv ;end ;if chrRcv =’ 3’ then begin/ /提取标志以外的数据st rData : = copy ( st rRcv ,4 ,length ( st rRcv) ) ) ;/ /是接收端可以接收的数据if copy ( st rRcv ,1 ,3) =’TA G ’ then begin/ /处理(特别处理的逆处理等)接收到的数据…/ /在接收界面端显示MemoRcvData. Lines. Add ( st rData) ;/ /其他情况(如接收文件等) ,有待扩展end else ;/ /将接收字符串变量清空st rRcv : =” ;/ /将接收字符变量清空chrRcv : = # 0 ;end ;end ;end ;except end ;end ;3 系统性能3.1 硬件方面2 台计算机之间只需要新增加2 个串行通信端口插头后用2 根细导线将2 个插头的相应引脚分别连接起来即可。
在串行通信端口连线时可根据单向或双向数据传输的实际需求进行硬件处理。
3.2 软件方面发送端增加1 个往指定串行通信端口写数据的程序;接收端增加1 个从串行通信端口读取数据写入数据库的程序。
3.3 安全方面因为不同安全级别网络之间只是从串行通信端口传递数据,不使用常规的网络协议,而且接收和发送端均以独占方式拥有该串行通信端口的绝对使用权,接收端在接收数据时还进行判断,是接收方认可的数据就接收,不是就不予处理,安全系数非常高。
4 结语本方案现已应用于二滩水调网络向四川省调二滩前置机的数据传输系统中,系统运行正常,数据传输畅通。
虽然根据国家经贸委30 号文[2 ]要求没有从根本上断开网络的连接,但因这种通信途径不使用常规的网络协议而直接对串行通信端口进行硬件读写,对网络之间的安全是有很大的保障的。