CN113438142B - 一种通信方法、通信系统及储物系统 - Google Patents
一种通信方法、通信系统及储物系统 Download PDFInfo
- Publication number
- CN113438142B CN113438142B CN202110695636.2A CN202110695636A CN113438142B CN 113438142 B CN113438142 B CN 113438142B CN 202110695636 A CN202110695636 A CN 202110695636A CN 113438142 B CN113438142 B CN 113438142B
- Authority
- CN
- China
- Prior art keywords
- data
- service
- message
- baud rate
- instruction
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/40—Bus networks
- H04L12/4013—Management of data rate on the bus
-
- G—PHYSICS
- G07—CHECKING-DEVICES
- G07F—COIN-FREED OR LIKE APPARATUS
- G07F17/00—Coin-freed apparatus for hiring articles; Coin-freed facilities or services
- G07F17/10—Coin-freed apparatus for hiring articles; Coin-freed facilities or services for means for safe-keeping of property, left temporarily, e.g. by fastening the property
- G07F17/12—Coin-freed apparatus for hiring articles; Coin-freed facilities or services for means for safe-keeping of property, left temporarily, e.g. by fastening the property comprising lockable containers, e.g. for accepting clothes to be cleaned
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Communication Control (AREA)
Abstract
本发明提供了一种通信方法、通信系统及储物系统,涉及通信技术领域。其中,所述方法应用于通信系统中的通信模块,所述通信系统包括至少两个所述通信模块,所述通信模块之间为串口通信连接,所述方法包括:接收业务结束指令;所述业务结束指令指示一次业务的数据传输过程结束;响应于所述业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程;其中,在同一次业务的数据传输过程中,不同的所述通信模块的波特率保持一致。在本发明实施例中,在每次业务的数据传输过程中可以采用不同的波特率,由于波特率是动态变化的,因此,提高了数据的破解难度,从而提高了串口通讯的数据安全性。
Description
技术领域
本发明涉及通信技术领域,特别是涉及一种通信方法、通信系统及储物系统。
背景技术
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式,串口通信方式使用的数据线少,在远距离通信中可以节约通信成本。串口通信基于外设和计算机之间的通信协议,通过该通信协议即可控制外设或获取外设的数据。
现有的串口通信方式,可以通过串口监听软件,将外设与计算机之间的串口通信协议全部监听出来,从而容易被人抄袭、仿造串口通信协议,外设产品也很容易就被他人控制,数据极易被截取分析,导致数据安全性较低。
发明内容
本发明提供一种通信方法、通信系统及储物系统,以解决现有的串口通信方式数据安全性低的问题。
为了解决上述问题,本发明公开了一种通信方法,应用于通信系统中的通信模块,所述通信系统包括至少两个所述通信模块,所述通信模块之间为串口通信连接,所述方法包括:
接收业务结束指令;所述业务结束指令指示一次业务的数据传输过程结束;
响应于所述业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程;
其中,在同一次业务的数据传输过程中,不同的所述通信模块的波特率保持一致。
可选地,所述接收业务结束指令,包括:
通过第一编程语言层接收业务结束指令;
所述响应于所述业务结束指令,对当前的波特率进行调整,包括:
响应于所述业务结束指令,调用第二编程语言层的第一函数;所述第一函数用于按照预存的波特率调整表,对当前的波特率进行调整;
其中,不同的所述通信模块中预存有相同的波特率调整表。
可选地,所述响应于所述业务结束指令,对当前的波特率进行调整之后,还包括:
在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第二函数;所述第二函数用于对所述原始数据进行封装,得到数据消息;对所述数据消息进行封装,得到至少一个数据帧;通过所述调整后的波特率,将所述至少一个数据帧发送至相应的所述通信模块;所述至少一个数据帧中的第一个数据帧的起始位包括消息起始分隔符,所述至少一个数据帧中的最后一个数据帧的结束位包括消息结束分隔符。
可选地,所述响应于所述业务结束指令,对当前的波特率进行调整之后,还包括:
在下一次业务开始时,调用第二编程语言层的第三函数;所述第三函数用于通过所述调整后的波特率,接收通过所述串口通信连接发送的数据帧;当在所述数据帧的起始位中识别出消息起始分隔符,且在所述消息起始分隔符所在的数据帧或之后的数据帧的结束位中识别出消息结束分隔符时,将所述消息起始分隔符与所述消息结束分隔符之间的数据帧确定为一个完整数据消息对应的目标数据帧,并执行第一过程;所述第一过程包括:对所述目标数据帧进行解封装,得到数据消息;对所述数据消息进行解封装,得到所述原始数据;
执行第二过程;所述第二过程包括:将所述原始数据传递至第一编程语言层;根据所述原始数据,通过所述第一编程语言层进行相应的操作。
可选地,所述响应于所述业务结束指令,对当前的波特率进行调整之后,还包括:
在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第四函数;所述第四函数用于对所述原始数据进行封装,得到数据消息;对所述数据消息进行封装,得到至少一个数据帧;通过所述调整后的波特率,将所述至少一个数据帧发送至相应的所述通信模块;所述数据消息包括消息头和消息体,所述消息头包括用于指示所述消息体的长度的目标字段。
可选地,所述响应于所述业务结束指令,对当前的波特率进行调整之后,还包括:
在下一次业务开始时,调用第二编程语言层的第五函数;所述第五函数用于通过所述调整后的波特率,接收通过所述串口通信连接发送的数据帧,并执行第三过程;所述第三过程包括:对接收的至少一个所述数据帧进行解封装,得到数据消息的消息头,以及所述数据消息的消息体;所述消息体满足所述目标字段所指示的长度;对所述数据消息进行解封装,得到所述原始数据;
执行第四过程;所述第四过程包括:将所述原始数据传递至第一编程语言层;根据所述原始数据,通过所述第一编程语言层进行相应的操作。
可选地,所述接收通过所述串口通信连接发送的数据帧,包括:
采用数据接收缓存数组接收通过所述串口通信连接发送的数据帧;
所述接收通过所述串口通信连接发送的数据帧之后,还包括:
将所述数据帧从所述数据接收缓存数组中读取至协议解析缓存数组;
从所述协议解析缓存数组中读取所述数据帧;
对读取出的所述数据帧执行协议解析操作;所述协议解析操作包括所述第一过程或所述第三过程;
将协议解析后得到的原始数据存入数据处理缓存数组;
从所述数据处理缓存数组中读取所述原始数据;
对读取出的所述原始数据执行处理操作;所述处理操作包括所述第二过程或所述第四过程。
可选地,所述至少两个通信模块包括主控制通信模块和至少一个从属通信模块,对于所述主控制通信模块,所述方法还包括:
接收密钥变更指令;
响应于所述密钥变更指令,根据所述主控制通信模块的硬件标识以及动态字符串,生成动态密钥并存储;
将所述动态密钥分别发送至每个所述从属通信模块,以使每个所述从属通信模块存储所述动态密钥。
可选地,所述对所述原始数据进行封装,得到数据消息,包括:
根据当前的动态密钥,对所述原始数据进行加密,得到数据密文;
对所述数据密文进行封装,得到数据消息。
可选地,所述对所述数据消息进行解封装,得到所述原始数据,包括:
对所述数据消息进行解封装,得到数据密文;
根据当前的动态密钥,对所述数据密文进行解密,得到所述原始数据。
可选地,所述第一编程语言层通过第一编程语言编写,所述第一编程语言为Java语言。
可选地,所述第二编程语言层通过第二编程语言编写,所述第二编程语言为C语言。
为了解决上述问题,本发明还公开了一种通信系统,包括至少两个通信模块,所述通信模块之间为串口通信连接;
所述通信模块,配置为接收业务结束指令;所述业务结束指令指示一次业务的数据传输过程结束;响应于所述业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程;
其中,在同一次业务的数据传输过程中,不同的所述通信模块的波特率保持一致。
为了解决上述问题,本发明还公开了一种储物系统,包括控制设备和储物设备,所述控制设备包括主板卡,所述储物设备包括单片机、多个储物柜、与所述储物柜一一对应的副板卡,以及与所述储物柜一一对应的电子锁,所述系统包括至少两个通信模块,所述通信模块之间为串口通信连接,所述至少两个通信模块包括所述主板卡、所述单片机和所述副板卡,所述主板卡与所述单片机之间为所述串口通信连接,所述主板卡与所述副板卡之间为所述串口通信连接,所述单片机与所述电子锁连接;
所述主板卡,配置为接收储物指令;响应于所述储物指令,向所述单片机发送需打开的所述储物柜对应的所述电子锁的第一开启指令;
所述单片机,配置为接收所述第一开启指令;响应于所述第一开启指令,开启对应的所述电子锁,以完成储物;
所述副板卡,配置为接收取物指令;所述取物指令携带有需取出物品的所述储物柜的取物码;响应于所述取物指令,向所述主板卡发送所述取物码;
所述主板卡,还配置为接收所述取物码;当对所述取物码的验证通过时,向所述单片机发送所述储物柜对应的所述电子锁的第二开启指令;
所述单片机,还配置为接收所述第二开启指令;响应于所述第二开启指令,开启对应的所述电子锁,以完成取物;
所述单片机,还配置为在完成取物后检测到所述电子锁关闭时,接收业务结束指令,并将所述业务结束指令发送至所述主板卡;所述业务结束指令指示一次业务的数据传输过程结束;
所述主板卡,还配置为接收所述业务结束指令,并将所述业务结束指令发送至所述副板卡;
所述副板卡,还配置为接收所述业务结束指令;
所述主板卡、所述单片机和所述副板卡,还配置为响应于所述业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程;其中,在同一次业务的数据传输过程中,所述主板卡、所述单片机和所述副板卡的波特率保持一致。
可选地,所述至少两个通信模块包括主控制通信模块和至少一个从属通信模块,所述主板卡为所述主控制通信模块,所述单片机和所述副板卡为所述从属通信模块;
所述主板卡,还被配置为接收密钥变更指令;响应于所述密钥变更指令,根据所述主板卡的硬件标识以及动态字符串,生成动态公钥和动态私钥并存储;将所述动态私钥分别发送至所述单片机和所述副板卡,以使所述单片机和所述副板卡存储所述动态私钥。
与现有技术相比,本发明包括以下优点:
在本发明实施例中,对于通信系统中进行串口通信的通信模块,在接收到指示一次业务的数据传输过程结束的业务结束指令时,响应于该业务结束指令,可以对当前的波特率进行调整,调整后的波特率用于下一次业务的数据传输过程。其中,在同一次业务的数据传输过程中,通信系统中不同的通信模块的波特率保持一致。在本发明实施例中,在每次业务的数据传输过程中可以采用不同的波特率,由于波特率是动态变化的,因此,提高了数据的破解难度,从而提高了串口通讯的数据安全性。
附图说明
图1示出了本发明实施例一的一种通信方法的步骤流程图;
图2示出了本发明实施例一的一种通信系统的结构框图;
图3示出了本发明实施例一的一种串口通讯协议的数据帧格式;
图4示出了本发明实施例一的一种生成密钥、数据加密和数据解密过程的示意图;
图5示出了本发明实施例三的一种储物系统的结构框图;
图6示出了本发明实施例三的一种存餐取餐系统的结构框图;
图7示出了本发明实施例三的一种主控制通信模块向从属通信模块发送数据的协议格式;
图8示出了本发明实施例三的一种从属通信模块向主控制通信模块发送数据的协议格式。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
实施例一
图1示出了本发明实施例一的一种通信方法的步骤流程图,该方法应用于通信系统中的通信模块,如图2所示,通信系统100包括至少两个通信模块20,通信模块20之间为串口通信连接,该方法包括以下步骤:
步骤101:接收业务结束指令;业务结束指令指示一次业务的数据传输过程结束。
在本发明实施例中,当一次业务完全结束后,每个通信模块可以接收到业务结束指令,其中,根据每个通信模块在实际业务中的具体用途,不同通信模块接收业务结束指令的方式也会有所不同,例如有的通信模块可以基于用户触发的业务结束操作,得到业务结束指令,还有的通信模块可以接收其他通信模块转发的业务结束指令,本发明实施例对此不作具体限定。
具体地,步骤101可以包括:通过第一编程语言层接收业务结束指令。
其中,业务结束指令可以在应用层进行接收,应用层可以属于第一编程语言所编写的第一编程语言层,也即接收业务结束指令的操作可以通过第一编程语言实现。
步骤102:响应于业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程。其中,在同一次业务的数据传输过程中,不同的通信模块的波特率保持一致。
其中,波特率表示每秒钟传送的码元符号的数量,是衡量数据传送速率的指标。
在本步骤中,每个通信模块响应于接收到的业务结束指令,可以对用于串口通讯的当前的波特率进行调整,调整后的波特率可用于基于串口通讯的下一次业务的数据传输过程。在同一次业务的数据传输过程中,不同的通信模块的波特率可以保持一致,也即是每次业务结束后,每个通信模块都会将自身的波特率进行调整,调整后的波特率与进行上一次业务时的波特率不同。
现假设作为接收方的通信模块以9600bps的波特率进行数据接收,作为发送方的通信模块分别以19200bps、9600bps、4800bps、2400bps和1800bps向接收方发送回车符(回车符的二进制数为00001101,ASCII值为0x0D,串口通信时附加一个起始位0和结束位1),接收方所接收到的二进制位序列如下表1中的第二列所示,将接收到的二进制位序列表示成字节方式,如表1中的第三列所示。
表1
波特率(bps) | 接收到的二进制位序列 | 字节表示 |
19200 | 0 1 0 1 1 0 0 0 0 1 1 1 1 1 1 11 1 1 1 | 0xF? |
9600 | 0 1 0 1 1 0 0 0 0 1 | 0x0D |
4800 | 0 0 1 1 0 0 1 1 1 1 0 0 0 0 0 00 0 1 1 | 0xE6 |
2400 | 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 | 0x78 |
参照上述表1可知,波特率不同,数据的传输的二进制形式不同,解析结果也不同。
在本发明实施例中,在每次业务的数据传输过程中可以采用不同的波特率,即使某次数据传输过程的波特率被破解,但由于波特率是动态变化的,因此,当数据被截获后,根据破解得到的波特率,也无法分析出每次业务所传输的数据,从而提高了串口通讯的数据安全性。
具体地,步骤102可以通过下述方式实现,包括:响应于业务结束指令,调用第二编程语言层的第一函数;第一函数用于按照预存的波特率调整表,对当前的波特率进行调整;其中,不同的通信模块中预存有相同的波特率调整表。
其中,对当前的波特率进行调整的步骤可以通过第二编程语言所编写的第二编程语言层的第一函数实现。每个通信模块中可以预存有相同的波特率调整表,该波特率调整表中可以包括至少两个波特率,通信模块可以按照波特率调整表中的波特率顺序,将当前波特率的下一个波特率作为新的波特率,进而根据新的波特率,调整相关的配置。
可选地,在步骤102之后,对于数据传输过程中作为数据发送方的通信模块,还可以进行数据发送过程,对于数据传输过程中作为数据接收方的通信模块,还可以进行数据接收过程。
对于串口通讯,例如RS232、RS485、RS422等典型的串口标准通讯协议,只是定义了部分物理层,对于数据链路层等基本没有涉及,这也就体现了串口通讯协议的灵活性,没有统一的标准,使用者可以自定义合适的协议来传输自己的数据。
在一种可选的实现方式中,参照图3,示出了一种串口通讯协议的数据帧格式的定义,数据帧可以包括起始位,数据域,校验域和结束位。其中,起始位表示一帧数据包(即一个数据帧)的起始;结束位表示一帧数据包的结束;数据域包括实际需要发送的数据;校验域包括校验值,用于保证数据传输的正确性,在实际应用中,可以采用CRC校验方式(CyclicRedundancy Check,循环冗余校验码)、奇偶校验方式等,本发明实施例对此不作具体限定。其中,数据域的内容也可根据业务需求自定义。在具体应用中,数据帧格式中还可以包括包长(指示一帧数据包的总长度)、数据类型(例如业务数据、管理数据)等,可根据实际需求进行定义。
在实际的封装过程中,基于串口通讯机制,一个较大的数据消息会被拆分为两个以上的数据帧,也即进行拆包(也可称分包),相应的,由于波特率不同或者数据长度的不同,就会引发接收的数据无法满足消息的需要,也即一次接收的数据不能体现一个完整的数据消息,从而在接收数据时导致粘包的问题出现。
在本发明实施例中,可以通过制定应用层的数据通讯协议,处理粘包/拆包问题,从而通过协议来规范接收的数据是否满足数据消息的需要。具体地,自定义的协议可以通过以下两种方式解决粘包/拆包问题,包括:
方式一:发送方在一个完整数据消息的起始数据帧的起始位,以及结束数据帧结束位分别添加特殊分隔符,接收方通过特殊分隔符来区分一个完整数据消息对应的数据帧。
方式二:数据消息分为消息头和消息体,消息头中定义表示消息体长度的字段,接收方通过该字段解析出满足该长度的数据,即得到一个完整的数据消息。
对于上述方式一,数据发送过程具体可以包括:
步骤103:在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第二函数;第二函数用于对原始数据进行封装,得到数据消息;对数据消息进行封装,得到至少一个数据帧;通过调整后的波特率,将至少一个数据帧发送至相应的通信模块;至少一个数据帧中的第一个数据帧的起始位包括消息起始分隔符,至少一个数据帧中的最后一个数据帧的结束位包括消息结束分隔符。
其中,在开始进行下一次业务时,在数据传输过程中作为发送方的通信模块可以在第一编程语言层获取待发送的原始数据,例如验证码、手机号等,然后通过第一编程语言层调用第二编程语言层的第二函数,对原始数据进行处理。具体地,通过第二函数,可以将原始数据封装为数据消息,进而将数据消息封装为至少一个数据帧。
在封装过程中,可以在该至少一个数据帧中的第一个数据帧的起始位添加消息起始分隔符,在最后一个数据帧的结束位添加消息结束分隔符,其中,消息起始分隔符和消息结束分隔符可以是自定义的特殊分隔符,接收方可以根据添加的特殊分隔符,从接收到的数据帧中,区分出对应一个完整数据消息的数据帧。作为发送方的通信模块,可以通过调整后的波特率,将对应一个完整数据消息的数据帧发送至作为接收方的通信模块。
对于上述方式一,数据接收过程具体可以包括:
步骤104:在下一次业务开始时,调用第二编程语言层的第三函数;第三函数用于通过调整后的波特率,接收通过串口通信连接发送的数据帧;当在数据帧的起始位中识别出消息起始分隔符,且在消息起始分隔符所在的数据帧或之后的数据帧的结束位中识别出消息结束分隔符时,将消息起始分隔符与消息结束分隔符之间的数据帧确定为一个完整数据消息对应的目标数据帧,并执行第一过程;第一过程包括:对目标数据帧进行解封装,得到数据消息;对数据消息进行解封装,得到原始数据。
步骤105:执行第二过程;第二过程包括:将原始数据传递至第一编程语言层;根据原始数据,通过第一编程语言层进行相应的操作。
其中,在开始进行下一次业务时,在数据传输过程中作为接收方的通信模块可以通过第二编程语言层的第三函数,通过调整后的波特率,接收通过串口通信连接发送的数据帧,每接收到一个数据帧,便可以对其进行解析。消息起始分隔符的起始位与消息结束分隔符之间的目标数据帧,可以解析出一个完整数据消息,对目标数据帧进行解封装,便可得到一个完整的数据消息,进而对数据消息进行解封装,可以得到原始数据。之后,可以将原始数据传递至第一编程语言层,并在第一编程语言层进行相应的操作。
在本发明实施例中,发送方通信模块可以在一个完整数据消息的起始数据帧的起始位,以及结束数据帧结束位分别添加特殊分隔符,接收方通信模块可以通过特殊分隔符来区分一个完整数据消息对应的数据帧,如此,可以解决数据传输过程中的粘包/拆包问题,使得数据能够被正确解析。
对于上述方式二,数据发送过程具体可以包括:
步骤106:在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第四函数;第四函数用于对原始数据进行封装,得到数据消息;对数据消息进行封装,得到至少一个数据帧;通过调整后的波特率,将至少一个数据帧发送至相应的通信模块;数据消息包括消息头和消息体,消息头包括用于指示消息体的长度的目标字段。
其中,在开始进行下一次业务时,在数据传输过程中作为发送方的通信模块可以在第一编程语言层获取待发送的原始数据,然后通过第一编程语言层调用第二编程语言层的第四函数,对原始数据进行处理。具体地,通过第四函数,可以将原始数据封装为数据消息。
数据消息可以包括消息头和消息体,在封装过程中,可以将消息体的(字节)长度写入消息头中的目标字段。目标字段可以是自定义的特殊分隔符,接收方可以根据目标字段中的消息体长度,从解封装得到的各个消息体中,区分出对应一个完整数据消息的消息体。
作为发送方的通信模块,可以进一步将数据消息封装为至少一个数据帧,并通过调整后的波特率,将对应一个完整数据消息的数据帧发送至作为接收方的通信模块。
对于上述方式二,数据接收过程具体可以包括:
步骤107:在下一次业务开始时,调用第二编程语言层的第五函数;第五函数用于通过调整后的波特率,接收通过串口通信连接发送的数据帧,并执行第三过程;第三过程包括:对接收的至少一个数据帧进行解封装,得到数据消息的消息头,以及数据消息的消息体;消息体满足目标字段所指示的长度;对数据消息进行解封装,得到原始数据。
步骤108:执行第四过程;第四过程包括:将原始数据传递至第一编程语言层;根据原始数据,通过第一编程语言层进行相应的操作。
其中,在开始进行下一次业务时,在数据传输过程中作为接收方的通信模块可以通过第二编程语言层的第五函数,通过调整后的波特率,接收通过串口通信连接发送的数据帧,每接收到一个数据帧,便可以对其进行解析。首先,可以解析得到数据消息的消息头,假如消息头中的目标字段所指示的消息体长度为L,若当前数据帧解析出的消息体长度小于L,则继续对下一个数据帧进行解析,直至解析出L个字节,即得到一个完整数据消息的消息体,进而对一个完整的数据消息进行解封装,可以得到原始数据。之后,可以将原始数据传递至第一编程语言层,并在第一编程语言层进行相应的操作。
在本发明实施例中,发送方通信模块可以在数据消息的消息头的目标字段中写入消息体长度,接收方通信模块可以通过目标字段解析出满足该长度的消息体,得到一个完整的数据消息,如此,可以解决数据传输过程中的粘包/拆包问题,使得数据能够被正确解析。
此外,上述两种解决粘包/拆包问题的方式,可以适应于不定长的数据传输,对数据的要求更低。
进一步可选地,在上述步骤105或107中,接收通过串口通信连接发送的数据帧的步骤,具体可以包括:
采用数据接收缓存数组接收通过串口通信连接发送的数据帧;
相应的,在接收通过串口通信连接发送的数据帧的步骤之后,还可以包括以下步骤:
将数据帧从数据接收缓存数组中读取至协议解析缓存数组;
从协议解析缓存数组中读取数据帧;
对读取出的数据帧执行协议解析操作;协议解析操作包括上述的第一过程或第三过程;
将协议解析后得到的原始数据存入数据处理缓存数组;
从数据处理缓存数组中读取原始数据;
对读取出的原始数据执行处理操作;处理操作包括上述的第二过程或第四过程。
在具体应用中,串口数据可以通过串口中断进行接收,但是,在中断中是不能运行占时间的处理程序的,所以,协议解析和数据处理的步骤不能放在串口中断中进行,而是需要等到串口接收完成之后,再跳转到相关的函数进行处理。在串口中断中,可以先将数据帧收进数据接收缓存数组,同时设置标志位,用于标识一个完整数据消息对应的数据帧,然后再另开线程,通过判断标志位的方法,去处理接收进来的数据帧。
接收数据和协议解析不要使用同一个数组,因为串口中断接收与协议解析,几乎是同时正在进行的两个任务,如果使用同一个数组,会导致数据读写出错。同理,协议解析与数据处理也不要使用一个数组。可选地,可以在数据传入数组之后,做一个判断,判断后一个数组是否已经完全拷贝成功,确保数据传入成功后,再对当前数组进行清零,释放内存。
具体地,接收数据、协议解析和数据处理可以通过不同的数组进行数据读写,接收的数据先写入数据接收缓存数组,进而再写入协议解析缓存数组中,以待进行协议解析,此时,空出的数据接收缓存数组可以继续接收新的数据。当需要对数据进行解析时,从协议解析缓存数组中读取数据帧,并对读取出的数据帧执行协议解析操作。解析后的数据再写入数据处理缓存数组中,以待进行数据处理,此时,空出的协议解析缓存数组可以继续写入新的待解析的数据。当需要对数据进行处理时,从数据处理缓存数组中读取数据,并对读取出的数据执行处理操作。
其中,协议解析操作包括上述的第一过程或第三过程,也即包括解封装过程;处理操作包括上述的第二过程或第四过程。
可选地,上述的数据接收缓存数组、协议解析缓存数组和数据处理缓存数组均可以是FIFO(First Input First Output,先进先出)队列。
在本发明实施例中,通过不同的数组分别进行接收数据、协议解析和数据处理,从而可以使接收数据、协议解析和数据处理的过程同时进行,也即对第一个数据进行处理同时,可以对第二个数据进行协议解析,以及对第三个数据进行接收,而无需在一个数据依次经过接收、协议解析、处理后,才能进行下一个数据的接收,因此,提高了通信数据的处理效率。
进一步可选地,在通信系统中,至少两个通信模块可以包括主控制通信模块和至少一个从属通信模块,对于主控制通信模块,参照图4,该方法还可以包括密钥生成过程:
接收密钥变更指令;
响应于密钥变更指令,根据主控制通信模块的硬件标识以及动态字符串,生成动态密钥并存储;
将动态密钥分别发送至每个从属通信模块,以使每个从属通信模块存储动态密钥。
其中,当主控制通信模块接收到密钥变更指令时,可以根据自身的硬件标识,以及动态字符串,生成动态密钥并存储。其中,主控制通信模块唯一的硬件标识可以使从属通信模块受控于唯一的主控制通信模块。动态字符串可以是自定义的字符串,每次变更密钥所需的字符串可以不同,因此,字符串是动态变化的,相应的,基于动态变化的字符串所生成的密钥也是不同的。
主控制通信模块可以将生成的动态密钥分别发送至每个从属通信模块,以使每个从属通信模块存储动态密钥。对于对称加密方式,动态密钥既可用于主控制通信模块进行数据加密,也可用于从属通信模块进行数据解密,对于非对称加密方式,动态密钥包括公钥和私钥,公钥可用于主控制通信模块进行数据加密,私钥可用于从属通信模块进行数据解密。
在一种可选的实施例中,主控制通信模块的硬件标识可以是主控制通信模块的MAC(Media Access Control Address,媒体访问控制)地址。
相应的,在步骤103或106中,对原始数据进行封装,得到数据消息的步骤,具体可以包括数据加密过程:根据当前的动态密钥,对原始数据进行加密,得到数据密文;对数据密文进行封装,得到数据消息。
参照图4,发送方通信模块可以将当前的动态密钥作为加密密钥,通过MD5(Message-Digest Algorithm,信息摘要算法)、AES(Advanced Encryption Standard,高级加密标准)、DES(Data Encryption Standard,数据加密标准)等加密算法,对原始数据进行加密,生成数据密文,并经过一系列处理后发送至接收方通信模块。对于非对称加密方式,加密密钥为公钥。
相应的,在步骤104或107中,对数据消息进行解封装,得到原始数据的步骤,具体可以包括数据解密过程:对数据消息进行解封装,得到数据密文;根据当前的动态密钥,对数据密文进行解密,得到所述原始数据。
参照图4,接收方通信模块接收到数据后,经过一系列处理后得到数据消息,进而对数据消息进行解封装,得到数据密文,接收方通信模块可以将当前的动态密钥作为解密密钥,通过解密算法,对数据密文进行解密,得到原始数据,并根据原始数据进行相应操作。对于对称加密方式,解密算法为加密算法的逆算法。对于非对称加密方式,解密密钥为私钥。
在本发明实施例中,还可选地,第一编程语言层通过第一编程语言编写,第一编程语言为Java语言。
还可选地,第二编程语言层通过第二编程语言编写,第二编程语言为C语言。
在实际应用中,第一编程语言层可以通过Java语言编写,第二编程语言层可以通过C语言编写,因此,第一编程语言层可以通过JNI(Java Native Interface,Java原生接口)层调用第二编程语言层所封装的库函数,以实现数据解析、数据加密、数据解密等过程,其中,JNI层可以实现Java代码和C代码之间的交互。相应的,上述的第一函数、第二函数、第三函数、第四函数和第五函数,均可以是封装的C语言库函数。
在本发明实施例中,通过将数据解析、数据加密、数据解密等自定义协议封装到JNI层,进而可以通过封装的库函数实现数据解析、数据加密、数据解密等过程。另外,数据帧的自定义格式也封装到JNI层,在C语言实现中,可以将数据帧定义为一个结构体。如此,增加了通信程序被反编译的难度,提高了数据的安全性。
当然,在本发明实施例中,第一编程语言和第二编程语言也可以为同一种编程语言,如此,则不存在跨编程语言层的函数调用,可以节约通信程序的开发成本。
在本发明实施例中,对于通信系统中进行串口通信的通信模块,在接收到指示一次业务的数据传输过程结束的业务结束指令时,响应于该业务结束指令,可以对当前的波特率进行调整,调整后的波特率用于下一次业务的数据传输过程。其中,在同一次业务的数据传输过程中,通信系统中不同的通信模块的波特率保持一致。在本发明实施例中,在每次业务的数据传输过程中可以采用不同的波特率,由于波特率是动态变化的,因此,提高了数据的破解难度,从而提高了串口通讯的数据安全性。
实施例二
本发明实施例还公开了一种通信系统,包括至少两个通信模块,所述通信模块之间为串口通信连接;
所述通信模块,配置为接收业务结束指令;所述业务结束指令指示一次业务的数据传输过程结束;响应于所述业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程;
其中,在同一次业务的数据传输过程中,不同的所述通信模块的波特率保持一致。
可选地,所述通信模块,具体配置为:
通过第一编程语言层接收业务结束指令;
所述响应于所述业务结束指令,对当前的波特率进行调整,包括:
响应于所述业务结束指令,调用第二编程语言层的第一函数;所述第一函数用于按照预存的波特率调整表,对当前的波特率进行调整;
其中,不同的所述通信模块中预存有相同的波特率调整表。
可选地,所述通信模块,还配置为:
在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第二函数;所述第二函数用于对所述原始数据进行封装,得到数据消息;对所述数据消息进行封装,得到至少一个数据帧;通过所述调整后的波特率,将所述至少一个数据帧发送至相应的所述通信模块;所述至少一个数据帧中的第一个数据帧的起始位包括消息起始分隔符,所述至少一个数据帧中的最后一个数据帧的结束位包括消息结束分隔符。
可选地,所述通信模块,还配置为:
在下一次业务开始时,调用第二编程语言层的第三函数;所述第三函数用于通过所述调整后的波特率,接收通过所述串口通信连接发送的数据帧;当在所述数据帧的起始位中识别出消息起始分隔符,且在所述消息起始分隔符所在的数据帧或之后的数据帧的结束位中识别出消息结束分隔符时,将所述消息起始分隔符与所述消息结束分隔符之间的数据帧确定为一个完整数据消息对应的目标数据帧,并执行第一过程;所述第一过程包括:对所述目标数据帧进行解封装,得到数据消息;对所述数据消息进行解封装,得到所述原始数据;
执行第二过程;所述第二过程包括:将所述原始数据传递至第一编程语言层;根据所述原始数据,通过所述第一编程语言层进行相应的操作。
可选地,所述通信模块,还配置为:
在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第四函数;所述第四函数用于对所述原始数据进行封装,得到数据消息;对所述数据消息进行封装,得到至少一个数据帧;通过所述调整后的波特率,将所述至少一个数据帧发送至相应的所述通信模块;所述数据消息包括消息头和消息体,所述消息头包括用于指示所述消息体的长度的目标字段。
可选地,所述通信模块,还配置为:
在下一次业务开始时,调用第二编程语言层的第五函数;所述第五函数用于通过所述调整后的波特率,接收通过所述串口通信连接发送的数据帧,并执行第三过程;所述第三过程包括:对接收的至少一个所述数据帧进行解封装,得到数据消息的消息头,以及所述数据消息的消息体;所述消息体满足所述目标字段所指示的长度;对所述数据消息进行解封装,得到所述原始数据;
执行第四过程;所述第四过程包括:将所述原始数据传递至第一编程语言层;根据所述原始数据,通过所述第一编程语言层进行相应的操作。
可选地,所述通信模块,具体配置为:
采用数据接收缓存数组接收通过所述串口通信连接发送的数据帧;
所述通信模块,还配置为:
将所述数据帧从所述数据接收缓存数组中读取至协议解析缓存数组;
从所述协议解析缓存数组中读取所述数据帧;
对读取出的所述数据帧执行协议解析操作;所述协议解析操作包括所述第一过程或所述第三过程;
将协议解析后得到的原始数据存入数据处理缓存数组;
从所述数据处理缓存数组中读取所述原始数据;
对读取出的所述原始数据执行处理操作;所述处理操作包括所述第二过程或所述第四过程。
可选地,所述至少两个通信模块包括主控制通信模块和至少一个从属通信模块,对于所述主控制通信模块,所述主控制通信模块,配置为:
接收密钥变更指令;
响应于所述密钥变更指令,根据所述主控制通信模块的硬件标识以及动态字符串,生成动态密钥并存储;
将所述动态密钥分别发送至每个所述从属通信模块,以使每个所述从属通信模块存储所述动态密钥。
可选地,所述通信模块,具体配置为:
根据当前的动态密钥,对所述原始数据进行加密,得到数据密文;
对所述数据密文进行封装,得到数据消息。
可选地,所述通信模块,具体配置为:
对所述数据消息进行解封装,得到数据密文;
根据当前的动态密钥,对所述数据密文进行解密,得到所述原始数据。
可选地,所述第一编程语言层通过第一编程语言编写,所述第一编程语言为Java语言。
可选地,所述第二编程语言层通过第二编程语言编写,所述第二编程语言为C语言。
在本发明实施例中,对于通信系统中进行串口通信的通信模块,在接收到指示一次业务的数据传输过程结束的业务结束指令时,响应于该业务结束指令,可以对当前的波特率进行调整,调整后的波特率用于下一次业务的数据传输过程。其中,在同一次业务的数据传输过程中,通信系统中不同的通信模块的波特率保持一致。在本发明实施例中,在每次业务的数据传输过程中可以采用不同的波特率,由于波特率是动态变化的,因此,提高了数据的破解难度,从而提高了串口通讯的数据安全性。
实施例三
参照图5,示出了本发明实施例三的一种储物系统的结构框图,该系统500包括控制设备510和储物设备520,控制设备510包括主板卡511,储物设备520包括单片机521、多个储物柜522、与储物柜522一一对应的副板卡523,以及与储物柜522一一对应的电子锁524,系统包括至少两个通信模块,通信模块之间为串口通信连接,至少两个通信模块包括主板卡511、单片机521和副板卡523,主板卡511与单片机521之间为串口通信连接,主板卡511与副板卡523之间为串口通信连接,单片机521与电子锁524连接;
主板卡511,配置为接收储物指令;响应于储物指令,向单片机521发送需打开的储物柜522对应的电子锁524的第一开启指令;
单片机521,配置为接收第一开启指令;响应于第一开启指令,开启对应的电子锁524,以完成储物;
副板卡523,配置为接收取物指令;取物指令携带有需取出物品的储物柜的取物码;响应于取物指令,向主板卡511发送取物码;
主板卡511,还配置为接收取物码;当对取物码的验证通过时,向单片机521发送储物柜522对应的电子锁524的第二开启指令;
单片机521,还配置为接收第二开启指令;响应于第二开启指令,开启对应的电子锁524,以完成取物;
单片机521,还配置为在完成取物后检测到电子锁524关闭时,接收业务结束指令,并将业务结束指令发送至主板卡511;业务结束指令指示一次业务的数据传输过程结束;
主板卡511,还配置为接收业务结束指令,并将业务结束指令发送至副板卡523;
副板卡523,还配置为接收业务结束指令;
主板卡511、单片机521和副板卡523,还配置为响应于业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程;其中,在同一次业务的数据传输过程中,主板卡511、单片机521和副板卡523的波特率保持一致。
在本发明实施例中,业务具体可以是储物取物业务,完成一次储物,一次取物则为完成一次业务。储物系统500进行一次储物取物业务,主要可以包括三个阶段,即储物阶段、取物阶段和波特率调整阶段,以下将对这三个阶段进行介绍。
在储物阶段,可以通过主板卡511接收储物指令,若需要打开指定的储物柜522,则该储物指令可携带指定储物柜522的标识,响应于该储物指令,主板卡511可以向单片机521发送需打开的储物柜522对应的电子锁524的第一开启指令,单片机521进而可以控制对应的电子锁524开启。若不需要打开指定的储物柜522,则单片机521可以随机选择一个未存放物品的储物柜522。电子锁524开启之后,对应的储物柜522的柜门打开,进而储物人员可以将需要存放的物品放入储物柜522中,并关闭柜门,从而使电子锁524关闭,完成储物。
在取物阶段,可以通过与存放物品的储物柜522对应的副板卡523接收取物指令,该取物指令可携带需打开进行物品取出的储物柜522所对应的取物码。进而可以对该取物码进行验证,当该取物码与之前生成的取物码一致时,验证通过,进而主板卡511可以向单片机521发送第二开启指令,以使单片机521控制存放物品的储物柜522所对应的电子锁524开启。电子锁524开启之后,对应的储物柜522的柜门打开,进而取物人员可以将物品取出,并关闭柜门,从而使电子锁524关闭,完成取物。
对于取物码的生成,在一种可选的方式中,在完成储物后,可以由主板卡511将存放物品的储物柜522的标识等信息上传服务器,例如云服务器等,然后由服务器生成取物码,并将取物码通过短信、应用消息等方式通知取物人员,进而取物人员将取物码输入存放物品的储物柜522所对应的副板卡523,从而触发取物指令。
对于取物码的生成,在另一种可选的方式中,服务器生成取物码之后,可以将取物码发送给主板卡511,然后由相关人员(例如储物人员)通过控制设备510查看后告知取物人员,进而取物人员将取物码输入存放物品的储物柜522所对应的副板卡523,从而触发取物指令。
对于取物码的验证,在一种可选的方式中,可以由主板卡511进行取物码的验证。
对于取物码的验证,在另一种可选的方式中,可以由服务器进行取物码的验证。
在波特率调整阶段,单片机521在完成取物后检测到电子锁524关闭时,可以接收到业务结束指令,表示本次储物取物业务的数据传输过程结束,并可以将业务结束指令发送至主板卡511,主板卡511再发送至各个副板卡523。至此,单片机521、主板卡511和副板卡523均接收到了业务结束指令。在每次业务结束后,主板卡511、单片机521和副板卡523均可以对各自当前的波特率进行调整,主板卡511、单片机521和副板卡523调整后的波特率保持一致。在进行下一次储物取物业务时,主板卡511、单片机521和副板卡523均采用调整后的波特率进行数据传输。由于每次业务的波特率是动态变化的,因此,提高了数据的破解难度,从而提高了串口通讯的数据安全性。
其中,每次储物取物业务中所传输的数据,包括但不限于上述的储物指令、第一开启指令、取物指令、取物码、第二开启指令、业务结束指令等业务指令或业务数据,以及一些常规的管理指令或管理数据,本发明实施例对此不作具体限定。
在上述储物系统500中,主板卡511、单片机521和副板卡523均可以在不同的阶段或步骤中,作为数据传输过程中的发送方或接收方。相应的,对于一次储物取物业务、以及一次储物取物业务中所传输的数据,储物系统500还可以实现下述功能。
可选地,主板卡511、单片机521和副板卡523,具体配置为:
通过第一编程语言层接收业务结束指令;
响应于业务结束指令,对当前的波特率进行调整,包括:
响应于业务结束指令,调用第二编程语言层的第一函数;第一函数用于按照预存的波特率调整表,对当前的波特率进行调整;
其中,主板卡511、单片机521和副板卡523中预存有相同的波特率调整表。
可选地,作为发送方时,主板卡511、单片机521和副板卡523,还配置为:
在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第二函数;第二函数用于对原始数据进行封装,得到数据消息;对数据消息进行封装,得到至少一个数据帧;通过调整后的波特率,将至少一个数据帧发送至相应的通信模块;至少一个数据帧中的第一个数据帧的起始位包括消息起始分隔符,至少一个数据帧中的最后一个数据帧的结束位包括消息结束分隔符。
可选地,作为接收方时,主板卡511、单片机521和副板卡523,还配置为:
在下一次业务开始时,调用第二编程语言层的第三函数;第三函数用于通过调整后的波特率,接收通过串口通信连接发送的数据帧;当在数据帧的起始位中识别出消息起始分隔符,且在消息起始分隔符所在的数据帧或之后的数据帧的结束位中识别出消息结束分隔符时,将消息起始分隔符与消息结束分隔符之间的数据帧确定为一个完整数据消息对应的目标数据帧,并执行第一过程;第一过程包括:对目标数据帧进行解封装,得到数据消息;对数据消息进行解封装,得到原始数据;
执行第二过程;第二过程包括:将原始数据传递至第一编程语言层;根据原始数据,通过第一编程语言层进行相应的操作。
可选地,作为发送方时,主板卡511、单片机521和副板卡523,还配置为:
在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第四函数;第四函数用于对原始数据进行封装,得到数据消息;对数据消息进行封装,得到至少一个数据帧;通过调整后的波特率,将至少一个数据帧发送至相应的通信模块;数据消息包括消息头和消息体,消息头包括用于指示消息体的长度的目标字段。
可选地,作为接收方时,主板卡511、单片机521和副板卡523,还配置为:
在下一次业务开始时,调用第二编程语言层的第五函数;第五函数用于通过调整后的波特率,接收通过串口通信连接发送的数据帧,并执行第三过程;第三过程包括:对接收的至少一个数据帧进行解封装,得到数据消息的消息头,以及数据消息的消息体;消息体满足目标字段所指示的长度;对数据消息进行解封装,得到原始数据;
执行第四过程;第四过程包括:将原始数据传递至第一编程语言层;根据原始数据,通过第一编程语言层进行相应的操作。
可选地,作为接收方时,主板卡511、单片机521和副板卡523,具体配置为:
采用数据接收缓存数组接收通过串口通信连接发送的数据帧;
通信模块,还配置为:
将数据帧从数据接收缓存数组中读取至协议解析缓存数组;
从协议解析缓存数组中读取数据帧;
对读取出的数据帧执行协议解析操作;协议解析操作包括第一过程或第三过程;
将协议解析后得到的原始数据存入数据处理缓存数组;
从数据处理缓存数组中读取原始数据;
对读取出的原始数据执行处理操作;处理操作包括第二过程或第四过程。
可选地,至少两个通信模块包括主控制通信模块和至少一个从属通信模块,主板卡511为主控制通信模块,单片机521和副板卡523为从属通信模块;
主板卡511,还被配置为接收密钥变更指令;响应于密钥变更指令,根据主板卡511的硬件标识以及动态字符串,生成动态密钥并存储;将动态密钥分别发送至单片机521和副板卡523,以使单片机521和副板卡523存储动态密钥。
可选地,作为发送方时,主板卡511、单片机521和副板卡523,具体配置为:
根据当前的动态密钥,对原始数据进行加密,得到数据密文;
对数据密文进行封装,得到数据消息。
可选地,作为接收方时,主板卡511、单片机521和副板卡523,具体配置为:
对数据消息进行解封装,得到数据密文;
根据当前的动态密钥,对数据密文进行解密,得到原始数据。
可选地,第一编程语言层通过第一编程语言编写,第一编程语言为Java语言。
可选地,第二编程语言层通过第二编程语言编写,第二编程语言为C语言。
上述各个功能的具体实现方式可以参考实施例一中的相关内容,本实施例在此不再赘述。
进一步地,在实际应用中,储物取物业务具体可以是存餐取餐业务。图6示出了本发明实施例三的一种存餐取餐系统的结构框图,以及部分存餐取餐步骤,参照图6,控制设备510具体可以是点餐机5101,储物设备520具体可以是存餐取餐货柜5201,存餐取餐货柜5201可以包括多个用于存餐取餐的储物柜,储物人员具体可以是餐饮工作人员,取物人员具体可以是购买餐饮产品的消费者,或者进行餐饮产品配送的配送人员,取物码具体可以是取餐码。存餐取餐货柜5201的副板卡具体可以是每个储物柜对应的操作面板的控制板卡,取物人员也即取餐人员,可以通过控制面板输入取餐码。
首先,购买餐饮产品的消费者可以通过手机、电脑等终端、点餐机5101等进行点餐,通过终端点餐的点餐订单可以通过云服务器同步至点餐机5101,或者由餐饮工作人员根据通过终端的点餐订单,在点餐机5101上再输入相同的点餐订单,实现点餐订单的同步。
在根据点餐订单将餐饮产品制作完成后,餐饮工作人员可以将消费者手机号或者点餐码等输入点餐机5101,从而点餐机5101的主板卡可以接收储物指令,该储物指令可携带指定储物柜A的号码作为标识,响应于该储物指令,主板卡可以向存餐取餐货柜5201的单片机发送储物柜A对应的电子锁a的第一开启指令,单片机进而可以控制电子锁a开启。电子锁a开启之后,对应的储物柜A的柜门打开,进而餐饮工作人员可以将需要存放的餐饮产品放入储物柜A中,并关闭柜门,从而使电子锁a关闭,完成存餐。
之后,单片机可以通知主板卡存餐完成,主板卡进而生成取餐信息,取餐信息中可以包括餐饮产品名称、消费者手机号、储物柜A的号码、存餐时间等信息。主板卡可以将取餐信息上传至云服务器,云服务器可以生成唯一的取餐码,进而通过短信发送给取餐人员,即消费者或配送人员。
获得取餐码之后,取餐人员可以前去取餐,并在储物柜A对应的操作面板上输入取餐码,从而该操作面板对应的副板卡可以接收到取物指令,从而获得储物柜A对应的取餐码。副板卡进而可以将取餐码通过主板卡发送至服务器进行验证,当该取餐码与之前生成的取物码一致时,验证通过,进而服务器通知主板卡验证通过,主板卡可以向单片机发送第二开启指令,以使单片机控制存餐的储物柜A所对应的电子锁a开启。电子锁a开启之后,对应的储物柜A的柜门打开,进而取餐人员可以将餐饮产品取出,并关闭柜门,从而使电子锁a关闭,完成取物。
取物完成后,本次存餐取餐业务结束,主板卡、单片机和副板卡响应于业务结束指令,可以对各自当前的波特率进行调整,主板卡、单片机和副板卡调整后的波特率一致。
进一步地,对于一次存餐取餐业务、以及一次存餐取餐业务中所传输的数据,存餐取餐系统还可以实现上述储物系统500所能够实现的各个功能。
其中,主控制通信模块(主板卡)给从属通信模块(单片机和副板卡)发送的数据帧中的数据域所包含的信息具体可以包括:
1、主控制通信模块的MAC地址,作为主控制通信模块的硬件标识;
2、数据发送时间:按照十进制存储,共占5个字节,年月日时分秒各占一个字节;
3、指令:包括但不限制于连接指令(与主控制通信模块)、断开指令(与主控制通信模块)、查询(电子锁)状态指令、关锁指令、开锁指令、修改波特率指令、发送取餐码指令等;
主控制通信模块(主板卡)向从属通信模块(单片机和副板卡)发送数据的协议格式具体可以参照图7。
4、指令参数:即执行指令所需的参数,包括第三方固定协议(例如电子锁可以由第三方提供,与电子锁之间的通信可以遵循第三方固定协议)和自定义协议(包括本发明实施例中自定义的通信协议)中的指令参数。
从属通信模块(单片机和副板卡)给主控制通信模块(主板卡)发送的数据帧中的数据域所包含的信息具体可以包括:
1、从属通信模块的编号;
2、数据发送时间:按照十进制存储,共占5个字节,年月日时分秒各占一个字节;
3、状态:包括但不限制于连接状态(与主控制通信模块)、断开状态(与主控制通信模块)、查询(电子锁)状态、开锁状态、关锁状态、指令接收状态、验证(取餐码)结果、波特率结果等;
4、状态参数:即与状态相关的参数,包括第三方固定协议和自定义协议中的状态参数。
从属通信模块(单片机和副板卡)向主控制通信模块(主板卡)发送数据的协议格式具体可以参照图8。
在本发明实施例中,对于储物系统中进行串口通信的主板卡、单片机和副板卡,在接收到指示一次业务的数据传输过程结束的业务结束指令时,响应于该业务结束指令,可以对当前的波特率进行调整,调整后的波特率用于下一次业务的数据传输过程。其中,在同一次业务的数据传输过程中,储物系统中主板卡、单片机和副板卡的波特率保持一致。在本发明实施例中,在每次业务的数据传输过程中可以采用不同的波特率,由于波特率是动态变化的,因此,提高了数据的破解难度,从而提高了串口通讯的数据安全性。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种通信方法、通信系统及储物系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (16)
1.一种通信方法,其特征在于,应用于通信系统中的通信模块,所述通信系统包括至少两个所述通信模块,所述通信模块之间为串口通信连接,所述方法包括:
接收业务结束指令;所述业务结束指令指示一次业务的数据传输过程结束;
响应于所述业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程;其中,每次业务结束后,每个所述通信模块按照同一预设的波特率调整表中的波特率顺序,对自身的波特率进行调整;
其中,在同一次业务的数据传输过程中,不同的所述通信模块的波特率保持一致,且调整后的波特率与进行上一次业务时的波特率不同。
2.根据权利要求1所述的方法,其特征在于,所述接收业务结束指令,包括:
通过第一编程语言层接收业务结束指令;
所述响应于所述业务结束指令,对当前的波特率进行调整,包括:
响应于所述业务结束指令,调用第二编程语言层的第一函数;所述第一函数用于按照预存的波特率调整表,对当前的波特率进行调整;
其中,不同的所述通信模块中预存有相同的波特率调整表。
3.根据权利要求1所述的方法,其特征在于,所述响应于所述业务结束指令,对当前的波特率进行调整之后,还包括:
在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第二函数;所述第二函数用于对所述原始数据进行封装,得到数据消息;对所述数据消息进行封装,得到至少一个数据帧;通过所述调整后的波特率,将所述至少一个数据帧发送至相应的所述通信模块;所述至少一个数据帧中的第一个数据帧的起始位包括消息起始分隔符,所述至少一个数据帧中的最后一个数据帧的结束位包括消息结束分隔符。
4.根据权利要求3所述的方法,其特征在于,所述响应于所述业务结束指令,对当前的波特率进行调整之后,还包括:
在下一次业务开始时,调用第二编程语言层的第三函数;所述第三函数用于通过所述调整后的波特率,接收通过所述串口通信连接发送的数据帧;当在所述数据帧的起始位中识别出消息起始分隔符,且在所述消息起始分隔符所在的数据帧或之后的数据帧的结束位中识别出消息结束分隔符时,将所述消息起始分隔符与所述消息结束分隔符之间的数据帧确定为一个完整数据消息对应的目标数据帧,并执行第一过程;所述第一过程包括:对所述目标数据帧进行解封装,得到数据消息;对所述数据消息进行解封装,得到所述原始数据;
执行第二过程;所述第二过程包括:将所述原始数据传递至第一编程语言层;根据所述原始数据,通过所述第一编程语言层进行相应的操作。
5.根据权利要求1所述的方法,其特征在于,所述响应于所述业务结束指令,对当前的波特率进行调整之后,还包括:
在下一次业务开始时,将待发送的原始数据作为传入参数,通过第一编程语言层调用第二编程语言层的第四函数;所述第四函数用于对所述原始数据进行封装,得到数据消息;对所述数据消息进行封装,得到至少一个数据帧;通过所述调整后的波特率,将所述至少一个数据帧发送至相应的所述通信模块;所述数据消息包括消息头和消息体,所述消息头包括用于指示所述消息体的长度的目标字段。
6.根据权利要求5所述的方法,其特征在于,所述响应于所述业务结束指令,对当前的波特率进行调整之后,还包括:
在下一次业务开始时,调用第二编程语言层的第五函数;所述第五函数用于通过所述调整后的波特率,接收通过所述串口通信连接发送的数据帧,并执行第三过程;所述第三过程包括:对接收的至少一个所述数据帧进行解封装,得到数据消息的消息头,以及所述数据消息的消息体;所述消息体满足所述目标字段所指示的长度;对所述数据消息进行解封装,得到所述原始数据;
执行第四过程;所述第四过程包括:将所述原始数据传递至第一编程语言层;根据所述原始数据,通过所述第一编程语言层进行相应的操作。
7.根据权利要求4所述的方法,其特征在于,所述接收通过所述串口通信连接发送的数据帧,包括:
采用数据接收缓存数组接收通过所述串口通信连接发送的数据帧;
所述接收通过所述串口通信连接发送的数据帧之后,还包括:
将所述数据帧从所述数据接收缓存数组中读取至协议解析缓存数组;
从所述协议解析缓存数组中读取所述数据帧;
对读取出的所述数据帧执行协议解析操作;所述协议解析操作包括所述第一过程;
将协议解析后得到的原始数据存入数据处理缓存数组;
从所述数据处理缓存数组中读取所述原始数据;
对读取出的所述原始数据执行处理操作;所述处理操作包括所述第二过程。
8.根据权利要求6所述的方法,其特征在于,所述接收通过所述串口通信连接发送的数据帧,包括:
采用数据接收缓存数组接收通过所述串口通信连接发送的数据帧;
所述接收通过所述串口通信连接发送的数据帧之后,还包括:
将所述数据帧从所述数据接收缓存数组中读取至协议解析缓存数组;
从所述协议解析缓存数组中读取所述数据帧;
对读取出的所述数据帧执行协议解析操作;所述协议解析操作包括所述第三过程;
将协议解析后得到的原始数据存入数据处理缓存数组;
从所述数据处理缓存数组中读取所述原始数据;
对读取出的所述原始数据执行处理操作;所述处理操作包括所述第四过程。
9.根据权利要求3、4、5或6所述的方法,其特征在于,所述至少两个通信模块包括主控制通信模块和至少一个从属通信模块,对于所述主控制通信模块,所述方法还包括:
接收密钥变更指令;
响应于所述密钥变更指令,根据所述主控制通信模块的硬件标识以及动态字符串,生成动态密钥并存储;
将所述动态密钥分别发送至每个所述从属通信模块,以使每个所述从属通信模块存储所述动态密钥。
10.根据权利要求3或5所述的方法,其特征在于,所述对所述原始数据进行封装,得到数据消息,包括:
根据当前的动态密钥,对所述原始数据进行加密,得到数据密文;
对所述数据密文进行封装,得到所述数据消息。
11.根据权利要求4或6所述的方法,其特征在于,所述对所述数据消息进行解封装,得到所述原始数据,包括:
对所述数据消息进行解封装,得到数据密文;
根据当前的动态密钥,对所述数据密文进行解密,得到所述原始数据。
12.根据权利要求2-6任一项所述的方法,其特征在于,所述第一编程语言层通过第一编程语言编写,所述第一编程语言为Java语言。
13.根据权利要求2-6任一项所述的方法,其特征在于,所述第二编程语言层通过第二编程语言编写,所述第二编程语言为C语言。
14.一种通信系统,其特征在于,包括至少两个通信模块,所述通信模块之间为串口通信连接;
所述通信模块,配置为接收业务结束指令;所述业务结束指令指示一次业务的数据传输过程结束;响应于所述业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程;其中,每次业务结束后,每个所述通信模块按照同一预设的波特率调整表中的波特率顺序,对自身的波特率进行调整;
其中,在同一次业务的数据传输过程中,不同的所述通信模块的波特率保持一致;且调整后的波特率与进行上一次业务时的波特率不同。
15.一种储物系统,其特征在于,包括控制设备和储物设备,所述控制设备包括主板卡,所述储物设备包括单片机、多个储物柜、与所述储物柜一一对应的副板卡,以及与所述储物柜一一对应的电子锁,所述系统包括至少两个通信模块,所述通信模块之间为串口通信连接,所述至少两个通信模块包括所述主板卡、所述单片机和所述副板卡,所述主板卡与所述单片机之间为所述串口通信连接,所述主板卡与所述副板卡之间为所述串口通信连接,所述单片机与所述电子锁连接;
所述主板卡,配置为接收储物指令;响应于所述储物指令,向所述单片机发送需打开的所述储物柜对应的所述电子锁的第一开启指令;
所述单片机,配置为接收所述第一开启指令;响应于所述第一开启指令,开启对应的所述电子锁,以完成储物;
所述副板卡,配置为接收取物指令;所述取物指令携带有需取出物品的所述储物柜的取物码;响应于所述取物指令,向所述主板卡发送所述取物码;
所述主板卡,还配置为接收所述取物码;当对所述取物码的验证通过时,向所述单片机发送所述储物柜对应的所述电子锁的第二开启指令;
所述单片机,还配置为接收所述第二开启指令;响应于所述第二开启指令,开启对应的所述电子锁,以完成取物;
所述单片机,还配置为在完成取物后检测到所述电子锁关闭时,接收业务结束指令,并将所述业务结束指令发送至所述主板卡;所述业务结束指令指示一次业务的数据传输过程结束;
所述主板卡,还配置为接收所述业务结束指令,并将所述业务结束指令发送至所述副板卡;
所述副板卡,还配置为接收所述业务结束指令;
所述主板卡、所述单片机和所述副板卡,还配置为响应于所述业务结束指令,对当前的波特率进行调整;调整后的波特率用于下一次业务的数据传输过程;其中,每次业务结束后,每个所述通信模块按照同一预设的波特率调整表中的波特率顺序,对自身的波特率进行调整;其中,在同一次业务的数据传输过程中,所述主板卡、所述单片机和所述副板卡的波特率保持一致;且调整后的波特率与进行上一次业务时的波特率不同。
16.根据权利要求15所述的储物系统,其特征在于,所述至少两个通信模块包括主控制通信模块和至少一个从属通信模块,所述主板卡为所述主控制通信模块,所述单片机和所述副板卡为所述从属通信模块;
所述主板卡,还被配置为接收密钥变更指令;响应于所述密钥变更指令,根据所述主板卡的硬件标识以及动态字符串,生成动态密钥并存储;将所述动态密钥分别发送至所述单片机和所述副板卡,以使所述单片机和所述副板卡存储所述动态密钥。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110695636.2A CN113438142B (zh) | 2021-06-21 | 2021-06-21 | 一种通信方法、通信系统及储物系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110695636.2A CN113438142B (zh) | 2021-06-21 | 2021-06-21 | 一种通信方法、通信系统及储物系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113438142A CN113438142A (zh) | 2021-09-24 |
CN113438142B true CN113438142B (zh) | 2023-06-20 |
Family
ID=77757258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110695636.2A Active CN113438142B (zh) | 2021-06-21 | 2021-06-21 | 一种通信方法、通信系统及储物系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113438142B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106301685A (zh) * | 2016-08-15 | 2017-01-04 | 中车株洲电力机车研究所有限公司 | 一种异步串行通讯方法及系统 |
CN112835841A (zh) * | 2021-03-05 | 2021-05-25 | 大唐半导体科技有限公司 | 基于串口通讯的asic数据安全传输与存储装置及方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS60254942A (ja) * | 1984-05-31 | 1985-12-16 | Fujitsu General Ltd | 伝送速度を可変としたデ−タ通信方法 |
KR920007481B1 (ko) * | 1989-11-29 | 1992-09-04 | 현대전자산업 주식회사 | 복수 프로세서간 데이타 통신 방법 |
CN1476198A (zh) * | 2002-08-15 | 2004-02-18 | ��������ͨ�ż����о�����˾ | 利用小区广播的mbms的业务广告或业务指示的方法 |
CN101365171B (zh) * | 2007-08-10 | 2011-09-21 | 中兴通讯股份有限公司 | 一种专用信道业务传输速率调整方法及装置 |
CN101753394A (zh) * | 2009-12-09 | 2010-06-23 | 艾默生网络能源有限公司 | 一种单串口接入多个智能设备的通信方法以及一种单串口 |
CN101741849B (zh) * | 2009-12-23 | 2012-05-30 | 北京格林伟迪科技有限公司 | 一种传输串口业务数据的方法、系统及设备 |
CN106559349B (zh) * | 2015-09-24 | 2019-03-19 | 阿里巴巴集团控股有限公司 | 业务传输速率的控制方法及装置、系统 |
CN105653491B (zh) * | 2016-01-04 | 2018-07-13 | 上海斐讯数据通信技术有限公司 | 一种串口通信波特率调整方法及系统 |
CN113300810B (zh) * | 2016-12-23 | 2023-03-10 | 华为技术有限公司 | 一种传输速率的调整方法及网络设备 |
CN107147553B (zh) * | 2017-05-10 | 2019-12-17 | 深圳市亿维自动化技术有限公司 | 从站波特率及帧格式的调整方法、调整装置及调整设备 |
CN108153696B (zh) * | 2017-12-29 | 2020-04-10 | 广州市中海达测绘仪器有限公司 | 嵌入式系统串口模块匹配方法、装置、介质和计算机设备 |
CN111258514A (zh) * | 2020-01-20 | 2020-06-09 | 东莞炜煌打印机有限公司 | 一种自适应波特率的方法、装置及打印机 |
CN112559412B (zh) * | 2021-03-01 | 2021-06-08 | 上海灵动微电子股份有限公司 | 一种串口波特率自适应接收端、实现方法、系统 |
-
2021
- 2021-06-21 CN CN202110695636.2A patent/CN113438142B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106301685A (zh) * | 2016-08-15 | 2017-01-04 | 中车株洲电力机车研究所有限公司 | 一种异步串行通讯方法及系统 |
CN112835841A (zh) * | 2021-03-05 | 2021-05-25 | 大唐半导体科技有限公司 | 基于串口通讯的asic数据安全传输与存储装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113438142A (zh) | 2021-09-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106022080B (zh) | 一种基于PCIe接口的密码卡及该密码卡的数据加密方法 | |
US8112794B2 (en) | Management of multiple connections to a security token access device | |
CN104601325B (zh) | 数据加密方法、数据解密方法、装置、设备及系统 | |
EP3157195B1 (en) | Communication protocol testing method, and tested device and testing platform thereof | |
JPH0787455B2 (ja) | 通信回線網のブートストラップ・チャンネル保全装置及び不法通信を防止する方法 | |
US10826876B1 (en) | Obscuring network traffic characteristics | |
CN102546601A (zh) | 云计算终端接入虚拟机的辅助装置 | |
CN107347025A (zh) | 数据处理方法、装置、服务器及系统 | |
CN101923654B (zh) | 一种适合不同用户远程安全控制的超高频读写器 | |
CN108200094A (zh) | 一种燃气表的安全通信装置、方法和系统 | |
CN108616429A (zh) | 一种推送服务的重连方法及设备 | |
EP1881663B1 (en) | Management of multiple connections to a security token access device | |
CN110505066A (zh) | 一种数据传输方法、装置、设备及存储介质 | |
CN105610953A (zh) | 一种分布式数据同步系统及方法 | |
CN109697370A (zh) | 数据库数据加解密方法、装置、计算机设备和存储介质 | |
CN105141637A (zh) | 一种以流为粒度的传输加密方法 | |
CN109614789A (zh) | 一种终端设备的验证方法及设备 | |
US7961614B2 (en) | Information processing device, information processing method, and recording medium for reducing consumption of memory capacity | |
CN110198320B (zh) | 一种加密信息传输方法和系统 | |
CN106203188B (zh) | 一种基于双cpu加mac的单向数据传输系统及其方法 | |
CN107241291A (zh) | 物联网网络安全接入装置、物联网终端设备及物联网系统 | |
CN113438142B (zh) | 一种通信方法、通信系统及储物系统 | |
CN101242453B (zh) | 一种双音多频信号的传输方法和系统 | |
CN106899600A (zh) | 净水器的数据处理方法及装置 | |
CN110430052A (zh) | 一种pos密钥在线灌装的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |