一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种编译延时逻辑原理图到字节码方法与流程

2021-11-05 21:41:00 来源:中国专利 TAG:


1.本发明涉及机电控制技术领域,具体涉及一种编译延时逻辑原理图到字节码方法。


背景技术:

2.在下面的背景讨论中,参考了某些结构和/或方法。然而,下面的参考不应被解释为承认这些结构和/或方法构成了现有技术。申请人明确保留证明这种结构和/或方法不作为现有技术的权利。
3.延时模块是一种根据外部输入信号状态和预设的延时参数来改变输出端通断状态的装置。它被广泛应用于声控灯、延时灯、门禁和水泵控制等简单的机电控制场合中。在这些场合下,与plc相比,延时模块经济性好、体积小、易用性好,而且在损坏时也易于更换;与定制的单片机开发板相比,其配置开发便捷,无需编写代码,上手即可直接使用,大大降低了产品创新开发的门槛。
4.随着技术的进步和非标定制需求的上涨,延时模块的市场规模逐渐增长,而且日渐要求解决方案具备极高的经济性、好的灵活性、完全的可定制性、良好的有线和无线连接能力以及高的易用性,并要求能够将延时模块裸板深度嵌入于产品中从而加快上市速度。因此,传统的固定模式的延时模块渐渐不能满足市场需求,市场需要更加灵活和方便的延时模块编程体系,同时这种灵活性必须不伤害延时模块的高度的经济性:这使得我们必须为延时模块研发一套专用编程系统。
5.现有的定制延时逻辑的方法主要有三种,其均有一定缺陷而无法满足当前市场需求。
6.第一种方案使用完全定制的微控制器电路板,从头开始开发输入/输出电路和完成延时逻辑的代码,代码通常使用c语言、basic语言或forth语言编写而成。此定制一旦完成,在后续生产中其边际成本是极低的,但定制开发成本极高。若需求量小或者需求碎片化,则支付初始定制成本是非常不经济的。比如,一个方案的量产成本虽然可能在20元/产品左右,但其开发成本可能达到200000元以上,当需求量仅仅在几十或者甚至是个位数时全定制开发成本平摊在产品产量上可能会是物料成本的数倍甚至数十倍。对于市场规模尚不确定的新产品,采用全定制开发是相当冒险的,不利于产品创新。而且此种方法一案一开发,每一款产品的开发调试都必须从头进行,浪费人力物力和时间,还可能拖累产品的上市速度。
7.第二种方案使用预置多种延时模式的延时模块。此种方法应用简单方便,而且预置多种延时模式的延时模块可以作为标准产品加以大量生产,大大提高了经济性。但随着定制化需求的广度和深度的增加,预置延时模式的数量不断增多,模块内置的程序越来越复杂,调试和除错也越来越困难。在启用一种延时模式时,其余延时模式的程序虽然没有使用,但也被预加载在延时模块内,占用模块内部单片机的资源,使得模块必须使用比必要程度更高规格的单片机。此外,若客户需要一种模块没有预置的延时模式,则又需要进入第一
种方案的全定制流程。总的而言,此种方法在满足传统需求时没有问题,但在应对现今不断增长的产品差异化定制化需求时显得力不从心。
8.第三种方案使用plc、logo、fx1s等采用梯形图、功能块图或者顺序控制列表编程的工业控制用逻辑控制器。工业控制用逻辑控制器因为要用于控制功能繁复的工业场合,其设计复杂,功能强大,从功能上讲能够完全取代延时模块。但由于它们内置多种高级数值运算控制功能,典型硬件成本是延时模块的10倍以上,而这些高级功能在延时模块的应用场合中却往往用不到。即便是那些最低成本的控制器——如logo和fx1s等——对延时模块的目标应用场景而言也是远远难以接受的。除去成本因素之外,这些控制器的编程(多为梯形图语言)需要相当系统的学习才能掌握,提高了产品开发门槛。再者,为了满足某些工业流水线能够在没有源工程的前提下现场修改机载程序的需求,工业控制器必须按原样存储用户输入的源程序的所有部分,即便那些部分是冗余的、低效的或可以化简的,这等于放弃了编译器优化字节码的关键机会。最终生成的字节码体积较大,运行较慢,使得只有使用规格较高的处理系统才能存储运行,而在延时模块的应用场合却并无这种现场修改程序的需求。最后,这些控制器的体型较大,而且往往只提供带外壳整机而不提供裸板形式,对整合进小家电和智能厕所等应用场合不利。
9.现有的通过逻辑原理图产生最终能够完成该原理图所描述的动作的控制设备的方法主要有三种,其均有一定缺陷而无法满足延时模块的市场需求。
10.第一种方案:沿用plc的编程体系,使用梯形图、顺控图、功能块图等方法,进行编程,并经过plc编程软件翻译成字节码,下载到plc中得到具有一定功能的控制器。该方案实际上等于使用plc替代延时模块,具有如下缺点:1. 相对于延时模块的应用场景而言,plc功能复杂度和冗余度都较高,直接使用plc替代延时模块则经济性差。
11.2. 在plc编程的过程中,辅助继电器m的地址必须在所有的线圈操作中手动指定,不仅给使程序员造成严重的负担,而且编译器不能通过变量生命期分析来自动复用辅助继电器点;若遇到继电器点不够用的情况,程序员必须小心地规划和分配这些继电器点的生命周期来手动复用它们,一旦发生错误很难进行排查。某些plc编程环境甚至不允许双线圈输出,此时程序员无法进行继电器复用。
12.3. 在调用某些特别功能时,程序员必须牢记各个特殊功能(如定时、计数等)所对应的特殊寄存器的编号(如某定时器对应于xxx号特殊功能寄存器),而这些信息对于每一款plc都各不相同,必须仔细研读该plc的使用说明书才能得到。这让plc的定时、计数编程变得非常繁琐,而且一旦误写错编号,排查出错点也相当困难。
13.4. 为了满足某些工业流水线能够在没有源工程的前提下现场修改机载程序的需求,plc必须按原样存储用户输入的源程序的所有部分,即便那些部分是冗余的、低效的或可以化简的,这等于放弃了编译器优化字节码的关键机会,而延时模块的深度嵌入应用场景并不要求储存未优化的源程序。
14.第二种方案:沿用plc的编程体系生成字节码,并在编程结束后使用特定软件(如pmw

hex等)将字节码翻译成等价的c代码,并使用编译器(如keil等)将其编译成目标单片机的原生二进制程序;将此二进制程序下载进单片机即可将单片机转换成具有预定功能的控制器。此种方法可以仅在最终二进制程序中包括使用到的plc功能,不使用到的功能不会
参加编译,降低了硬件的冗余度和复杂度,使得plc程序能下载到一部分8位单片机中,但有下列缺点:1. 本方法原样沿用了plc的编程体系,因此plc编程体系的高复杂性的缺点在本方法中都完全存在,不再赘述。
15.2. 本方法在实践中(如pmw

hex工具)需要“借用”一种或多种品牌plc的编程环境(如三菱gxworks)来生成原始字节码,而这些编程环境往往已经在其最终用户许可协议(eula)中明确写明“不可将此软件用于原装plc编程之外的任何场合”,因此该“借用”的实质是“盗用”,可能引起盗版使用侵权提告。
16.3. 本方法在实践中(如pmw

hex工具)需要“整合”针对该单片机架构的c编译器到延时模块的编程工具链中。绝大多数针对8位单片机的工具链(如keil、mplab xc8)等的用户协议都明确载明“不允许将本软件的全部或一部分再次分发”,因此该“整合”的实质是“非法二次分发”。分发未经授权的破解版编译器软件可能会引起比“借用编程环境”更严重的盗版二次销售侵权提告。
17.4. 经编译后生成的原生二进制软件虽然运行速度快,但由于8位微控制器的原生指令集代码密度并不高,因此生成的原生二进制往往比plc字节码还要大数倍,要容纳它们则必须使用较为高档的8位单片机。因此,本方法虽然其经济性相比直接使用plc有一定提高,但仍无法适用于那些对成本有极严格要求的低端场合,而这些低端场合恰恰在延时模块应用中占主导地位。
18.5. 少部分全定制的编译型plc工具链能够规避上述缺点2和3,但缺点1和4仍然是难于规避的、plc在设计时就带来的问题,也即其瞄准的应用场景主要是高复杂度、高附加值的工业控制场合,难于满足经济型场合的需求。
19.第三种方案:使用fpga编程工具链,将该原理图直接转化为bit流并烧写于fpga中。此方法受制于两方面而无法受到广泛应用:首先,fpga的工具链被两大厂商垄断,其工具链许可证价格昂贵;其次,哪怕是最低端的fpga的价格比起常规单片机都要高出至少一个数量级,而比起延时模块使用的低端8位单片机其成本甚至高出两个数量级。


