CN104881379A - 一种串口通信方法 - Google Patents
一种串口通信方法 Download PDFInfo
- Publication number
- CN104881379A CN104881379A CN201510362905.8A CN201510362905A CN104881379A CN 104881379 A CN104881379 A CN 104881379A CN 201510362905 A CN201510362905 A CN 201510362905A CN 104881379 A CN104881379 A CN 104881379A
- Authority
- CN
- China
- Prior art keywords
- instruction
- byte
- command byte
- receive
- bytes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0002—Serial port, e.g. RS232C
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种串口通信方法,包括:依次接收上位机发送的组成同一个指令的多个指令字节;每接收一个指令字节,则判断所述指令的多个指令字节是否接收完毕,如果是,则将所述指令发送至主程序以供其对该指令进行处理,如果否,则等待接收该指令的下一个指令字节。本发明对上位机发送的指令的实时性无要求,而是依次接收上位机发送的同一个指令的多个指令字节,并在接收到一个指令字节后,如果接收完毕,则将指令发送至主程序,否则,则继续等待接收该指令的下一个字节,从而解决了指令的字节与字节间可能存在时间间隔的问题,能够有效获取并识别上位机发送的指令,保证了上位机和下位机之间实现可靠和稳定的通信。
Description
技术领域
本发明涉及数据通信技术领域,更具体地说,涉及一种串口通信方法。
背景技术
模块化的水质监测系统一般由上位机和若干实现某种功能的功能模块(下位机)组成,而水质监测系统的功能实质上是上位机和下位机之间通过通信的方式来实现的。因此,一种理想的下位机通信方式或算法能够保证上位机和下位机之间实现可靠和稳定的通信。
现有技术的上位机和下位机的串口通信过程中,上位机每发完一帧指令,下位机则在规定时间内(若干毫秒)使用DMA(Direct Memory Access,直接内存访问)方式接收,对接收到的指令进行相关处理;并且在经过规定时间后进行DMA清零,即清除接收到的指令。其中,规定时间不可设置的太长,因为那样会影响上位机和下位机之间通信的实时性、通信速度及通信效率等。
但是,上位机在进行多任务处理时经常会影响发送指令的实时性,导致发送出来的指令的字节与字节间偶尔出现不确定时间的中断,由此不能在规定时间内将一帧指令发送完毕,此时,下位机则对该指令不予以处理或认为该指令是错误帧而直接进行DMA清零。最终导致上位机和下位机间的通信缺乏稳定性和可靠度。综上所述,现有技术中存在上位机与下位机之间的通信缺乏稳定性和可靠度的问题。
发明内容
本发明的目的是提供一种串口通信方法,以解决现有技术中上位机与下位机之间的通信缺乏稳定性和可靠度的问题。
为了实现上述目的,本发明提供如下技术方案:
一种串口通信方法,包括:
依次接收上位机发送的组成同一个指令的多个指令字节;
每接收一个指令字节,则判断所述指令的多个指令字节是否接收完毕,如果是,则将所述指令发送至主程序以供其对该指令进行处理,如果否,则等待接收该指令的下一个指令字节。
优选的,所述方法还包括:
每接收一个指令字节,则按照先入先出原则将所述指令字节加入至暂存器存储的具有一定长度的字节队列中,如果有字节从所述字节队列中溢出,则将溢出的字节移至指定存储器中。
优选的,所述方法还包括:
每接收一个指令字节,则判断该指令字节的地址码、功能码是否正确,如果是,则执行判断所述指令的多个指令字节是否接收完毕的步骤。
优选的,所述方法还包括:
如果所述指令字节的功能码和地址码正确,则将该指令字节取出并存储至指定存储器中。
优选的,所述方法还包括:
如果所述指令的多个指令字节接收完毕,则树校验标志。
优选的,所述方法还包括:
所述主程序接收所述指令,并对所述指令进行校验,如果校验成功,则对该指令进行预设处理;
如果校验不成功,则清空所述校验标志。
优选的,所述上位机对所述指令进行预设处理,包括:
所述主程序对所述指令进行数据解析、功能执行及指令恢复操作。
优选的,所述方法还包括:
所述主程序对所述指令进行预设处理后,清除所存储的所述指令。
本发明提供的一种串口通信方法,包括:依次接收上位机发送的组成同一个指令的多个指令字节;每接收一个指令字节,则判断所述指令的多个指令字节是否接收完毕,如果是,则将所述指令发送至主程序以供其对该指令进行处理,如果否,则等待接收该指令的下一个指令字节。与现有技术相比,本发明对上位机发送的指令的实时性无要求,即不设定背景技术中提到的规定时间,而是依次接收上位机发送的同一个指令的多个指令字节,并在接收到一个指令字节后,如果接收完毕,则将指令发送至主程序,否则,则继续等待接收该指令的下一个字节,从而解决了指令的字节与字节间可能存在时间间隔的问题,能够有效获取并识别上位机发送的指令,保证了上位机和下位机之间实现可靠和稳定的通信。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种串口通信方法的流程图;
图2为本发明实施例提供的一种串口通信方法中先入先出原则的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的一种串口通信方法,可以包括:串口中端程序依次接收上位机发送的组成同一个指令的多个指令字节,并且每次接收到一个指令字节,都进行如图1所示的步骤,具体可以包括:
S11:接收一个指令字节。
S12:判断所述指令的多个指令字节是否接收完毕,如果否,则执行步骤S13,如果是,则执行步骤S14。
S13:等待接收该指令的下一个指令字节,并在接收到该指令的下一个字节后,执行步骤S12。
S14:将所述指令发送至主程序以供其对该指令进行处理。
本发明对上位机发送的指令的实时性无要求,即不设定背景技术中提到的规定时间,而是依次接收上位机发送的同一个指令的多个指令字节,并在接收到一个指令字节后,如果接收完毕,则将指令发送至主程序,否则,则继续等待接收该指令的下一个字节,从而解决了指令的字节与字节间可能存在时间间隔的问题,能够有效获取并识别上位机发送的指令,保证了上位机和下位机之间实现可靠和稳定的通信。
需要说明的是,上述实施例提供的一种串口通信方法,判断所述指令的多个指令字节是否接收完毕的步骤是基于MODBUS通信协议实现的。
本发明实施例提供的一种串口通信方法,还可以包括:
每接收一个指令字节,则按照先入先出原则将所述指令字节加入至暂存器存储的具有一定长度的字节队列中,如果有字节从所述字节队列中溢出,则将溢出的字节移至指定存储器中。
需要说明的是,先入先出原则是一种传统的按序执行方法,在本实施例中指的是,先进入字节列队的指令字节先溢出。举例说明该原则,如图2所示,假设字节队列最多可存储7个指令字节,且当其字节队列存储有7个指令字节,分别为0号字节、1号字节、2号字节、3号字节、4号字节、5号字节、6号字节,当接收到一个指令字节时,0号字节溢出,1号字节至6号字节均向前移动一个位置,即1号字节变成0号字节,2号字节变成1号字节,以此类推;则6号字节变成5号字节,其原本的位置是空的,此时,将接收到的指令字节放置在该空的位置上,成为6号字节。由此,能够保证字节队列中所包含的指令字节为最新的指令字节,方便对该指令字节进行相关处理。
本发明实施例提供的一种串口通信方法,还可以包括:
每接收一个指令字节,则判断该指令字节的地址码、功能码是否正确,如果是,则执行判断所述指令的多个指令字节是否接收完毕的步骤,同时将该指令字节取出并存储至指定存储器中。
如果接收到的指令字节的地址码和功能码均正确,则可树帧继续暂存标志,即表明继续接收下一个指令字节。且,将地址码和功能码均正确的指令取出并存储至指定存储器中,可保证下一个接收到的指令字节能够成功存储至暂存器,暂存器指针自加。由此,实现根据指令所包含的指令字节的个数实现对暂存器的冗余分配,确保有足够的暂存器能够实现相关存储工作。
另外,如果指令字节的地址码和功能码不正确,说明该指令与主程序并不对应,则可立即退出串口中端程序。
本发明实施例提供的一种串口通信方法,还可以包括:
如果所述指令的多个指令字节接收完毕,则树校验标志。
主程序只需实时监测校验位即可获知是否需要获取指令;即当检测到校验标志时,则获取指令,保证主程序能够及时获取指令。
本发明实施例提供的一种串口通信方法,还可以包括:
所述主程序接收所述指令,并对所述指令进行校验,如果校验成功,则对该指令进行预设处理;如果校验不成功,则清空所述校验标志。
清除校验标志,以避免后续工作中因校验标志的存在误判需要获取指令,进而错误的执行相关步骤。且,指令字节的个数越多,对指令进行校验占用的时间则越长,因此将校验指令的过程安排在主程序中执行,能够保障上位机发送的指令均能成功接收。另外,清空校验标志后可直接退出主程序。
其中,预设处理可以包括:对所述指令进行数据解析、功能执行及指令恢复操作。
另外,在主程序对所述指令进行预设处理后,可以清除所存储的所述指令,并且清零暂存器指针。由此,能够保证暂存器或者指定存储器始终拥有足够的空间实现后续的保存工作。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (8)
1.一种串口通信方法,其特征在于,包括:
依次接收上位机发送的组成同一个指令的多个指令字节;
每接收一个指令字节,则判断所述指令的多个指令字节是否接收完毕,如果是,则将所述指令发送至主程序以供其对该指令进行处理,如果否,则等待接收该指令的下一个指令字节。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
每接收一个指令字节,则按照先入先出原则将所述指令字节加入至暂存器存储的具有一定长度的字节队列中,如果有字节从所述字节队列中溢出,则将溢出的字节移至指定存储器中。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
每接收一个指令字节,则判断该指令字节的地址码、功能码是否正确,如果是,则执行判断所述指令的多个指令字节是否接收完毕的步骤。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
如果所述指令字节的功能码和地址码正确,则将该指令字节取出并存储至指定存储器中。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
如果所述指令的多个指令字节接收完毕,则树校验标志。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
所述主程序接收所述指令,并对所述指令进行校验,如果校验成功,则对该指令进行预设处理;
如果校验不成功,则清空所述校验标志。
7.根据权利要求6所述的方法,其特征在于,所述上位机对所述指令进行预设处理,包括:
所述主程序对所述指令进行数据解析、功能执行及指令恢复操作。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
所述主程序对所述指令进行预设处理后,清除所存储的所述指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510362905.8A CN104881379B (zh) | 2015-06-26 | 2015-06-26 | 一种串口通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510362905.8A CN104881379B (zh) | 2015-06-26 | 2015-06-26 | 一种串口通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104881379A true CN104881379A (zh) | 2015-09-02 |
CN104881379B CN104881379B (zh) | 2018-08-21 |
Family
ID=53948876
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510362905.8A Active CN104881379B (zh) | 2015-06-26 | 2015-06-26 | 一种串口通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104881379B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106230745A (zh) * | 2016-07-20 | 2016-12-14 | 北京云杉智源科技有限公司 | 具有高实时性和低延时性的上下位机之间的数据传输方法 |
CN113342720A (zh) * | 2021-05-12 | 2021-09-03 | 辅易航智能科技(苏州)有限公司 | 一种高速串口通信方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101699419B (zh) * | 2009-11-13 | 2012-03-21 | 威盛电子股份有限公司 | 数据传输方法以及使用该方法的通用串行总线主机控制器 |
CN103631622A (zh) * | 2013-11-29 | 2014-03-12 | 中达电通股份有限公司 | 软件在线升级修复方法 |
US8819326B1 (en) * | 2006-12-12 | 2014-08-26 | Spansion Llc | Host/client system having a scalable serial bus interface |
-
2015
- 2015-06-26 CN CN201510362905.8A patent/CN104881379B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8819326B1 (en) * | 2006-12-12 | 2014-08-26 | Spansion Llc | Host/client system having a scalable serial bus interface |
CN101699419B (zh) * | 2009-11-13 | 2012-03-21 | 威盛电子股份有限公司 | 数据传输方法以及使用该方法的通用串行总线主机控制器 |
CN103631622A (zh) * | 2013-11-29 | 2014-03-12 | 中达电通股份有限公司 | 软件在线升级修复方法 |
Non-Patent Citations (1)
Title |
---|
吴怀超等: "基于汇编语言的MSP430单片机与上位机间串行通讯的实现", 《仪表技术与传感器》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106230745A (zh) * | 2016-07-20 | 2016-12-14 | 北京云杉智源科技有限公司 | 具有高实时性和低延时性的上下位机之间的数据传输方法 |
CN106230745B (zh) * | 2016-07-20 | 2019-05-14 | 北京云杉智源科技有限公司 | 具有高实时性和低延时性的上下位机之间的数据传输方法 |
CN113342720A (zh) * | 2021-05-12 | 2021-09-03 | 辅易航智能科技(苏州)有限公司 | 一种高速串口通信方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104881379B (zh) | 2018-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106598632B (zh) | 一种光模块的固件升级方法及装置 | |
US8184026B2 (en) | Mobile industry processor interface | |
CN100504827C (zh) | 在次序混乱的dma命令队列中建立命令次序 | |
CN104052758A (zh) | 电能表多通信协议的自适应方法 | |
WO2020023797A1 (en) | Unified address space for multiple hardware accelerators using dedicated low latency links | |
CN102970104B (zh) | 一种获取数据的方法及服务器 | |
JP5633636B2 (ja) | 伝送遅延差補正方法,通信装置および通信システム | |
CN108271150B (zh) | 支持同时对多台手机进行刷机或数据清除的方法及系统 | |
EP2428893A2 (en) | A reduction operation device, a processor, and a computer system | |
CN105204968A (zh) | 一种故障内存检测方法和装置 | |
CN104320317A (zh) | 一种以太网物理层芯片状态的传送方法和装置 | |
CN104881379A (zh) | 一种串口通信方法 | |
CN104778025A (zh) | 基于随机访问存储器的先入先出存储器的电路结构 | |
CN105573711A (zh) | 一种数据缓存方法及装置 | |
CN106533976A (zh) | 一种数据包处理方法及装置 | |
US9058266B2 (en) | Deskew apparatus and method for peripheral component interconnect express | |
CN108398918B (zh) | 一种plc信息流转方法、存储器、plc及系统 | |
EP2442500B1 (en) | Data transfer device and data transfer method | |
CN101241451A (zh) | 一种嵌入式系统的串口可靠通讯控制方法 | |
CN104022963A (zh) | 多种通信方式并存的通信方法及装置 | |
CN110597482B (zh) | 一种用于串口在fifo中查找最新有效数据包的方法 | |
CN102890661A (zh) | 一种主从机通讯协议 | |
CN104516829A (zh) | 微处理器及使用指令循环高速缓存的方法 | |
CN103973581A (zh) | 一种报文数据处理方法、装置及系统 | |
CN104021100A (zh) | 一种单片机串口接收数据的处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |