1.记录
记录是指一组有关联的数据。记录要有关键字(或多字),以区分不同记录。
如电量采集数据,所存的记录就是一组数,共4个字。第1个字,存年月。第2个字,存日及时段。第3、4个字,存电量累计值(用双字长)。每天分7个时段定时存储,每天7个记录。
再如以上讲的(图5-2)硫化机合模、开模,所存的记录就是一组数,共4个字。第1个字,存对应的硫化机号(3位数)及开(用A表示)或合(用B表示)模标志。第2个字,存年月。第3个字,存日时。第4个字,存分秒。只要开或合模一次,即被监测的数据有了变化,则存储一个记录。但由于硫化机工作时间是有规律的,大体每小时开合模一次。所以它每天的存储长度可预计。
再如,还是以上讲的(图5-2)硫化机的温度监测,也是按记录进行存储的。每个记录为5个字。第1个字,存对应的硫化机号。第2个字,存年月。第3个字,存日时。第4个字,存分秒。第5个字,存储当时的温度值。它也是变化存储。但只是出现超温时才存储。但什么时候超温,则是随机的,所以它每天的存储长度不好预计。
数据存储的记录除了定长的(固定格式),也有非定长的(非固定格式)。可按实际情况组织。后者,可节省存储空间,但程序的算法要复杂些。
……
组织成记录后怎么存储?存储区的地址怎么分配?方法也很多。可以是地址不固定,当数据存储时,按数据区地址升幂(或降幂)顺序依此存储。当数据满后,又回到起点,用新的记录取代旧的记录,继续存储。也可以是固定地址的,什么时候、存储在什么地址是固定的。但多数用的是地址不固定的。
什么时候存储可按时间设定,每天有固定的存储时间,这叫定时存储。也可为事件存储,当发生所定义的事件时,才存储。
数据存储方法一般用间接地址,即指针访问。这样的程序较简练。也可用在数据采集程序中用过的字移位,如图5-28、图5-29所示。只是存储区大,执行这样的移位指令,执行时间可能很长。
如有不同对象的数据记录,可一个对象存储在一个存储区。也可多对象混合存储在一个存储区。
2.定时存储
分时段记下监测量的当时值,有时还要记下当时的时间。图5-47所示为定时存储例子。
图5-47a为欧姆龙PLC程序。从图知,它先把“当前时分”与“时间设定”进行表比较。“当前时分”是从PLC时钟中读出,随时间而变。“时间设定”是一组数,按要存储的时段划分。如700代表7点0分。通道“时段”中的相应位是ON,还是OFF,与比较的结果有关。如“时间设定”的第一个数为700,而“当前时分”又正好7点0分,则“时段”通道的“时段1”位ON。
当“时段1”、“时段2”、“时段3”等ON时,将把“当前日时”等数据存入指针指向的地址。存1个数,修改一次指针(地址加1)。可见,它是定时,但变地址存储。
图5-47b为西门子PLC程序。它先读PLC的实时时钟,按READ_RTC指令使用的操作数VB10知,当前时值存于VB13字节中,而且是BCD码。然后把它与“时段1”等(也应是BCD码)进行比较,如相等,则进行记录存储。把“当前日时”等数据,存入指针指向的地址。存1个数,修改一次指针。可见,它是定时,但变地址存储。
图5-47c为三菱PLC程序。从图知,它先把“当前年月”、“日时”及“分秒”分别存于K4M60、K4M40及K4M20中。然后进行时值(D8015)与“时段1”等进行表比较。如相等,则进行记录存储。把“当前年月、日时”等数据存入D0V0的地址。存1个数,修改一次变址器V0。可见,它是定时,但变地址存储。
图5-47 定时变地址存储
在上述程序的基础上,还要有进行指针控制的程序,以确保只能在指定的数据中存储记录。图5-48所示为这个指针控制程序。
图5-48a为欧姆龙PLC程序。从图知,它始终进行“指针”与“存区起始地址”及“存区结束地址”比较。只要指针不在此区间,则用“存区起始地址”赋值给“指针”,使指针复原。对指针的这个控制,可确保数据始终在存储区中,周而复始地存储。
图5-48b为西门子PLC程序。它先根据“初始地址”及“结束地址”计算“初始指针”及“结束指针”。然后也是通过比较控制“指针”,使其始终处在“初始指针”与“结束指针”之间。
图5-48c为三菱PLC程序。它用比较控制变址器V0,使其始终处于“起始地址”与“结束地址”之间。这即可确保所存储的记录始终在指定的D区中。
图5-49所示为和利时LM机定时存储程序。它分4个时段。每个记录3个字。内容是年(高字节)月(低字节)、日(高字节)时(低字节),数据各一个字。使用了数组变量,有关变量声明如下:
图5-48 指针控制程序
图5-49中节1为启动模拟量输入功能块。节2为启动读取PLC实时时钟功能块。节3为时间段比较。节4、5、6,如果任何一个时间段设定值与当时时间比较相等,则生成脉冲信号“pCJ”。节7,在脉冲“pCJ”ON的周期,进行年月、日时及数据存储。节8,如果数组下标越界,则回初始值。
可知,执行了上述程序,只要PLC的实时时钟与时间段处的设定值相等,则先是下标加1,接着计算“年月”字的值,并向存数的数组存储。接着,下标再加1,再计算“日时”字的值,并向存数的数组存储。最后,下标再加1,并向存数的数组存储模拟量输入值。同时判断数组下标是否越界,如果越界,则返回初始值。
图5-49 定时变地址存储
3.事件存储(www.daowen.com)
发生某个事件,如监测量超限、监测量变化(对开关量),或变化超过某范围(对模拟量),就进行存储。存储时,不仅记下监测量的当时值,还要记下当时的时间。
图5-50所示为超限存储梯形图程序。但该图未把全部程序画出。
图5-50a是欧姆龙PLC程序。该程序用于图5-2介绍的轮胎硫化机温度超限记录。从图知,如“一号合模”ON,即一号机工作,则不断地进行“温度值”与“温度上限”及“温度下限”比较。一旦超限,即这里的LR14.00或LR14.01ON,则都会进行数据存储操作。这时,先是把“当前年月”存入“指针”指向的地址,后修改指针。接着存“当前日时”…以下存储在图中未画出。当然,如图5-32的指针控制程序也是绝对需要的。这里也未画出。
图5-50b为西门子PLC程序,图5-50c为三菱PLC程序。也都是用于当超温与欠温事件发生时存储记录的。
图5-50 超限存储
图5-51 和利时LM机超限存储
图5-51所示为和利时LM机超限存储梯形图程序。但是该图未把全部程序画出。用了二维数组,有关变量声明如下:
图5-51中节1为启动模拟量输入功能块。节2为启动读取PLC实时时钟功能块。节3为超限比较。这里的40000及10000值是可选的。节4、5,如果任何一个比较超限,则生成脉冲信号“ppCJ”。节6,在脉冲“pCJ”ON的周期,进行月日、时分值及模拟量输入数据存储。节8,如果数组下标越界,则回初始值。
可知,执行了上述程序,只要PLC的模拟量输入值超限,则先是计算“月日”字的值,并向存数的数组(其第2下标为1)存储。接着,再计算“时分”字的值,并向存数的数组(其第2下标为2)存储。再接着,向存数的数组(其第2下标为3)存储模拟量输入值。最后是数组第1下标加1,并判断数组下标是否越界,如越界在节7使其返回初始值。
4.固定地址存储
以上两例,都是非固定地址存储。特点是“指针”随存储修改,存储区可很大。而固定地址存储的特点是“指针”用存储事件赋值。发生什么事件,就有什么事件的“指针”值,因而该事件的数据存的地址也就固定了。图5-52所示为固定地址存储的梯形图程序。该程序是每“整5min”存储一次数据。存储地址与存储的时刻有关,是固定的。
图5-52a为欧姆龙PLC程序。从图知,它先把当前实时时钟的分值除以5。其商存于HR0中,余数存于HR1中。接着,判断HR1是否等于0。如相等,即为“整5分”,则LR11.00 ON。进而,启动数据存储。但在存储数据前,先根据“当前时分”计算指针值,然后,再按“指针”指向的地址存储“存储数据”。所有的计算与存储指令都是微分执行的。目的是确保在进入“整5分”0秒时,存数据。
从程序计算情况可知,当时间从0点0分到23点55分之间变化时,“指针”的值将在0~287之间变化。即“存储数据”将存储在DM0~DM287之间的数据区中,而且不同的存储时间,有自身的固定DM地址。
图5-52b为三菱PLC程序。从图知,它先把当前实时时钟的分值(D8014)除以5。其商存于D1000中,余数存于D1001中。接着,判断D1001是否等于0。如相等,即为“整5分”。进而启动数据存储。但在存储数据前,先根据“当前时分”计算指针值,然后再按“指针”指向的地址存储“存储数据”。所有的计算与存储指令都是微分执行的。目的是确保是在进入“整5分”0秒时,存数据。
从程序计算情况可知,当时间从0点0分到23点55分之间变化时,“指针”的值将在0~287之间变化。即“存储数据”将存储在D0~D287之间的数据区中,而且不同的存储时间,有自身的固定D区地址。
图5-52 固定地址存储
图5-52c为西门子PLC程序。从图知,它先读PLC的实时时钟,按READ_RTC指令使用的操作数VB10知,当前分值存于VB14字节中,而且是BCD码。所以要转换为字,并译成十六进制码,然后进行带余数的除5运算。本例余数存于VW30中,商存于VW32中。接着判断VW30等于0否?如相等,即为“整5分”。进而,启动数据存储。但在存储数据前,先根据“当前时分”计算指针值,然后,再按“指针”指向的地址存储“存储数据”。所有的计算与存储指令,都是微分执行的。目的是确保是在进入“整5分”0秒时,存数据。
从程序计算情况可知,当时间从0点0分到23点55分之间变化时,“指针”的值将在0~574之间变化。即“存储数据”将存储在VW0~VWD574之间的数据区中,而且不同的存储时间,有自身的固定D区地址。
图5-52d所示为和利时LM机程序。程序所用变量声明如下:
图5-52d中节1为启动模拟量输入功能块。节2为启动读取PLC实时时钟功能块。节3为对当时的时间的分值,求“模5”的运算。如果结果为0,即当时时间为0、5、10…分,则“pCJ”ON。节4、5,如果“pCJ”ON,则生成脉冲信号“ppCJ”。节6,在脉冲“pCJ”ON的周期,进行地址计算,并根据计算结果指向的地址,存储模拟量输入数据。
可知,执行了上述程序,只要PLC当时时间为0、5、10...分,则先是根据当时的时分,计算数组下标。这里是“小时”值乘12,再与当时的“分”值除5后相加。并以这个计算结果值作为下标值,用于数据存储。
从程序计算情况可知,当时间从0点0分到23点55分之间变化时,“指针”的值将在0~287之间变化。即“存储数据”将在cunshu[0]到cunshu[287]之间的数据区中,而且不同的存储时间,有自身的固定下标值。
固定地址存储时,时间值可以不存。从地址即可知道它是什么时间的“存储数据”。也很节省存储空间。
5.多对象存储
非固定地址存储,可存储多个对象。如图5-2轮胎硫化机实时记录,用的就是这种存储。它把各个轮胎硫化机的数据,都存储在一个4K字的存储区中。用统一的存储指针存储。但不同的轮胎硫化机,有不同的关键字,用关键字区分它们的记录。
多对象存储把存储区连成一片,较节省存储空间。而且上位机读此数据时,也简单,发一个读命令,等着接收与应答即可。上位机读取数据后,可按标志的不同,把数据分开,并进行处理及存储。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。