技术实现要素:

20.本发明的目的在于提出一种编译延时逻辑原理图到字节码方法,以解决现有技术中所存在的一个或多个技术问题,至少提供一种有益的选择或创造条件。
21.为实现上述技术目的,本发明技术方案如下:一种编译延时逻辑原理图到字节码方法,所述方法包括以下步骤:步骤1,读取延时逻辑的原理图;步骤2,对原理图进行翻译得到逻辑元件门级网表;步骤3,对逻辑元件门级网表进行简化得到最简化逻辑网表;步骤4,根据最简化逻辑网表生成字节码;步骤5,对字节码进行窥孔优化减小体积得到精简化字节码;步骤6,将精简化字节码下载到延时模块内部得到定制延时模块。
22.进一步地,步骤1中,所述原理图包括输入输出端口、与逻辑元件、或逻辑元件、非逻辑元件、定时器元件、计数器元件、上升沿探测元件的一种或多种。
23.进一步地,步骤2中,对原理图进行翻译得到逻辑元件门级网表的子步骤为:使用原理图翻译模块,原理图翻译模块用于通过verilog和/或vhdl分析得到原理图中的元件与元件之间的连接关系,并依照上述信息将原理图翻译成逻辑原件门级网表,所述原理图为图形化原理图电路原理图或逻辑电路图;原理图的图纸级输入,也即外界输入给原理图的信号,在字节码虚拟机被依次压栈,运行该原理图的字节码,在字节码运行完成后,图纸级输出存放在栈上,图纸级输出为原理图输出给外界的信号,依次弹栈得到逻辑元件门级网表。
24.上述步骤非常好地适合延时模块的应用场景,与plc不同,本延时模块专用虚拟机仅需要做逻辑运算而不需要做数值运算,因此其指令集编码多为8位,紧凑高效;在延时逻辑的计算中,被频繁存取的存储器变量往往地址相近,因此采用基址变址寻址可大大降低占程序空间50%以上的压栈弹栈指令所需要的编码长度,进一步提高了指令集的编码密度,这也是plc所做不到的。
25.步骤3中,对逻辑元件门级网表进行简化得到最简化逻辑网表的子步骤为使用逻辑网表优化模块对步骤2得到的逻辑原件门级网表进行编译器优化,编译器优化包括删除不影响输出的死逻辑,进行常量传递,通过quine

