理论教育 模拟量采集及变化跟踪示例

模拟量采集及变化跟踪示例

时间:2023-07-01 理论教育 版权反馈
【摘要】:所以,当模拟量输入通道有了新的数时,也就完成了模拟量采集。本例指定的为IW0,即模拟量输入模块的输入字。同时,把模拟量当时的值赋值给数组下标最低的单元。模拟量输入数据。即跟踪被采集量,视其变化情况,若被采集量的变化超过某个范围,则存储,并同时记下这时的时间。图5-29 变化采集图5-29a为欧姆龙PLC程序。

模拟量采集及变化跟踪示例

PLC的模拟量是从模拟量输入单元读取的。而且这个读取时间的延迟是很短的。一般为PLC扫描周期级的。个别的,如C200H-TS001之类温度检测单元要做一些平均数计算,为秒级。所以,当模拟量输入通道有了新的数时,也就完成了模拟量采集。图5-27所示梯形图即为这样一个转换程序。

978-7-111-39745-8-Chapter06-35.jpg

图5-27 转换程序

图5-27a程序为用于CPM1A_MA002单元的数据读入。因该模入单元读入的是8位二进制数,故一个模入通道读入的是两路数据,须把它分开。该图程序所作的就是这个工作。它把模入通道1读入的数据分成“第一路二进制码输入值”及“第二路二进制码输入值”。

图5-27b程序用于S7-200 EM231模块单极性使用时的转换程序。它的原始数据格式为

978-7-111-39745-8-Chapter06-36.jpg

所以,使用应左移3位。图5-27b程序中VW0就是左移3位后的数据。

图5-27c程序用于FX0N3A模块的数据读入程序。这里用了RD3A指令采集数据。指令中K0为模块号0,K1、K2为模拟量模块上的输入通道1、2。执行本程序的功能是不停地读取模拟量模块输入通道1、2的数据,并分别存储在D0及D1中。

提示:模拟量采集程序所用的指令及地址不仅与PLC的类型有关,还与模块的类型及其安装情况有关。设计这个程序,应参照所使用模块的有关说明书进行。此外,在模块使用前,还要做些硬件设定,或执行一些初始化程序,以确定使用的模拟量种类、变化范围、初值及比例系数等。

有时还须把采集的数据与采集时间关联,以看出被采集量随时间的变化,即所谓变化趋势监视。这个工作一般由上位机去做。但PLC本身也可完成。而且由PLC做此工作,实时性更强。

为此,可在PLC的某存储区设定一组(如10个字)工作区。用这个工作区动态记录被采集数据与采集时间有关的信息。

对此,有两种方法:一是定时采集;二是变化采集。

(1)定时采集。可按一定的时间间隔采集数据,并按固定的地址记录。因定时采集的时间是固定的,可不必记下采集时间。如每隔5min采集一次,那最近5min采集的数据存储在数据区的最低的地址,次近的存储高一个字的地址,其余依次存储。所以,它的算法应是:每有新数据采集,先把低字的内容依次移向高字(原最高地址字的内容丢失),然后,再把采集的新值存入最低字。图5-28所示即为这种梯形图程序。

978-7-111-39745-8-Chapter06-37.jpg

图5-28 定时采集

图5-28a为欧姆龙PLC程序。这里先是把“当前时分”(存储当前几时几分的字)被常数5(也可为别的常数)整除,其商数存于HR0,余数存于HR1字中。然后再对HR1与常数5作比较。

如这时的时间为5min,或10min……,则比较相等(P-EQ ON),进而先把DM100~DM1009中的数按字移位,DM108的数移存给DM109,DM107的数移存给DM108……。然后把最新的“第一路BCD码输入值”存入DM100。

可知,这里DM100~DM109中存的数分别为记录当时及前5min、前10min……的被采集的数据。并每5min作一次更新。

