一种串口通信方法
【技术领域】
[0001]本发明涉及数据通信技术领域,更具体地说,涉及一种串口通信方法。
【背景技术】
[0002]模块化的水质监测系统一般由上位机和若干实现某种功能的功能模块(下位机)组成,而水质监测系统的功能实质上是上位机和下位机之间通过通信的方式来实现的。因此,一种理想的下位机通信方式或算法能够保证上位机和下位机之间实现可靠和稳定的通信。
[0003]现有技术的上位机和下位机的串口通信过程中,上位机每发完一帧指令,下位机则在规定时间内(若干毫秒)使用DMA (Direct Memory Access,直接内存访问)方式接收,对接收到的指令进行相关处理;并且在经过规定时间后进行DMA清零,即清除接收到的指令。其中,规定时间不可设置的太长,因为那样会影响上位机和下位机之间通信的实时性、通信速度及通信效率等。
[0004]但是,上位机在进行多任务处理时经常会影响发送指令的实时性,导致发送出来的指令的字节与字节间偶尔出现不确定时间的中断,由此不能在规定时间内将一帧指令发送完毕,此时,下位机则对该指令不予以处理或认为该指令是错误帧而直接进行DMA清零。最终导致上位机和下位机间的通信缺乏稳定性和可靠度。综上所述,现有技术中存在上位机与下位机之间的通信缺乏稳定性和可靠度的问题。
【发明内容】
[0005]本发明的目的是提供一种串口通信方法,以解决现有技术中上位机与下位机之间的通信缺乏稳定性和可靠度的问题。
[0006]为了实现上述目的,本发明提供如下技术方案:
[0007]一种串口通信方法,包括:
[0008]依次接收上位机发送的组成同一个指令的多个指令字节;
[0009]每接收一个指令字节,则判断所述指令的多个指令字节是否接收完毕,如果是,则将所述指令发送至主程序以供其对该指令进行处理,如果否,则等待接收该指令的下一个指令字节。
[0010]优选的,所述方法还包括:
[0011]每接收一个指令字节,则按照先入先出原则将所述指令字节加入至暂存器存储的具有一定长度的字节队列中,如果有字节从所述字节队列中溢出,则将溢出的字节移至指定存储器中。
[0012]优选的,所述方法还包括:
[0013]每接收一个指令字节,则判断该指令字节的地址码、功能码是否正确,如果是,则执行判断所述指令的多个指令字节是否接收完毕的步骤。
[0014]优选的,所述方法还包括:
[0015]如果所述指令字节的功能码和地址码正确,则将该指令字节取出并存储至指定存储器中。
[0016]优选的,所述方法还包括:
[0017]如果所述指令的多个指令字节接收完毕,则树校验标志。
[0018]优选的,所述方法还包括:
[0019]所述主程序接收所述指令,并对所述指令进行校验,如果校验成功,则对该指令进行预设处理;
[0020]如果校验不成功,则清空所述校验标志。
[0021]优选的,所述上位机对所述指令进行预设处理,包括:
[0022]所述主程序对所述指令进行数据解析、功能执行及指令恢复操作。
[0023]优选的,所述方法还包括:
[0024]所述主程序对所述指令进行预设处理后,清除所存储的所述指令。
[0025]本发明提供的一种串口通信方法,包括:依次接收上位机发送的组成同一个指令的多个指令字节;每接收一个指令字节,则判断所述指令的多个指令字节是否接收完毕,如果是,则将所述指令发送至主程序以供其对该指令进行处理,如果否,则等待接收该指令的下一个指令字节。与现有技术相比,本发明对上位机发送的指令的实时性无要求,即不设定【背景技术】中提到的规定时间,而是依次接收上位机发送的同一个指令的多个指令字节,并在接收到一个指令字节后,如果接收完毕,则将指令发送至主程序,否则,则继续等待接收该指令的下一个字节,从而解决了指令的字节与字节间可能存在时间间隔的问题,能够有效获取并识别上位机发送的指令,保证了上位机和下位机之间实现可靠和稳定的通信。
【附图说明】
[0026]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0027]图1为本发明实施例提供的一种串口通信方法的流程图;
[0028]图2为本发明实施例提供的一种串口通信方法中先入先出原则的示意图。
【具体实施方式】
[0029]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0030]本发明实施例提供的一种串口通信方法,可以包括:串口中端程序依次接收上位机发送的组成同一个指令的多个指令字节,并且每次接收到一个指令字节,都进行如图1所示的步骤,具体可以包括:
[0031]Sll:接收一个指令字节。
[0032]S12:判断所述指令的多个指令字节是否接收完毕,如果否,则执行步骤S13,如果是,则执行步骤S14。
[0033]S13:等待接收该指令的下一个指令字节,并在接收到该指令的下一个字节后,执行步骤S12。
[0034]S14:将所述指令发送至主程序以供其对该指令进行处理。
[0035]本发明对上位机发送的指令的实时性无要求,即不设定【背景技术】中提到的规定时间,而是依次接收上位机发送的同一个指令的多个指令字节,并在接收到一个指令字节后,如果接收完毕,则将指令发送至主程序,否则,则继续等待接收该指令的下一个字节,从而解决了指令的字节与字节间可能存在时间间隔的问题,能够有效获取并识别上位机发送的指令,保证了上位机和下位机之间实现可靠和稳定的通信。
[0036]需要说明的是,上述实施例提供的一种串口通信方法,判断所述指令的多个指令字节是否接收完毕的步骤是基
于MODBUS通信协议实现的。
[0037]本发明实施例提供的一种串口通信方法,还可以包括:
[0038]每接收一个指令字节,则按照先入先出原则将所述指令字节加入至暂存器存储的具有一定长度的字节队列中,如果有字节从所述字节队列中溢出,则将溢出的字节移至指定存储器中。
[0039]需要说明的是,先入先出原则是一种传统的按序执行方法,在本实施例中指的是,先进入字节列队的指令字节先溢出。举例说明该原则,如图2所示,假设字节队列最多可存储7个指令字节,且当其字节队列存储有7个指令字节,分别为O号字节、I号字节、2号字节、3号字节、4号字节、5号字节、6号字节,当接收到一个指令字节时,O号字节溢出,I号字节至6号字节均向前移动一个位置,即I号字节变成O号字节,2号字节变成I号字节,以此类推;则6号字节变成5号字节,其原本的位置是空的,此时,将接收到的指令字节放置在该空的位置上,成为6号字节。由此,能够保证字节队列中所包含的指令字节为最新的指令字节,方便对该指令字节进行相关处理。
[0040]本发明实施例提供的一种串口通信方法,还可以包括:
[0041]每接收一个指令字节,则判断该指令字节的地址码、功能码是否正确,如果是,则执行判断所述指令的多个指令字节是否接收完毕的步骤,同时将该指令字节取出并存储至指定存储器中。
[0042]如果接收到的指令字节的地址码和功能码均正确,则可树帧继续暂存标志,即表明继续接收下一个指令字节。且,将地址码和功能码均正确的指令取出并存储至指定存储器中,可保证下一个接收到的指令字节能够成功存储至暂存器,暂存器指针自加。由此,实现根据指令所包含的指令字节的个数实现对暂存器的冗余分配,确保有足够的暂存器能够实现相关存储工作。
[0043]另外,如果指令字节的地址码和功能码不正确,说明该指令与主程序并不对应,则可立即退出串口中端程序。
[0044]本发明实施例提供的一种串口通信方法,还可以包括:
[0045]如果所述指令的多个指令字节接收完毕,则树校验标志。
[0046]主程序只需实时监测校验位即可获知是否需要获取指令;即当检测到校验标志时,则获取指令,保证主程序能够及时获取指令。
[0047]本发明实施例提供的一种串口通信方法,还可以包括:
[0048]所述主程序接收所述指令,并对所述指令进行校验,如果校验成功,则对该指令进行预设处理;如果校验不成功,则清空所述校验标志。
[0049]清除校验标志,以避免后续工作中因校验标志的存在误判需要获取指令,进而错误的执行相关步骤。且,指令字节的个数越多,对指令进行校验占用的时间则越长,因此将校验指令的过程安排在主程序中执行,能够保障上位机发送的指令均能成功接收。另外,清空校验标志后可直接退出主程序。
[0050]其中,预设处理可以包括:对所述指令进行数据解析、功能执行及指令恢复操作。
[0051]另外,在主程序对所述指令进行预设处理后,可以清除所存储的所述指令,并且清零暂存器指针。由此,能够保证暂存器或者指定存储器始终拥有足够的空间实现后续的保存工作。
[0052]对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【主权项】
1.一种串口通信方法,其特征在于,包括: 依次接收上位机发送的组成同一个指令的多个指令字节; 每接收一个指令字节,则判断所述指令的多个指令字节是否接收完毕,如果是,则将所述指令发送至主程序以供其对该指令进行处理,如果否,则等待接收该指令的下一个指令子。2.根据权利要求1所述的方法,其特征在于,所述方法还包括: 每接收一个指令字节,则按照先入先出原则将所述指令字节加入至暂存器存储的具有一定长度的字节队列中,如果有字节从所述字节队列中溢出,则将溢出的字节移至指定存储器中。3.根据权利要求1所述的方法,其特征在于,所述方法还包括: 每接收一个指令字节,则判断该指令字节的地址码、功能码是否正确,如果是,则执行判断所述指令的多个指令字节是否接收完毕的步骤。4.根据权利要求3所述的方法,其特征在于,所述方法还包括: 如果所述指令字节的功能码和地址码正确,则将该指令字节取出并存储至指定存储器中。5.根据权利要求4所述的方法,其特征在于,所述方法还包括: 如果所述指令的多个指令字节接收完毕,则树校验标志。6.根据权利要求5所述的方法,其特征在于,所述方法还包括: 所述主程序接收所述指令,并对所述指令进行校验,如果校验成功,则对该指令进行预设处理; 如果校验不成功,则清空所述校验标志。7.根据权利要求6所述的方法,其特征在于,所述上位机对所述指令进行预设处理,包括: 所述主程序对所述指令进行数据解析、功能执行及指令恢复操作。8.根据权利要求6所述的方法,其特征在于,所述方法还包括: 所述主程序对所述指令进行预设处理后,清除所存储的所述指令。
【专利摘要】本发明公开了一种串口通信方法,包括:依次接收上位机发送的组成同一个指令的多个指令字节;每接收一个指令字节,则判断所述指令的多个指令字节是否接收完毕,如果是,则将所述指令发送至主程序以供其对该指令进行处理,如果否,则等待接收该指令的下一个指令字节。本发明对上位机发送的指令的实时性无要求,而是依次接收上位机发送的同一个指令的多个指令字节,并在接收到一个指令字节后,如果接收完毕,则将指令发送至主程序,否则,则继续等待接收该指令的下一个字节,从而解决了指令的字节与字节间可能存在时间间隔的问题,能够有效获取并识别上位机发送的指令,保证了上位机和下位机之间实现可靠和稳定的通信。
【IPC分类】G06F13/28, G06F13/42
【公开号】CN104881379
【申请号】CN201510362905
【发明人】张权, 邹雄伟, 蔡志
【申请人】力合科技(湖南)股份有限公司
【公开日】2015年9月2日
【申请日】2015年6月26日
转载请注明原文地址:https://www.famiwei.com/read-8138696.html