mccluskey算法和espresso化简器进行组合逻辑块化简与逻辑切片化简,并进行根节点运算优化,存储器分配优化的一种或多种,输出最简化逻辑原件门级网表;删除不影响输出的死逻辑的步骤为当逻辑原件门级网表产生死逻辑时,驱动死逻辑的元件将会被递归删除,直到剩下的元件都不再是死逻辑为止,这虽然与c/c 编译器的无用代码消除是类似的,然而在plc、工业控制相关领域内是前所未有的;其中,死逻辑为该逻辑元件的输出不驱动任何其它逻辑元件的输入,也不驱动图纸级输出;所述常量传递的步骤为逻辑原件门级网表中存在常量时,将这些常量代入到原理图中,传播该常量到各个逻辑元件的输入,进行预运算,消除能够在编译期就被计算的逻辑运算,这虽然与c/c 编译器的常量传递是类似的,然而在plc、工业控制相关领域内是前所未有的。
26.进一步地,步骤3中,所述逻辑切片化简的子步骤为:在延时逻辑的计算中,逻辑不应该被计算两次,因为会浪费计算时间,因此,如果一个逻辑元件的输出端驱动多个输入端(即扇出大于1的逻辑元件),那么该逻辑元件的输出值会被计算一次,然后暂存在存储器中共以后调用,应用以下方法实现:步骤3.1,标记逻辑元件门级网表里每个扇出数大于1的元件和所有图纸级输出端,将它们作为切片的根节点;扇出数或称为扇出系数;图纸级输出端也即外界输入给原理图的信号;它们即逻辑元件门级网表里每个扇出数大于1的元件和所有图纸级输出端;步骤3.2,对于每个根节点,往前回溯其输入端,如果遇到的输入端既不被另一个根节点驱动,又不被逻辑元件门级网表的图纸级输入驱动,则继续向前回溯驱动该输入端的元件的所有输入端,直到所有的输入端均为根节点或逻辑元件门级网表的输入为止,此时完成一个切片,把找到的所有根节点和图纸级输入称为该根节点的前继输入;不被另一个根节点驱动意义为没有来自根节点的信号;不被逻辑元件门级网表的
图纸级输入驱动为没有来自外界输入给原理图的信号;在本专利中,向前或往前的意义为:当前状态或者位置向当前状态或者位置的上一个状态或者位置的方向;向后或往后的意义为:当前状态或者位置向当前状态或者位置的下一个状态或者位置的方向;步骤3.3,按照逻辑从浅到深的顺序依次压栈各个前继输入和图纸级输入,然后调用各个逻辑运算指令,最后在栈上得到唯一的逻辑元件输出值,所述逻辑元件输出值被暂存在存储器中供之后调用;此种切片计算方法保证了:在一个切片内,除了根节点以外,其它任何中间计算结果都不需要暂存在线性存储器中,能在不重复计算的前提下最大限度地减少存储器峰值占用。相比之下,在plc的梯形图编程系统中,所有的中间继电器均要用户手动指定,这导致很多不必要的中间结果暂存,白白浪费了宝贵的存储器资源;步骤3.4,穷举步骤3.2得到的每个根节点的前继输入的输入状态来测试输出端的状态,如果有根节点在前继输入改变时不影响输出端的状态,则断开该前继输入与本切片的连接,并在本切片的输入端接上逻辑常量,如果一个根节点的所有前继输入都不影响根节点的输出,则把所有前继输入断开,此根节点的输出变为逻辑常量;不影响根节点的输出的意义为根节点的输出不依赖于前继输入;步骤3.5,如果步骤3.4有根节点的前继输入被断开,则重复执行步骤3.1到3.4和删除不影响输出的死逻辑、进行常量传递,直到所有根节点的前继输入达到最精简状态,最精简状态意义为没有死逻辑其中,死逻辑为该逻辑元件的输出不驱动任何其它逻辑元件的输入,也不驱动图纸级输出。
27.进一步地,步骤3中,所述根节点运算优化的子步骤为:步骤3.6.1:对逻辑原件门级网表中的图纸级输出编号,并各自成独立分区,对分区编号,然后对分区编号从小到大排序,向前传播该图纸级输出编号到本图纸级输出依赖的各个根节点;向前传播即按照分区编号从小到大的序号进行传播图纸级输出编号;步骤3.6.2:若在传播过程中发现某根结点已经具备其他图纸级输出的编号,则将本图纸级输出加入该图纸级输出所在的分区,若所有根结点未发现具备其他图纸级输出的编号,则本图纸级输出保持独立分区;上述步骤能确保各个分区之间不会共享任何逻辑切片,因此其分区内部的变量的生存期是互不覆盖的;步骤3.6.3:对于各个独立分区,按如下子步骤决定分区中的各个逻辑切片的等级:步骤3.6.3.1:将原理图的图纸级输出和所有根节点的逻辑切片等级设置为0;步骤3.6.3.2:从图纸级输出开始,反向传播逻辑切片等级到其依赖的各个前继根节点,层层向前直到传播完成,若被反向传播的某个前继根节点的逻辑切片等级若小于等于本节点的逻辑切片等级,则更新前继根节点的逻辑切片等级为本节点的逻辑切片等级和本根节点到该前继根节点经过的逻辑元件数的和,并继续向前反向传播,否则就不传播;依赖的意义为连接/连通;各个节点的逻辑切片等级为本节点到该前继根节点经过的逻辑元件数的和;步骤3.6.4:将每个独立分区内的各个逻辑切片按等级降序排列,即得到该分区内
的逻辑切片的计算顺序;该计算顺序不仅保证了任何前继切片均在后继切片之前计算(保证运算的正确性),而且保证了距离输出越远的前继切片的结果越先计算(让越早用到的结果越早计算、越早丢弃,这样可以将变量“分代”,启发式地错开各个切片的根节点的变量生存期)步骤3.6.5:将各个逻辑分区内的逻辑切片的计算顺序直接首尾相连即得到原理图中的所有切片的计算顺序;计算顺序直接首尾为按照计算顺序首尾相连或者将各个独立分区的计算顺序首尾相连;相比于plc的编译系统,本根节点运算优化能够独立于程序员决定逻辑计算顺序,一方面大大减轻了程序员的负担,另一方面安排的计算顺序经过相当优化从而能够最大限度地减少存储器用量。
28.进一步地,步骤3中,所述存储器分配优化的子步骤为:下列算法中假设虚拟机具备8位四个基址变址寻址寄存器,每个基址变址寄存器对应一个32位的页,且压栈和弹栈指令能携带5位二进制立即数,组合成8 5=13位地址,但实现不在此限;步骤3.7.1:根据根节点运算优化的计算顺序使用线性扫描算法分配各个切片的存储器地址,再根据计算顺序和存储地址,生成计算该原理图的原始字节码程序,其中所有的压栈和弹栈指令都直接填充未经处理的原始存储地址;由于已经通过启发式算法将各个切片的变量生存期尽量错开,因此线性扫描算法会得到非常好的效果。虽然此时多个中间变量会被安排到同一个存储器地址上,但只要其生存期不同,就互不干扰。相比于传统plc的编程环境,这进一步降低了存储器用量;步骤3.7.2,在虚拟机开始运行时,默认四个基址变址寄存器a、b、c、d分别覆盖四个连续的页,其地址范围分别为0

