PLC教程理论篇之PLC用作数据终端三一、数据存贮数据采集也是存储,是把I/O通道的数据存到指定的内存地址中。但它的存储区小,只是数据暂存。有了新数据,旧的将被取代。而数据存储则是新旧数据依次存储。有了新数据,旧的不被取代,而是与旧的同在。当然,这个“同在”是有限制的,与存储区的大小及每次存储的数据量有关。存储区大,数据量小,则“同在”的新旧数就多。反之,就少。而且,为了便于使用所存储的数据,一般在进行存储前,先要按一定格式,把数据组织成记录,再按一个个纪录,连续地存储在一个数据区中。此外,为了节省存贮空间,也可压缩存贮。为了安全,也可加密存贮。1.记录存储记录:是指一组有关联的数据。记录要有关键字(或多字),以区分不同记录。如电量采集数据,所存的记录就是一组数,共4个字。第1个字,存年月。第2个字,存日及时段。第3、4个字,存电量累计值(用双字长)。每天分7个时段定时存贮,每天7个记录。数据存储的记录除了定长的(固定格式),也有非定长的(非固定格式)。可按实际情况组织。后者,可节省存储空间,但程序的算法要复杂些。组织成记录之后怎么存储?存储区的地址怎么分配?方法也很多。可以是地址不固定,当数据存储时,按数据区地址升幂(或降幂)顺序依此存储。当数据满后,又回到起点,用新的纪录取代旧的纪录,继续存储。也可以是固定地址的,什么时候、存储在什么地址是固定的。但多数用的是地址不固定的。什么时候存储可按时间设定,每天有固定的存储时间,这叫定时存储。也可为事件存储,当发生所定义的事件时,才存储。数据存储方法一般用间接地址,即指针访问。这样的程序较简练。也可用在数据采集程序中用过的字移位,如图14-9、图14-19所示。只是存储区大,执行这样的移位指令,执行时间可能很长。如有不同对象的数据记录,可一个对象存储在一个存储区。也可多个对象混合存储在一个存储区。定时存贮:分时段记下监测量的当时值,有时还要记下当时的时间。图14-13示的为定时存储例子。a—OMRONPLC程序b—西门子PLC程序c—三菱PLC程序图14-13定时变地址存储图a为OMRONPLC程序。从图知,它先把“当前时分”与“时间设定”进行表比较。“当前时分”是从PLC时钟中读出,随时间而变。“时间设定”是一组数,按要存储的时段划分。如700代表7点0分。通道“时段”中的相应位是ON,还是OFF,与比较的结果有关。如“时间设定”的第一个数为700,而“当前时分”又正好7点0分,则“时段”通道的“时段1”位ON。等等。当这“时段1”等ON时,将把“当前日时”等数据,存入指针指向的地址。存1个数,修改一次指针(地址加1)。可见,它是定时,但变地址存储。图b为西门子PLC程序。它先读PLC的实时时钟,按READ_RTC指令使用的操作数VB10知,当前时值存于VB13字节中,而且是BCD码。然后把它与“时段1”等(也应是BCD码)进行比较,如相等,则进行记录存贮。把“当前日时”等数据,存入指针指向的地址。存1个数,修改一次指针。可见,它是定时,但变地址存储。图c为三菱PLC程序。从图知,它先把“当前年月”、日时”及“分秒”分别存于K4M60、K¥M40及K4M20中。然后进行时值(D8015)与“时段1”等进行表比较。如相等,则进行记录存贮。把“当前年月、日时”等数据,存入D0V0的地址。存1个数,修改一次变址器V0。可见,它是定时,但变地址存储。在上述程序的基础上,还要有进行指针控制的程序,以确保只能在在指定的数据中存贮记录。图14-14示的为这个指针控制程序。a—OMRONPLC程序b—西门子PLC程序c—三菱PLC程序图14-14指针控制程序图a为OMRONPLC程序。从图知,它始终进行“指针”与“存区起始地址”及“存区结束地址”比较。只要指针不在此区间,则用“存区起始地址”赋值给“指针”,使指针复原。对指针的这个控制,可确保数据始终在存储区中,周而复始地存储。图b为西门子PLC程序。它先根据“初始地址”及“结束地址”计算“初始指针”及“结束指针”。然后也是通过比较控制“指针”,使其始终处在“初始指针”与“结束指针”之间。图c为三菱PLC程序。它用比较控制变址器V0,使其始终处于“起始地址”与“结束地址”之间。这即可确保所存贮的记录始终在指定的D区中。事件存贮:发生某个事件,如监测量超限、监测量变化(对开关量),或变化超过某范围(对模拟量),就进行存贮。存贮时,不仅记下监测量的当时值,还要记下当时的时间。图14-15示的为超限存储梯形图程序。但该图未把全部程序画出。a—OMRONPLC程序b—西门子PLC程序c—三菱PLC程序图14-16固定地址存储图a为OMRONPLC程序。从图知,它先把当前实时时钟的分值除以5。其商存于HR0中,余数存于HR1中。接着,判断HR1是否等于0。如相等,即为“整5分”,则LR11.00ON。进而,启动数据存储。但在存储数据前,先根据“当前时分”计算指针值,然后,再按“指针”指向的地址存储“存储数据”。所有的计算与存储指令,都是微分执行的。目的是确保是在进入“整5分”0秒时,存数据。从程序计算情况可知,当时间从0点0分到23点55分之间变化时,“指针”的值将在0到287之间变化。即“存储数据”将存储在DM0到DM287之间的数据区中,而且,不同的存储时间,有自身的固定DM地址。图b为三菱PLC程序。从图知,它先把当前实时时钟的分值(D8014)除以5。其商存于D1000中,余数存于D1001中。接着,判断D1001是否等于0。如相等,即为“整5分”。进而,启动数据存储。但在存储数据前,先根据“当前时分”计算指针值,然后,再按“指针”指向的地址存储“存储数据”。所有的计算与存储指令,都是微分执行的。目的是确保是在进入“整5分”0秒时,存数据。从程序计算情况可知,当时间从0点0分到23点55分之间变化时,“指针”的值将在0到287之间变化。即“存储数据”将存储在D0到D287之间的数据区中,而且,不同的存储时间,有自身的固定D区地址。图c为西门子PLC程序。从图知,它先读PLC的实时时钟,按READ_RTC指令使用的操作数VB10知,当前分值存于VB14字节中,而且是BCD码。所以,要转换为字,并译成16进制码,然后进行带余数的除5运算。本例余数存于VW30中,商存于VW32中。接着,判断VW30等于0否?等。如相等,即为“整5分”,。进而,启动数据存储。但在存储数据前,先根据“当前时分”计算指针值,然后,再按“指针”指向的地址存储“存储数据”。所有的计算与存储指令,都是微分执行的。目的是确保是在进入“整5分”0秒时,存数据。从程序计算情况可知,当时间从0点0分到23点55分之间变化时,“指针”的值将在0到574之间变化。即“存储数据”将存储在VW0到VWD574之间的数据区中,而且,不同的存储时间,有自身的固定D区地址。固定地址存储时,时间值可不存。因从地址,即可知道它是什么时间的“存储数据”。也很节省存储空间。多对象存储:非固定地址存储,可存储多个对象。用统一的存储指针存储。但不同的数据,有不同的关键字,用关键字区分它们的记录。多对象存储把存储区连成一片,较节省存储空间。而且,上位机读此数据时,也简单,发一个读命令,等着接收与应答即可。上位机读取数据后,可按标志的不同,把数据分开,并进行处理及存储。2.压缩存储为了节省数据的存储空间,可对数据编码长度进行压缩。数据压缩后,再行存贮,即压缩存贮。读取压缩存贮的数据要解压缩,才能清楚它的含义。一般讲,这是上位计算机要作的事。只要清楚数据是怎么压缩的,解压缩是不难的。压缩存储不仅节省存储空间,而且,也节省数传输的开销。数据压缩分为两种:一种和语义无关,压缩时只从数据的形式出发,不涉及数据信息内容,这种技术适用于任何数据。另一种与语义相关,压缩时考虑数据信息内容和语义,去掉其中一些冗余的信息。计算机常用的压缩技术有模式替代、压缩重复字符、免写空字域、编码替代、不等长编码、相邻数据利用、消除冗余信息等。对PLC,最基本数据压缩技术有:用16进制码取代BCD码BCD码中每一位都用4位二进制数存放,表达的数字仅是0到9,10个数码。其实,4位二进制数可表达16个数码。所以,用BCD码存数存在资源浪费。一个字(16位二进制数),用以表达(或存)BCD码数,最大只能到9999。而用以表达(或存)16位二进制数,最大可达65535。如果预先将它转换成二进制就能节省很多存储空间,而且还便于算术运算。合并数据代替单独数据日期数据,有年、月、日,要用两个字,4个字节,表示。如2004年6月30日,则写成2004(一个字),06(一个字节),30(一个字节)。当然,如千年不考虑,用3个字节也可,如上例,用04,06,30也可表示。如把这数据合并,合并后再存储,就不要3个字节了。合并数据的方法是,各合并数先加权,后相加。如本例月的先乘40(一个月最多31天,为了好算),年先乘400(年最多366天、考虑润年,为了好算),日不乘。这样,2004,06,30的日期,合成的值将是1690。如果计算到2099年12月31日,则此值为44431。用16进制格式存储这个数,两个字节就够了。存储长度压缩了3份之1。数据还元也不难,如1690,先被400整除,得4,即2004年。再把它的余数,270,被40整除,得6,即6月。而后者的余数,30,即30日。处理时、分、秒,也可用类似方法。但为了充分利用内存,最好把年(只考虑80年)、日、时,分在一组,用一个字存,而月、分、秒,分在一组,也用一个字存。两个字,即可把本应用3个字才能存的年、月、日、时、分、秒,进行存储。存相对值而不存绝对值:对数值数据可以采取求差法,例如电量,存增量,一个字节就够了。需得知月累计值,可在读出数据后计算。但,这么做,数据不太安全。万一有一次存储数据丢失,累计值就不对了。故一般不用。以位(BIT)计算存贮单位每个记录不以字或字节为单位,而二进制位(BIT)为单位,计算存储长度。这可充分利用剩余的二进制位,提高存储效率。只是算法复杂些。高级数据压缩技术:原则上说,数据压缩技术与数据的语义有关。合理的压缩是去掉数据中的无关信息,而保存有关信息。数据的形式虽有变化,但它所保存的有关语义信息没有变化。具体的方法很多。在此不多介绍了。问题:数据压缩也带来一些问题。数据压缩会增加程序系统的复杂性;被压缩后的数据可能会失掉原有的良好的标准形式,降低它的通用性、可移植性及可靠性。因此,是否采用压缩技术需要根据具体问题来决定。2.安全存储数据安全:是指,数据不能丢失,即使丢失,最好也能找回来;不能被没有授权的人读写,即使把数据读取了,也令其无法使用。对PLC,做到数据不丢失是不难的。因为它的数据存贮区都是,或都可是掉电保护的。即使停电了,其所存的数据也不会丢失。再就是,在程序上,要使用好地址及控制好指针,确保存贮区的数据不被误改写也是可能的。能把丢失的数据找回来,就要作数据备份。数据备份可使用内存卡。这对PLC也是很容易实现的。读写保护:为了数据安全,作好写保护是需要的。OMRONPLC进入运行方式,其数据只能由指令写,人工或通讯,都不能写。这也是很好的数据保护。有的PLC为防止在联网中,或外设操作中,数据丢失,或不宜被别人访问,设有相应的管理指令或设定。执行了这类指令,或作了这些设定,数据将不会被读写。可确保数据安全。数据加密:如果读写保护不好实现,也可对数据加密,这样,即使数据被人读取了,但他如不知是怎么加密的,则也无法理解其含义,也可保证数据安全。加密是对数据进行混乱的拼凑或者隐藏信息的过程,从而使数据难以理解,除非进行解密或者破译,把它转换成原始的样子。加密是防止非法使用数据的最后一道防线。在使用这些数据和文件之前再将其还原成原来样子,称为解密。密码数据被第三者截获,探知其真实内容,称为破译。其实,数据压缩后,如不知加压的算法,也无法解压。这样的数据也等于是加密的数据。被读走,也无妨。数据加密的方法通常是用一个通用的算法再加上一个密钥。算法可以是公开的,但密钥是