本申请涉及通信协议,具体地涉及一种代码自动生成方法、装置及存储介质。
背景技术:
1、在工业设备通信中,每个设备都遵循约定的协议格式。这些协议包含多种通信指令,在与设备通信时,为了解析出对应的通信内容,必须根据协议格式解析报文,因此,开发人员需要熟悉通信协议手册,并编写相应的报文解析代码。由于每个通信指令的内容和格式各不相同,所以无法共用同一段报文解析代码,则需要开发人员为每个报文编写专门的解析代码。而协议中的通信指令繁多,每个指令的报文格式都有所不同,需要开发人员手动编写报文解析的代码,容易出错。并且通信指令数量繁多,开发人员编写非常繁琐,且耗费时间人力,效率低下。
技术实现思路
1、本申请实施例的目的是提供一种代码自动生成方法、装置及存储介质,用以解决现有技术中编写报文解析代码的效率低下、容易出错的技术问题。
2、为了实现上述目的,本申请第一方面提供一种代码自动生成方法,方法包括:
3、获取工程设备和终端基于预设通信协议传输的预设指令的协议报文,协议报文包括多个指令参数;
4、针对每个指令参数,基于第一解析函数对指令参数进行解析,以根据指令参数包括的参数名称、参数标识以及参数标识所在的字节位置生成与指令参数对应的第一代码内容;
5、针对每个指令参数,基于第二解析函数对指令参数进行解析,以根据指令参数包括的参数名称、参数内容以及参数内容所在的字节位置生成与指令参数对应的第二代码内容;
6、根据全部的第一代码内容和第二代码内容生成与预设指令对应的目标命令行,以通过目标命令行执行预设指令的操作。
7、在本申请的实施例中,针对每个指令参数对应的第一代码内容,第一代码内容包括多个第一解析函数参数,多个第一解析函数参数包括按照顺序排列的第一参数、第二参数、第三参数、第四参数、第五参数、第六参数、第七参数,其中,第一参数是指基于第一解析函数解析后的协议报文存储的缓冲区,第二参数是指需要基于第一解析函数解析的协议报文的缓冲区,第三参数是指指令参数的参数名称,第四参数是指指令参数的参数标识,第五参数是指根据参数标识所在的字节位置确定的参数标识的字节长度,第六参数是指基于第一解析函数解析后的协议报文的偏移量,第七参数是指第一解析函数解析错误时调用的回调函数。
8、在本申请的实施例中,针对每个指令参数,基于第一解析函数对指令参数进行解析,以根据指令参数包括的参数名称、参数标识以及参数标识所在的字节位置生成与指令参数对应的第一代码内容包括:针对每个指令参数,基于第一解析函数从第一参数对应的缓冲区提取键值;针对每个指令参数,在键值与第四参数中的参数标识对应的预设键值未匹配成功的情况下,调用第七参数中的回调函数,并返回处理失败的信号;针对每个指令参数,在键值与第四参数中的参数标识对应的预设键值匹配成功的情况下,更新第六参数,并返回处理成功的信号;针对每个指令参数,在接收到处理成功的信号的情况下,根据指令参数包括的参数名称、参数标识以及参数标识所在的字节位置生成与指令参数对应的第一代码内容。
9、在本申请的实施例中,针对每个指令参数对应的第二代码内容,第二代码内容包括多个第二解析函数参数,多个第二解析函数参数包括按照顺序排列的第八参数、第九参数、第十参数、第十一参数、第十二参数、第十三参数、第十四参数,其中,第八参数是指基于第二解析函数解析后的协议报文存储的缓冲区,第九参数是指需要基于第二解析函数的协议报文的缓冲区,第十参数是指指令参数的参数名称,第十一参数是指指令参数的参数内容,第十二参数是指根据参数内容所在的字节位置确定的参数内容的字节长度,第十三参数是指基于第二解析函数解析后的协议报文的偏移量,第十四参数是指第二解析函数解析错误时调用的回调函数。
10、在本申请的实施例中,针对每个指令参数,基于第二解析函数对指令参数进行解析,以根据指令参数包括的参数名称、参数内容以及参数内容所在的字节位置生成与指令参数对应的第二代码内容包括:针对每个指令参数,基于第二解析函数从第八参数对应的缓冲区提取预设字节长度的数据;针对每个指令参数,根据第十一参数中的参数内容将预设字节长度的数据转换为对应的字符串或数字;针对每个指令参数,在转换后的字符串的长度与第十一参数中的参数内容的字节长度匹配成功,或转换后的数字有效的情况下,更新第十三参数,并返回处理成功的信号;针对每个指令参数,在转换后的字符串的长度与第十一参数中的参数内容的字节长度未匹配成功,或转换后的数字无效的情况下,调用第十四参数中的回调函数,并返回处理失败的信号;针对每个指令参数,在接收到处理成功的信号的情况下,根据指令参数包括的参数名称、参数内容以及参数内容所在的字节位置生成与指令参数对应的第二代码内容。
11、在本申请的实施例中,针对每个第三参数或第十参数,基于小驼峰命名法则对参数名称对应的字符组进行处理,以得到处理后的目标字符串。
12、在本申请的实施例中,根据全部的第一代码内容和第二代码内容生成与预设指令对应的目标命令行包括:获取每个指令参数对应的字节位置;基于字节位置通过连接符对全部第一代码内容和第二代码内容依次连接,以组装成与预设指令对应的目标命令行。
13、在本申请的实施例中,协议报文为按照预设格式生成的报文定义表,其中,报文定义表的第一列包括指令参数的参数名称,报文定义表的第二列包括指令参数的字节位置,报文定义表的第三列包括指令参数的参数标识和参数内容。
14、本申请第二方面提供一种代码自动生成装置,包括:
15、存储器,被配置成存储指令;
16、处理器,被配置成从存储器调用指令以及在执行指令时能够实现根据上述的代码自动生成方法。
17、本申请第三方面提供一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令用于使得机器执行根据上述的代码自动生成方法。
18、通过上述技术方案,通过获取工程设备和终端基于预设通信协议传输的预设指令的协议报文,协议报文包括多个指令参数;针对每个指令参数,基于第一解析函数对指令参数进行解析,以根据指令参数包括的参数名称、参数标识、参数标识所在的字节位置生成与指令参数对应的第一代码内容;针对每个指令参数,基于第二解析函数对指令参数进行解析,以根据指令参数包括的参数名称、参数内容以及参数内容所在的字节位置生成与指令参数对应的第二代码内容;根据全部的第一代码内容和第二代码内容生成与预设指令对应的目标命令行,以通过目标命令行执行预设指令的操作。上述方案,可以大大节省编码时间,减少重复工作,降低了人工操作可能导致的错误。
19、本申请实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。
1.一种代码自动生成方法,其特征在于,所述方法包括:
2.根据权利要求1所述的代码自动生成方法,其特征在于,针对每个指令参数对应的第一代码内容,所述第一代码内容包括多个第一解析函数参数,所述多个第一解析函数参数包括按照顺序排列的第一参数、第二参数、第三参数、第四参数、第五参数、第六参数、第七参数,其中,所述第一参数是指基于所述第一解析函数解析后的协议报文存储的缓冲区,所述第二参数是指需要基于所述第一解析函数解析的协议报文的缓冲区,所述第三参数是指所述指令参数的参数名称,所述第四参数是指所述指令参数的参数标识,所述第五参数是指根据所述参数标识所在的字节位置确定的所述参数标识的字节长度,所述第六参数是指基于所述第一解析函数解析后的协议报文的偏移量,所述第七参数是指所述第一解析函数解析错误时调用的回调函数。
3.根据权利要求2所述的代码自动生成方法,其特征在于,所述针对每个指令参数,基于第一解析函数对所述指令参数进行解析,以根据所述指令参数包括的参数名称、参数标识以及所述参数标识所在的字节位置生成与所述指令参数对应的第一代码内容包括:
4.根据权利要求1所述的代码自动生成方法,其特征在于,针对每个指令参数对应的第二代码内容,所述第二代码内容包括多个第二解析函数参数,所述多个第二解析函数参数包括按照顺序排列的第八参数、第九参数、第十参数、第十一参数、第十二参数、第十三参数、第十四参数,其中,所述第八参数是指基于所述第二解析函数解析后的协议报文存储的缓冲区,所述第九参数是指需要基于所述第二解析函数的协议报文的缓冲区,所述第十参数是指所述指令参数的参数名称,所述第十一参数是指所述指令参数的参数内容,所述第十二参数是指根据所述参数内容所在的字节位置确定的所述参数内容的字节长度,所述第十三参数是指基于所述第二解析函数解析后的协议报文的偏移量,所述第十四参数是指所述第二解析函数解析错误时调用的回调函数。
5.根据权利要求4所述的代码自动生成方法,其特征在于,针对每个指令参数,基于第二解析函数对所述指令参数进行解析,以根据所述指令参数包括的参数名称、参数内容以及所述参数内容所在的字节位置生成与所述指令参数对应的第二代码内容包括:
6.根据权利要求2或4所述的代码自动生成方法,其特征在于,针对每个第三参数或第十参数,基于小驼峰命名法则对所述参数名称对应的字符组进行处理,以得到处理后的目标字符串。
7.根据权利要求1所述的代码自动生成方法,其特征在于,所述根据全部的第一代码内容和第二代码内容生成与所述预设指令对应的目标命令行包括:
8.根据权利要求1所述的代码自动生成方法,其特征在于,所述协议报文为按照预设格式生成的报文定义表,其中,所述报文定义表的第一列包括指令参数的参数名称,所述报文定义表的第二列包括指令参数的字节位置,所述报文定义表的第三列包括指令参数的参数标识和参数内容。
9.一种代码自动生成装置,其特征在于,包括:
10.一种机器可读存储介质,其特征在于,该机器可读存储介质上存储有指令,该指令用于使得机器执行根据权利要求1至8中任一项所述的代码自动生成方法。