31、32

63、64

95、96

127,并且活动的基址变址寄存器为a;这使得任何使用少于32个中间变量的逻辑原理图完全不需要切换当前活动的基址变址寄存器,而任何使用少于128个中间变量的逻辑原理图完全不需要加载基址变址寄存器,节约了字节码长度;步骤3.7.3:判断某个存储器地址m的存取操作时,确认当前活动的基址变址寄存器a指定的页是否包括存储器地址m的地址,如果包括,则无需换页,直接截取存储器地址m的后5位二进制立即数填充入指令内,如果不包括,运行步骤3.7.4;步骤3.7.4:检查其他基址变址寄存器b、c、d所指定的页是否包括存储器地址m的地址,如果变址寄存器b、c、d的其中一个变址寄存器包括存储器地址m的地址,则在指令前添加一条修改当前活动基址变址寄存器为把包含存储器地址m的变址寄存器的单字节指令,跳转步骤3.7.5,如果变址寄存器b、c、d的都不包括存储器地址m的地址,跳转步骤3.7.6;步骤3.7.5:截取m的后5位二进制立即数填充入压弹栈指令内;步骤3.7.6:根据一种替换算法,选择一个基址变址寄存器,使用专用双字节指令将存储器地址m的前8个二进制位装入选择的基址变址寄存器,然后将选择的基址变址寄存器作为当前活动的基址变址寄存器,比如假设此时选择的基址变址寄存器是b,则使用专用双字节指令将m的前8个二进制位装入b,然后选择b作为当前活动的基址变址寄存器。
29.上述基址变址寻址方案使得绝大多数指令,尤其是占据绝对多数的压栈和弹栈指令仅占一个字节,大大节约了存储空间。更换活动基址变址寄存器是较少见的,装填基址变址寄存器就更少见了,因此这些额外操作带来的存储器消耗可以忽略不计。这对于plc指令系统是完全不可得的;plc的所有访存指令都至少是16位的(部分品牌甚至是32位的),这几乎翻倍了存储器消耗。
30.进一步地,步骤4中,根据最简化逻辑网表生成字节码的子步骤为:使用字节码生成模块,从各图纸级输出开始进行回溯,按各个逻辑元件的依赖顺序生成能够根据图纸级输入计算图纸级输出的、能由字节码解释器运行的字节码,字节码解释器也即字节码执行模块,所述字节码不含有数据处理运算相关指令,只含有布尔逻辑运算相关指令,所述字节码能够在8位单片机上存储运行。
31.一种编译延时逻辑原理图到字节码的系统,所述系统包括:交互式原理图绘制模块:用于绘制所需要的实现的延时逻辑的原理图;原理图翻译模块:用于将原理图翻译成verilog或vhdl标准的逻辑元件门级网表,包括一个字节码虚拟机,死逻辑消除模块,所述字节码虚拟机包括一个运行栈、一个指令集和数个基址变址寄存器,前述指令集包括压栈和弹栈指令、逻辑运算指令,所述压栈和弹栈指令能访问线性编址的存储器,所述逻辑运算指令仅能操作栈顶的数个数值,所述压栈和弹栈指令、逻辑运算指令为8位单字节,其中压栈和弹栈指令仅携带访存地址的低位,访存地址的高位由当前被选中的基址变址寄存器的内容决定,字节码虚拟机可以填充当前活动的基址变址寄存器,并具有指令可选择当前活动的基址变址寄存器,逻辑运算指令包括与、或、非、与非、或非、异或等;逻辑网表优化模块:用于对逻辑网表运行编译器优化,包括常量传递模块和死逻辑消除模块,所述常量传递模块在遇到常量时,将常量代入原理图中进行预运算,用以消除能在编译期预计算的逻辑运算,所述死逻辑消除模块用于递归删除死逻辑;逻辑切片模块:用于进行逻辑切片化简;恒真式消除模块:用于简化不影响输出端状态的前继输入;计算顺序决定模块:用于进行根节点运算优化;存储器分配模块:用于分配各个切片的存储器地址;基址变址寻址压缩模块:用于进行存储器分配优化,将原始存储器地址转换为基址变址寻址格式的地址;字节码生成模块:用于根据逻辑网表生成能够根据输入端状态计算输出端状态的、能由字节码解释器运行的字节码;字节码优化模块:用于对字节码生成模块生成的字节码进行窥孔优化以减小其体积;字节码下载模块:用于把字节码优化模块生成的字节码写入到延时模块硬件内部的字节码执行模块,运行于一台上位机里;字节码执行模块:位于延时模块上,用于执行字节码。
32.与现有技术相比,本发明具有以下有益的技术效果:本技术方案大大方便了延时模块的定制开发,大大降低了定制的成本,并保持了延时模块相比其他解决方案的一贯的高经济性和高易用性。
33.首先,本发明所使用的字节码由于除去了在延时逻辑中使用不到的复杂数值运算指令,因此其指令长度大大降低。绝大多数字节码均为单字节,消耗的存储空间和运行时内存需求相比plc大大降低,能够在资源极为匮乏的8位单片机上运行,并能够承载相当量的延时逻辑,具备极高的经济性。
34.第二,本发明的原理图编译器能够充分利用编译相关理论对逻辑运算进行简化和性能调优,同时缩减体积,这是plc的编译器所无法做到的,其最终得到的字节码代码密度高,节约存储空间,方便于在资源匮乏的8位单片机上实现成规模的延时功能。即便相比极少部分编译到底层cpu原生二进制代码的编译型plc,由于本发明的字节码存储密度高于其二进制代码存储密度,仍然具有相当强的经济优势。
35.第三,相比各种文本编程界面,如c、basic和forth,本发明的编程界面为数字逻辑原理图,易学易读易懂,只要有基本数字逻辑知识即可使用,无需任何专业知识。相比之下,plc的梯形图编程方案仍然需要理解母线等概念,过于复杂,其最终程序难于阅读和理解。
36.第四,本发明的延时模块可选地包括无线遥控手柄的接收器等硬件单元,以及实时时钟和串口通信功能,其连接性比plc和传统延时模块要好。当这些单元不需要时,对应的pcb小板或子电路不安装或不焊接即可,不会增加任何成本。
37.第五,本发明的延时模块由于代码密度高、运行资源要求低,因此核心硬件结构简单,往往仅包括一只低端8位单片机。这使得其体积较小而且往往仅包括一层电路板,能够无需外壳而仅以裸板形式出货。在极端情况下,延时“模块”可以仅仅包括一只单片机,从而可以直接作为主控焊接在产品的pcb上,将额外硬件成本直接降低到零。
38.第六,由于本发明的代码密度高、虚拟机设计简单,因此能够部署在任何使用了8位单片机作为核心的电路上,这包括了那些曾经作为预置多种延时模式的延时模块生产的模块(也即现有技术方案二)。这使得上一代延时模块产品可以通过重新烧写程序直接升级换代到本代延时模块,从而保留已有的硬件投资。
39.其次,本方法中提出的虚拟机非常好地适合延时模块的应用场景。与plc不同,本延时模块专用虚拟机仅需要做逻辑运算而不需要做数值运算,因此其指令集编码多为8位,紧凑高效;在延时逻辑的计算中,被频繁存取的存储器变量往往地址相近,因此采用基址变址寻址可大大降低占程序空间50%以上的压栈弹栈指令所需要的编码长度,进一步提高了指令集的编码密度,这也是plc所做不到的。相比于plc的指令系统,这先天就节约了存储空间,提高了指令密度,提高了产品的经济性。
40.第七,本发明的原理图编译器内置多种plc未有的优化模块,能够充分利用编译相关原理简化逻辑运算,提高代码密度和运算速度,提高产品的经济性和性能。
41.第八,相比于plc的编译系统,本发明提出的逻辑切片算法和计算顺序决定算法一方面大大减轻了程序员的负担,另一方面其安排的逻辑计算顺序经过相当优化从而能够最大限度地减少存储器用量,提高了产品的经济性。本发明中的逻辑切片算法和计算顺序决定算法是前所未有的。不能将它们与基于固定计算顺序的传统变量生存期分析方法混淆;本发明中的方法能灵活自主决定逻辑计算顺序来错开变量的生存期,比之传统静态方法具有更强的能动性,效果更好。
42.第九,本发明中的基址变址寻址方案使得绝大多数指令,尤其是占据绝对多数的压栈和弹栈指令仅占一个字节。相比于plc的双字节甚至四字节访存指令,这节约了将近一
半的存储空间,提高了产品的经济性。
附图说明
43.为了使本领域的技术人员更好地理解本发明的技术方案,下面通过对结合附图所示出的实施方式进行详细说明,本发明的上述以及其他特征将更加明显,本发明附图中相同的参考标号表示相同或相似的元素,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,在附图中:图1为本发明提供的一种编译延时逻辑原理图到字节码方法的流程图;图2为本发明一个实施例的一种编译逻辑原理图到字节码的系统结构示意框图。
具体实施方式
44.为了使本发明的目的、技术方案及优点更加清晰,以下结合附图及实施例,对本发明进行进一步详尽说明。此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
45.同样应理解,以下实施例只用于对本发明进行进一步说明,不能理解为对本发明保护范围的限制,本领域的技术人员根据本发明上述内容做出的一些非本质的改进和调整均属于本发明的保护范围。下述示例具体的工艺参数等也仅是合适范围内的一个示例,即本领域技术人员可以通过本文的说明做合适的范围内选择,而并非要限定于下文示例的具体数值。
46.以下示例性地说明本发明提供的一种编译延时逻辑原理图到字节码方法。
47.如图1所示为一种编译延时逻辑原理图到字节码方法的流程图,下面结合图1来阐述根据本发明的实施方式的一种编译延时逻辑原理图到字节码方法,所述方法包括以下步骤:步骤1,读取延时逻辑的原理图;步骤2,对原理图进行翻译得到逻辑元件门级网表;步骤3,对逻辑元件门级网表进行简化得到最简化逻辑网表;步骤4,根据最简化逻辑网表生成字节码;步骤5,对字节码进行窥孔优化减小体积得到精简化字节码;步骤6,将精简化字节码下载到延时模块内部得到定制延时模块。
48.如图2所示是本发明一个实施例的一种编译延时逻辑原理图到字节码系统结构示意框图;在本实施例中,某工程师需要为某个应用定制一款延时模块。
49.(1)工程师使用交互式原理图绘制模块绘制原理图。在绘制过程中,工程师加入的数字逻辑包括四个部分:没有优化空间的延时功能a、有可简化逻辑的延时功能b、完全没有任何输出效果的延时功能c、含有大量未简化逻辑常量运算的延时功能d。
50.(2)工程师调用原理图翻译模块,该模块读取原理图,并将原理图中包括的a、b、c、d四个部分分别转化成了与之对应的文本表达at、bt、ct、dt。
51.(3)工程师调用逻辑网表优化模块,该模块针对at、bt、ct、dt进行优化。针对没有
优化空间的at,该模块不做变换原样输出at;针对有可简化逻辑的bt,该模块输出高度优化的网表bo;针对完全不影响输出的ct,该模块将直接产生一个空输出;针对未进行常量传递的dt,该模块输出高度优化的网表do。
52.(4)工程师调用字节码生成模块,生成包括了at、bo、do三个网表的逻辑功能的字节码n。
53.(5)工程师调用字节码优化模块,将生成的字节码n进行窥孔优化等各种局部代码优化,生成最终欲下载入延时模块内的字节码k。
54.(6)工程师调用字节码下载模块,将字节码k下载入延时模块上内置的51单片机(如at89s52)之中,由延时模块内部的字节码执行模块解释执行。
55.从本实施例中可以看到,工程师编程所使用的界面为逻辑原理图界面,因此编程难度相比梯形图方式和文本方式来得要低;由于不需要在延时模块中保存源程序,编译器所含有的各个模块可以对原理图及其生成的网表和字节码进行各种激进优化,从而消除存储空间和执行时间的浪费;由于字节码仅包括逻辑运算,因此编码紧凑,能够下载到资源极度匮乏的8位低端单片机上。
56.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示意性实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
57.尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献