图5-28b为三菱PLC程序。它先用RD3A指令读取数据,并存放在K4M0,即M0~M15中。然后计算时间,把PLC的实时分值除以常数5,余数存于D21中,再判断D21是否为0,若为0,即如这时的时间为5min,或10min……则比较相等标志M101 ON,将微分执行指令WSFL。此为字左(高)移指令。其格式为

978-7-111-39745-8-Chapter06-38.jpg

它的含义是,把D指定的D10开始到D25,即n1指定的K16(16个字),每次做n2指定K4(4个字)左移,同时,把S指定的D0~D3的内容分别填入D10~D13中。结合本例是,从D10~D9做字左移,并把D0的内容填入D10中。

图5-28d为西门子PLC程序。它先读PLC的实时时钟,按READ_RTC指令使用的操作数VB10知,当前分值存于VB14字节中,而且是BCD码。所以,要转换为字,并译成十六进制码,然后进行带余数的除5运算。本例余数存于VW40中,商存于VW42中。接着,判断VW40等于0否?等,则微分调用带参数的子程序SBR_0。为什么这里用带参数的子程序?因为S7-200没有字移位指令,只好用它代用。

子程序SBR_0的功能是实现从VW110~VW138间的字移位。同时,把局部变量“#输入字”字右移3位后,存入VW110中。子程序的局部变量表见图5-28c,仅一个输入字,由调用它的程序指定。本例指定的为IW0,即模拟量输入模块的输入字。

执行上述主、子程序,近期采集的数据,将依次存于VW110~VW128中。其功能与图5-28a、b是完全一样的。(www.daowen.com)

图5-28e为和利时LM梯形图程序。程序所用变量声明如下:

978-7-111-39745-8-Chapter06-39.jpg

图5-28e中节1为启动模拟量输入功能块。节8为启动读取PLC实时时钟功能块。节2为当前时间的“分”对5取模计算,然后与0比较。其含义是每当0min、5min、15min……时,采集信号“pCJ”ON。节3、4只要“pCJ”从OFF到ON,则生成脉冲信号“ppCJ”。节5、6为存数的数组“cunshu”低下标单元字的值依次赋值给高下标单元字。节7把模拟量新值赋值给数组下标最低的单元,并使下标变量“indx”返回原始值。

可知,执行了上述程序,只要PLC的实时时钟处于0min、5min、15min……时,脉冲信号“ppCJ”将使存数的数组“cunshu”低下标单元字的值依次赋值给高下标单元字。同时,把模拟量当时的值赋值给数组下标最低的单元。这样,数组中10个单元存储的将依次是当时的、前5min的、再前5min的……模拟量输入数据。

(2)变化采集。即跟踪被采集量,视其变化情况,若被采集量的变化超过某个范围,则存储,并同时记下这时的时间。再有新的变化再采集。图5-29所示即为这种梯形图程序。

978-7-111-39745-8-Chapter06-40.jpg

图5-29 变化采集

图5-29a为欧姆龙PLC程序。从图知,这里总是进行“输入值”与“输入暂存值”相减,得其差的绝对值。然后把这个“差”与常数5比较。如比较大过常数5(也可为别的常数),则P-GT ON,进而LR10.00 ON。接着,先把第二路BCD码输入值传“输入暂存器”,再把DM200~DM209中的数按字移位,DM208的数移给DM209,DM207的数已给DM208……然后把最新的“第二路BCD码输入值”存入DM200。再接着,又把DM200~DM209中的数按字移位,DM208的数移给DM209,DM207的数已给DM208……然后把“当前时分”存入DM200。

