发明内容
本发明要解决的技术问题在于,针对上述中型PLC可靠性不高及成本较高的问题,提供一种可编程逻辑控制器及实现方法。
本发明解决上述技术问题的技术方案是,提供一种可编程逻辑控制器,包括用于存储系统程序的NOR闪存;所述系统程序包括第一级程序、第二级程序,其中第一级程序为无需更新的系统程序,第二级程序为需要更新的系统程序;所述NOR闪存包括用于存储第一级程序的第一存储区、用于存储第二级程序的第二存储区及用于存储第二级程序的备份文件的第三存储区。
在本发明所述的可编程逻辑控制器中,所述可编程逻辑控制器包括第一校验单元、第二校验单元、第三校验单元及第四校验单元;所述NOR闪存包括第一标志位、第一校验位、第二标志位及第二校验位;所述第一校验单元,用于在第一级程序启动后读取第一标志位并在第一标志位被置位时启动第二校验单元、否则使用第三存储区中的第二级程序的备份文件更新第二存储区;所述第二校验单元,用于读取第二存储区中的第二级程序并在第二级程序的校验值等于第一校验位的值时启动第三校验单元、否则使用第三存储区中的第二级程序的备份文件更新第二存储区;所述第三校验单元,用于读取第二标志位并在所述第二标志位被置位时启动第四校验单元、否则使用第二存储区中的第二级程序更新第三存储区;所述第四校验单元,用于读取第三存储区中的第二级程序的备份文件并在所述第二级程序的备份文件的校验值与第二校验位相同且该备份文件与第二存储区中的第二级程序版本一致时启动第二级程序、否则使用第二存储区中的第二级程序更新第三存储区。
在本发明所述的可编程逻辑控制器中,所述可编程逻辑控制器包括用于更新第二存储区中的第二级程序的第一更新单元、第一更新校验单元以及用于更新第三存储区中的第二级程序的备份文件的第二更新单元;所述第一更新单元在第二级程序更新前将第一标志位及第一校验位清零并在第二级程序更新完成后将第一标志位置位、将第二级程序的校验值写入第一校验位及启动所述第一更新校验单元;所述第一更新校验单元,用于在第一标志位被置位且第二存储区中的第二级程序的校验值等于第一校验位的值时使第二更新单元更新第三存储区的备份文件、否则使第一更新单元重新更新第二存储区中的第二级程序;所述第二更新单元在第二级程序的备份文件更新前将第二标志位及第二校验位清零并在所述备份文件更新完成后将第二标志位置位、将备份文件的校验值写入第二校验位。
在本发明所述的可编程逻辑控制器中,所述可编程逻辑控制器还包括用于存储用户数据的NAND闪存,所述NAND闪存包括用于存储用户数据区、备份数据区、第三标志位、第三校验位、第四标志位及第四校验位,所述可编程逻辑控制器包括第五校验单元、第六校验单元、第七校验单元及第八校验单元;所述第五校验单元,用于在第二级程序启动后读取第三标志位并在所述第三标志位被置位时启动第六校验单元、否则使用备份数据区的数据更新用户数据区;所述第六校验单元,用于读取用户数据区并在所述用户数据区的校验值等于第三校验位的值时启动第七校验单元、否则使用备份数据区的数据更新用户数据区;所述第七校验单元,用于读取第四标志位并在所述第四标志位被置位时启动第八校验单元、否则使用用户数据区的数据更新备份数据区;所述第八校验单元,用于备份数据区并在备份数据区的校验值与第四校验位不同或该备份数据区中的数据版本与用户数据区中数据的版本不一致时使用用户数据区中的数据更新备份数据区、否则启动用户数据区的数据。
在本发明所述的可编程逻辑控制器中,所述可编程逻辑控制器包括用于更新用户数据区的第三更新单元、第二更新校验单元以及用于更新备份数据区的第四更新单元;所述第三更新单元在用户数据区更新前将第三标志位及第三校验位清零并在用户数据区更新完成后将第三标志位置位、将用户数据区的校验值写入第三校验位及启动所述第二更新校验单元;所述第二更新校验单元,用于在第三标志位被置位且用户数据区的校验值等于第三校验位的值时使第四更新单元更新备份数据区、否则使第三更新单元重新更新用户数据区;所述第四更新单元在备份数据区更新前将第四标志位及第四校验值清零并在所述备份数据区更新完成后将第四标志位置位并将备份数据区的校验值写入第四校验位。
本发明还提供一种可编程逻辑控制器的实现方法,包括以下步骤:
(a)将第一级程序存储到NOR闪存的第一存储区,其中所述第一级程序为无需更新的系统程序;
(b)将第二级程序存储到NOR闪存的第二存储区,所述第二级程序为需要更新的系统程序;
(c)将第二级程序的备份文件存储到NOR闪存的第三存储区。
在本发明所述的可编程逻辑控制器的实现方法中,所述步骤(b)包括:将所述NOR闪存中的第一标志位置位并将第二级程序的校验值写入第一校验位;所述步骤(c)包括:将所述NOR闪存中的第二标志位置位并将备份文件的校验值写入第二校验位;该方法还包括载入系统程序且载入系统程序包括以下步骤:
(d)在第一级程序启动后读取第一标志位并在第一标志位被置位时执行步骤(e),否则执行步骤(f);
(e)读取第二存储区中的第二级程序并计算该第二级程序的校验值,在所述第二级程序的校验值等于第一校验位的值时执行步骤(g),否则执行步骤(f);
(f)使用第三存储区中的第二级程序的备份文件更新第二存储区,并返回步骤(d);
(g)读取第二标志位并在所述第二标志位被置位时执行步骤(i);否则执行步骤(h);
(h)使用第二存储区中的第二级程序更新第三存储区,并执行步骤(i);
(i)读取并计算第三存储区中的备份文件的校验值并在所述备份文件的校验值与第二校验位相同且所述备份文件与第二存储区中的第二级程序版本一致时启动第二级程序,否则返回步骤(h)。
在本发明所述的可编程逻辑控制器的实现方法中,该方法还包括更新系统程序且更新系统程序包括以下步骤:
(j)将第一标志位及第一校验位清零并更新第二级程序,在第二级程序更新完成后将第一标志位置位并将第二级程序的校验值写入第一校验位;
(k)判断第一标志位是否被置位及第二存储区中的第二级程序的校验值是否等于第一校验位的值,并在第一标志位被置位且第二存储区中的第二级程序的校验值等于第一校验位的值时执行步骤(l),否则返回步骤(j);
(l)将第二标志位及第二校验位清零并更新第二级程序的备份文件,并在所述备份文件更新完成后将第二标志位置位并将备份文件的校验值写入第二校验位。
在本发明所述的可编程逻辑控制器的实现方法中,该方法还包括:
将用户数据存储到NAND闪存的用户数据区,同时将NAND闪存的第三标志位置位并将用户数据区的校验值写入NAND闪存的第三校验位;
将用户数据的备份文件存储到备份数据区,同时将NAND闪存的第四标志位置位并将备份数据区的校验值写入NAND闪存的第四校验位;
该方法还包括载入用户数据且载入用户数据包括以下步骤:
(m)在第二级程序启动后读取第三标志位并在所述第三标志位被置位时执行步骤(n),否则执行步骤(o);
(n)读取用户数据区并在所述用户数据区的校验值等于第三校验位的值时执行步骤(p),否则执行步骤(o);
(o)使用备份数据区的数据更新用户数据区,并执行步骤(n);
(p)读取第四标志位并在所述第四标志位被置位时执行步骤(q),否则执行步骤(r);
(q)读取备份数据区并计算备份数据区的校验值,在备份数据区的校验值与第四校验位相同且备份数据区中的用户数据版本与用户数据区的用户数据版本一致时启动用户数据区的用户数据,否则执行步骤(r);
(r)使用用户数据区的数据更新备份数据区,并返回步骤(q)。
在本发明所述的可编程逻辑控制器的实现方法中,该方法还包括更新用户数据且更新用户数据包括:
(s)将第三标志位及第三校验位清零并更新用户数据区,在用户数据区更新完成后将第三标志位置位并将用户数据区的校验值写入第三校验位;
(t)判断第三标志位是否被置位及用户数据区中数据的校验值是否等于第三校验位的值,并在第三标志位被置位且用户数据区的校验值等于第三校验位的值时执行步骤(u),否则执行步骤(s);
(u)将第四标志位及第四校验位清零并更新备份数据区,在所述备份数据区更新完成后将第四标志位置位并将备份数据区的校验值写入第四校验位。
本发明的可编程逻辑控制器及实现方法,通过将系统程序分级存储NOR闪存的不同存储区,提高了可编程逻辑控制器的可靠性。并且,本发明通过PLC系统程序加载及更新过程中的自动判断及自动修复,可进一步提高系统可靠性。此外,本发明将用户数据存储在NAND闪存,并提供用户数据载入及更新时的自动判断及自动修复,不仅降低了产品成本,而且提高了系统的可靠性。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,是本发明可编程逻辑控制器实施例的示意图。本实施例中的可编程逻辑控制器(PLC)包括用于存储系统程序的NOR闪存。由于NOR闪存为非易失性存储设备,且在数据存储时不易出现位交换现象,因此可保证数据存储的可靠性。同时,在可编程逻辑控制器中,系统程序占有的数据量较小,且更新频度较低,因此采用NOR闪存存储系统程序不会过多增加系统成本。
上述NOR闪存包括第一存储区11、第二存储区12及第三存储区13;而系统程序则包括第一级程序、第二级程序,其中第一级程序为无需更新的系统程序(例如初始化基本硬件、下载接口以及根据第二级程序的完整性做相应处理的程序等),第二级程序为需要更新的系统程序(例如系统驱动程序和单板应用程序等)。上述NOR闪存的第一存储区11用于存储第一级程序;第二存储区12用于存储第二级程序;第三存储区13及用于存储第二级程序的备份文件。通过将需更新的系统程序进行备份,可进一步提高系统的可靠性。
上述NOR闪存中的系统程序可通过一个烧录模块完成,即通过该烧录模块将第一级程序写入NOR闪存的第一存储区、将第二级程序写入NOR闪存的第二存储区、将第二级程序的备份文件写入第三存储区。
如图2所示,本发明的可编程逻辑控制器还可包括加载模块,相应地,上述NOR闪存除了三个存储区,还包括第一标志位、第一校验位、第二标志位及第二校验位。上述第一标志位、第一校验位、第二标志位及第二校验位与系统程序同时写入到NOR闪存(例如通过烧录模块)。本实施例中的加载模块包括第一校验单元21、第二校验单元22、第三校验单元23及第四校验单元24。上述加载模块可由可编程逻辑控制器的中央处理单元执行第一级程序中的代码实现(由于第一级程序不会更新,因此可保证其执行时不会出现异常),也可通过单独的硬件和软件实现。
第一校验单元21用于在第一级程序启动后读取第一标志位并在第一标志位被置位时(表示第二存储区12中的第二级程序完整)启动第二校验单元22、否则使用第三存储区13中的第二级程序的备份文件更新第二存储区12(包括重新写入第一标志位及第一校验位的值,即自动修复第二级程序)并重新启动第一校验单元21。
第二校验单元22用于读取第二存储区12中的第二级程序并计算该第二级程序的校验值,在上述校验值等于第一校验位的值时启动第三校验单元23、否则使用第三存储区13中的第二级程序的备份文件更新第二存储区12(包括重新写入第一标志位及第一校验位的值)并重新启动第一校验单元21。
第三校验单元23用于读取第二标志位并在第二标志位被置位时(表示备份文件完整)启动第四校验单元24、否则使用第二存储区中的第二级程序更新第三存储区(包括重新写入第二标志位及第二校验位,实现备份文件校验)并重新启动第三校验单元23。
第四校验单元24用于读取第三存储区13中的第二级程序的备份文件并计算该备份文件的校验值,在上述校验值与第二校验位的值相同且该备份文件的版本与第二存储区中的第二级程序版本一致时启动第二级程序、否则使用第二存储区中的第二级程序更新第三存储区并重新启动第三校验单元23。
在上述的可编程逻辑控制器中,还可包括更新模块,且该更新模块第一更新单元31、第一更新校验单元32以及第二更新单元33。上述更新模块也可由可编程逻辑控制器的中央处理单元执行第一级程序中的代码实现,或通过单独的硬件和软件实现。
更新模块可先把更新的系统程序放置到内存中,然后通过第一更新单元31、第一更新校验单元32以及第二更新单元33将内存中的系统程序更新第二存储区12和第三存储区13,并把程序完整标志及校验值写入相应标志位和校验位。
第一更新单元31用于更新第二存储区12中的第二级程序。该第一更新单元31在第二级程序更新前将第一标志位及第一校验位清零并在第二级程序更新完成后将第一标志位置位、将第二级程序的校验值写入第一校验位。
第一更新校验单元32在第一更新单元31写入第一校验值完毕之后,检测第一标志位是否被置位并检测第二存储区中的第二级程序的校验值是否等于第一校验位的值。若第一标志位被置位且第二级程序的校验值准确,则使第二更新单元33更新第三存储区13,否则使第一更新单元31重新更新第二存储区。
第二更新单元33用于更新第三存储区中的第二级程序的备份文件。该第二更新单元33在第二级程序的备份文件更新前将第二标志位及第二校验位清零并在备份文件更新完成后将第二标志位置位、将备份文件的校验值写入第二校验位。在第二更新单元33更新完毕,也可再通过一个更新校验单元(与第一更新校验单元相同)对备份文件的更新进行相同的校验。
通过在系统程序更新时的可靠性设计,保证了第二存储区12和第三存储区13中必有一个分区的第二级程序是正确的(即在检验第二存储区12更新正确后才更新第三存储区13)。由于总是先更新第二存储区12的系统程序,因此第二存储区12中的系统程序版本号不会比第三存储区13中的系统程序低。
在上述可编程逻辑控制器中,还可包括用于存储用户数据(包括用户程序和数据)的NAND闪存,该NAND闪存包括用于存储用户数据区(用于存储PLC正常运行时的用户数据)、备份数据区(用作用户数据区的备份)。由于可编程逻辑控制器中用户数据容量较大,采用NAND闪存存储该部分数据可有效降低系统成本。该NAND闪存中包括第三标志位、第三校验位、第四标志位及第四校验位,用于标识用户数据区及备份数据区的完整性和准确性。
上述NAND闪存中的数据(包括用户数据、标志位、校验位)也可通过烧录模块写入。
为实现NAND闪存中用户数据的加载,上述加载模块还可包括第五校验单元25、第六校验单元26、第七校验单元27及第八校验单元28。
第五校验单元25用于在第二级程序启动后(即系统程序启动后)读取NAND闪存中的第三标志位并在该第三标志位被置位时(即用户数据区完整)启动第六校验单元26、否则使用备份数据区的数据更新用户数据区并重新启动第五校验单元25。
第六校验单元26用于读取用户数据区数据并计算该用户数据区的数据的校验值,在上述校验值等于第三校验位的值时启动第七校验单元27、否则使用备份数据区的数据更新用户数据区(即用户数据自动修复)并重新启动第五校验单元25。
第七校验单元27用于读取第四标志位并在第四标志位被置位时(即备份数据区完整)启动第八校验单元28、否则使用用户数据区的数据更新备份数据区(即备份数据区自动修复)并重新启动第七校验单元27。
第八校验单元28用于读取备份数据区的数据并计算该数据的校验值,在备份数据区的校验值与第四校验位相同且备份数据区中的用户数据版本与用户数据区的用户数据一致时启动用户数据、否则使用用户数据区中的数据更新备份数据区。
为更新NAND闪存中的用户数据,可编程逻辑控制器的更新模块可包括第三更新单元34、第二更新校验单元35以及第四更新单元36。
第三更新单元34用于更新用户数据区的用户数据。该第三更新单元34在用户数据区更新前将第三标志位及第三校验位清零并在用户数据区更新完成后将第三标志位置位、将用户数据区的校验值写入第三校验位。
第二更新校验单元35用于在第三校验值写入完成后,检测第三标志位是否被置位及用户数据区的校验值是否等于第三校验位的值,并在第三标志位被置位且用户数据区校验值准确时使第四更新单元更新备份数据区、否则使第三更新单元34重新更新用户数据区。
第四更新单元36用于更新备份数据区。该第四更新单元36在备份数据区更新前将第四标志位及第四校验值清零并在备份数据区更新完成后将第四标志位置位并将备份数据区的校验值写入第四校验位。在第四更新单元36更新备份数据区完成后,也可采用一个更新校验单元对备份数据区的用户数据进行校验。
用户数据更新时的可靠性设计保证了用户数据区和备份数据区必有一个分区的用户数据是正确的。
如图4所示,是本发明可编程逻辑控制器实现方法实施例的流程示意图,该方法包括以下步骤:
步骤S41:将第一级程序存储到NOR闪存的第一存储区,其中第一级程序为无需更新的系统程序(例如初始化基本硬件、下载接口以及根据第二级程序的完整性做相应处理的程序等)。
步骤S42:将第二级程序存储到NOR闪存的第二存储区,第二级程序为需要更新的系统程序(例如系统驱动程序和单板应用程序等)。该步骤中可包括将NOR闪存中的第一标志位置位并将第二级程序的校验值写入第一校验位,上述第一标志位及第一校验位分别用于标识第二存储区中的第二级程序是否完整及第二级程序的校验值。
步骤S43:将第二级程序的备份文件存储到NOR闪存的第三存储区。该步骤中可包括将NOR闪存中的第二标志位置位并将第二级程序的备份文件的校验值写入第二校验位,上述第二标志位及第二校验位分别用于标识第三存储区中的第二级程序的备份文件是否完整及备份文件的校验值。
上述步骤S41-43可在可编程逻辑控制器出厂之前执行。
如图5所示,是本发明可编程逻辑控制器实现方法的系统程序加载的流程图。该系统程序的加载过程包括以下步骤:
步骤S51:在第一级程序启动后读取第一标志位并在第一标志位被置位时执行步骤S52,否则执行步骤S53。
步骤S52:读取第二存储区中的第二级程序并计算该第二级程序的校验值,在第二级程序的校验值等于第一校验位的值时执行步骤S54,否则执行步骤S53。
步骤S53:使用第三存储区中的第二级程序的备份文件更新第二存储区,并返回步骤S51。
步骤S54:读取第二标志位并在第二标志位被置位时执行步骤S56;否则执行步骤S55。
步骤S55:使用第二存储区中的第二级程序更新第三存储区,并执行步骤S56。
步骤S56:读取并计算第三存储区中的备份文件的校验值并在所述备份文件的校验值与第二校验位相同且所述备份文件与第二存储区中的第二级程序版本一致时执行步骤S57,否则执行步骤S55。
步骤S57:启动第二级程序。
如图6所示,是本发明可编程逻辑控制器实现方法的系统程序更新的流程图。如图所示,更新系统程序包括以下步骤:
步骤S61:将第一标志位及第一校验位清零并更新第二级程序,在第二级程序更新完成后将第一标志位置位并将第二级程序的校验值写入第一校验位。
步骤S62:判断第以标志位是否被置位及第二存储区中的第二级程序的校验值是否等于第一校验位的值在第一标志位被置位且第二存储区中的第二级程序的校验值等于第一校验位的值时执行步骤S63,否则返回步骤S61。
步骤S63:将第二标志位及第二校验位清零并更新第二级程序的备份文件,并在备份文件更新完成后将第二标志位置位并将备份文件的校验值写入第二校验位。
在可编程逻辑控制器出厂前,可将用户数据存储到NAND闪存的用户数据区,同时将NAND闪存的第三标志位置位并将用户数据区的校验值写入NAND闪存的第三校验位;将用户数据的备份文件存储到备份数据区,同时将NAND闪存的第四标志位置位并将备份数据区的校验值写入NAND闪存的第四校验位。此时,如图7所示,加载用户数据包括以下步骤:
步骤S71:在第二级程序启动后读取第三标志位并在第三标志位被置位时执行步骤S72,否则执行步骤S73。
步骤S72:读取用户数据区并在用户数据区的校验值等于第三校验位的值时执行步骤S74,否则执行步骤S73。
步骤S73:使用备份数据区的数据更新用户数据区,并执行步骤S71。
步骤S74:读取第四标志位并在第四标志位被置位时执行步骤S75,否则执行步骤S76。
步骤S75:读取备份数据区并计算备份数据区的校验值,在备份数据区的校验值与第四校验位相同且备份数据区中的用户数据版本与用户数据区的用户数据版本一致时执行步骤S77,否则执行步骤S76。
步骤S76:使用用户数据区的数据更新备份数据区,并返回步骤S74。
步骤S77:启动用户数据区的用户数据。
如图8所示,是本发明可编程逻辑控制器实现方法的用户数据更新的流程图。更新用户数据具体包括:
步骤S81:将第三标志位及第三校验位清零并更新用户数据区,在用户数据区更新完成后将第三标志位置位并将用户数据区的校验值写入第三校验位。
步骤S82:判断第三标志位是否被置位及用户数据区的校验值是否等于第三校验位的值,并在第三标志位被置位且用户数据区的校验值等于第三校验位的值时执行步骤S83,否则执行步骤S81。
步骤S83:将第四标志位及第四校验位清零并更新备份数据区,在备份数据区更新完成后将第四标志位置位并将备份数据区的校验值写入第四校验位。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。