提示:欧姆龙PLC BCD减运算,如被减数小于减数时,进位位置1(借位),“这个差”为10000+“被减数”与“减数”之差。要将其变为“差的绝对值”,必须再清进位位,使“0”被“这个差”减。即:10000-{(10000+“被减数”-“减数”},即“减数”-“被减数”。但欧姆龙PLC BCD加、减运算时,其进位位也参加运算,这里在未清进位位,故这里使“1”被“这个差”减。

可知,这里DM200~DM209中存的为5组数。分别为记录当时的“时分”及与这个“时分”相应的被采集数据。只要变化绝对值超过常数5,数据就会更新一次。

图5-29b为三菱PLC程序。从图知,这里把采集的模拟量输入存于K4M0中。接着,总是进行K4M0与“暂存值”相减,其差的存于“偏差值”中。然后把这个“偏差值”与常数5及-5比较。如比较大过常数5(也可为别的常数)或小于-5,则先把K4M0传给“暂存值”,再把D10~D19中的数按字移位,D18的数移给D19,D17的数已给D18……同时,把最新的K4M0值传送给D10。再接着,又把D10~D19中的数按字移位,D18的数移给D19,D17的数移给D18……同时把“当前时分”存入D10。

可知,这里D10~D19中存的为5组数。分别为记录当时的“时分”及与这个“时分”相应的被采集数据。只要变化绝对值超过常数5,数据就会更新一次。

图5-29c为西门子PLC程序。它先读PLC的实时时钟,按READ_RTC指令使用的操作数VB10知,当前时分值存于VW13字中。接着,处理“输入值”,并存于VW200中。再就是进行VW200与“暂存值”相减,其差存于“偏差值”中。进而判断“偏差值”是否大于5或小于-5(也可为别的常数),是则微分调用带参数的子程序SBR_0。为什么这里用带参数的子程序?也是因为S7-200没有字移位指令,只好用它代用。

子程序SBR_0的功能是实现从VW110~VW128间的字移位。同时,把局部变量“#输入字”字传送给VW110。子程序的局部变量表如图5-29d所示,仅一个输入字,由调用它的程序指定。本例指定的为W200及VW13,即处理后的“输入字”及当前时分。

可知,这里VW110~VW128中存的为5组数。分别为记录当时的“时分”及与这个“时分”相应的被采集数据。只要变化绝对值超过常数5,数据就会更新一次。

图5-30所示为和利时LM机变化采集梯形图程序。程序所用变量声明如下:

978-7-111-39745-8-Chapter06-41.jpg

978-7-111-39745-8-Chapter06-42.jpg

图5-30 和利时LM机变化采集程序

978-7-111-39745-8-Chapter06-43.jpg

图5-30中节13为启动模拟量输入功能块。节12为启动读取PLC实时时钟功能块。节1为判断当前模拟量输入值是否大于数组下标2单元的值?节2,如节1的判断大,则执行本节指令。当前模拟量输入值被数组下标2单元的值减,结果存于“woc”,并进行与500(此值可根据要求改变)比较,如“woc”大,则“pGT”ON。节3,如节1的判断小,则执行本节指令。数组下标2单元的值被当前模拟量输入值减,结果存于“woc1”,并进行与500(此值可根据要求改变)比较,如“woc1”大,则“pGT1”ON。节4、5,只要“pGT”或“pGT1”从OFF到ON,则生成脉冲信号“ppCJ”。节6、7为存数的数组“cunshu”低下标单元字的值依次赋值给高下标单元字。节8把模拟量新值赋值给数组下标最低的单元,并使下标变量“indx”返回原始值(20)。节9、10为存数的数组“cunshu”再次进行,低下标单元字的值依次赋值给高下标单元字。节11把PLC当时的分(存于高字节)、秒(存于低字节)新值赋值给数组下标最低的单元,并再使下标变量“indx”回原始值(20)。

可知,执行了上述程序,当模拟量输入值的变化超过500,由于脉冲信号“ppCJ”的作用,将进行数据采集。数组“cunshu”低下标单元字的值依次赋值给高下标单元字。同时,把模拟量新值及当时的分秒值,分别赋值给数组下标次低及最低的单元。这样,数组中20个单元存储的将依次是当时的分秒及模拟量输入数据。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