<< 点击显示目录 >> 主页 mappServices帮助手册 > mapp Data: 数据记录 > 应用与测试例程 > mappData 介绍 含Demo |
1目录
1 目录
2 功能块功能描述
3 功能块软件配置信息
4 版本信息
5 AS编程
6 测试Demo程序(VC4)
2功能块功能描述
MpData提供了为给定过程变量(PV)记录历史数据的功能,数据存储在csv文件中。
并且提供了UI功能块,可以以表格的形式显示记录的变量值。
3功能块软件配置信息Introduction
AS版本 |
AS4.7.6 |
操作系统版本 |
C4.73 |
mapp版本 |
5.14 |
需要库 |
MpData |
||||
编写人 |
陈见埔 |
测试人 |
|
审核人 |
|
项目名称 |
mappDataTest |
||||
任务说明 |
DataCtrl:MpData组件测试。测试该组件的使用方法。 DataGen:生成测试数据 |
4版本信息
软件版本 |
修改内容 |
修改时间 |
修改人 |
V1.00.0 |
初版 |
2016.5.13 |
穆珊珊 |
V1.00.1 |
1.更新记录模式(“RecordMode”)说明; 2. 增加MpDataRecorder的Optional parameters- Header说明 3. 更新MpDataTableUIConnectType、MpDataTableUIPVType、MpDataPVItemLimitEnum等结构体说明
|
2021.8.16 |
陈见埔 |
5AS编程
(1)添加库
添加库:MpData。
(2)添加配置文件
首先,添加mapp配置文件夹。在Configuration View中的X20CP1586文件夹下(根据实际PLC型号不同而改变)
mappServices文件夹中添加MpData所需的配置文件(默认名为Config.mpdatarecorder),该文件用于配置数据记
录的相关信息。添加配置文件后,相应的MpLink也会随之自动添加。打开配置文件,MpLink的名字显示在最顶
部。如果需要,可以修改各配置文件中的MpLink的名字。本例中,使用默认名字(gDataRecorder)。
注:具体的配置文件的内容介绍将会在功能块MpDataRecorderConfig中介绍。
(3)设置FileDevice
在Physical View中右键CPU打开CPU Configuration,并根据需要设置相应FileDevice,用来作为配方文件存储的地方。
注意:路径不能是根目录,否则功能块调用会报错。
(4)添加功能块MpDataRecorder并配置输入输出引脚
该功能块负责记录变量的值,并且存储在CSV或PDF文件中。
▪连接MpLink:在“MpLink”这个输入端输入配方配置文件中的MpLink变量的地址。
▪使能功能块:Enable输入端置1后功能块运行。
▪数据存储设备:在“DeviceName”输入数据存储设备的设备名的地址。
▪采样周期:“SamplingTime”输入端设置了数据记录的周期。
▪记录模式(“RecordMode”)定义了数据保存的触发事件。有以下七种模式可用(前提是必须使能MpDataRecorder的Record引脚):
模式(Enum) |
说明 |
mpDATA_RECORD_MODE_TIME |
基于时间的模式。在这种模式中,“SamplingTime”输入端定义了变量值保存的间隔时间。为了防止抖动,采样时间应该是任务循环周期的整数倍。 |
mpDATA_RECORD_MODE_TRIGGER |
外部触发模式。在Trigger的上升沿数据保存一次。用作触发的变量需要连接在MpDataRecorder功能块的“Trigger”输入端。 |
mpDATA_RECORD_MODE_VALUE |
变量值变化时保存。当注册的任一变量值改变时,所有注册变量的值均会被重新保存。 |
mpDATA_RECORD_MODE_TIME_TRIGGER |
在一段时间后(经测试为设置采样周期)或Trigger的上升沿后以采样周期持续保存注册变量(每捕捉到一次Trigger的上升沿,储存一次)。 |
mpDATA_RECORD_MODE_TIME_VALUE |
在一段时间后(经测试为设置采样周期)或当注册的任一变量值改变时,所有注册变量的值均会被重新保存(期间每改变一次,储存一次)。 |
mpDATA_RECORD_MODE_TRIGGER_VALUE |
在Trigger的上升沿或变量值变化时保存。(注意:此时采样周期不起作用,数据存储时机完全由Trigger的上升沿或变量值变化决定) |
mpDATA_RECORD_MODE_TIME_TRIG_VAL |
在一段时间后(经测试为设置采样周期)或Trigger的上升沿,或当注册的任一变量值改变时,所有注册变量的值均会被重新保存(此模式下当达到采样周期、Trigger触发、注册的任一变量值改变时均会存储相应数据,三者同步进行)。 |
在这些模式中,当满足存储条件时,注册变量的当前值就会被保存,存储在内存中。使用MpDataRegPar功能块
来注册需要记录的变量。需要注意的是,只有在MpDataRecorder功能块Active(Active = TRUE)的时候,才能通
过MpDataRegPar功能块注册变量。
下载程序,把“Record”手动置为1,数据就开始记录了。可以从info中看到数据的记录信息。
“Info” 结构体给出了当前状态的详细信息。
▪FileCount:表示当前已经记录了多少个文件;
▪CurrentFileName:当前数据存储的文件名;
▪CurrentFileSize:当前数据存储的文件大小,kB;
▪CurrentBufferSize:正在使用的内存大小,kB;
▪RegisteredPVCount:表示当前注册的变量有多少;
▪TotalSamples:从开始记录,每个注册变量记录了多少个数据;
▪ValueOutsideLimits:需搭配MpDataRegParLimits功能块使用,当MpDataRegParLimits注册变量值超出注册时指定上下限时,ValueOutsideLimits变为TRUE。
“Header”输入端是一个可选输入项,通过它可以给文件加一个header,例如说明一下变量名作为注释。
通过Notepad++打开发现,mappData头三行分别保存数据分隔符,Header. Name以及Header. Description。若程序
中不指定Header信息,则CSV文件默认留空,Notepad++仅保留数据分隔符。(若要删除头三行信息,仅能通过
自行编程改写,无法通过AS设置)
“SnapShot”命令可以把当前内存中的数据额外存成一个文件,当“SnapShotDone”输出端被置为TRUE的时候表示该
操作结束了。该命令存储的文件名与自动存储的文件名不一样。正常的记录和存储工作不会受到该命令影响。
“RecordDone”输出端会在数据记录结束后置为TRUE。如果MpDataRecorder的数据记录被设置为环形内存,那么记
录就永远都不会结束。
掉电后的数据可以这样恢复:MpDataRecorder功能块必须以同样的“BufferSize”和
“TimePeriod”值启动。此外,注册变量也必须是一样的,而且配置不变。文件设备上已
经创建的文件将不受掉电影响。
如果掉电后要将数据丢掉,那么就把MpDataRecorder功能块disable。当重新Enable后,内部buffer就清空了,然后重新开始。
(5)添加功能块MpDataRegPar并配置输入输出引脚
该功能块用来注册需要记录的变量。
该功能块使用的MpLink和MpDataRecorder一样。
当功能块使能后,输入端指定的变量就注册成为需要记录的变量了。在MpDataRecorder功能块不激活时
(Active=FALSE),或者“Record”命令启动后,是不能注册新的变量的。功能块还需要配置以下输入端:
▪PVName:需要注册的变量名;
指定变量名时需要用以下格式:
▪Global PV:直接变量名(例如,“gTestVariable”,”gControl.Parameter.Distance”)
▪Local PV:任务名:变量名(例如,“Task:LocalTestVariable”,“AxisCtrl:Basic.Command.MoveVelocity”)
▪Unit:变量的单位,字符形式;
▪Description:简短描述,字符形式
▪程序中若不指定Description,CSV记录文件中抬头为变量名
▪程序中指定Description,CSV记录文件中抬头为Description信息
▪ScaleFactor:存储之前对变量值进行缩放的倍乘系数,默认值是1.0。
想要从已注册的记录变量中删除一个变量的话,可以将改变量对应的MpDataRegPar功能块disable
(Enable=FALSE)。如果在删除变量时,变量还处于记录状态,那么该变量会在记录结束后从变量注册表中删
除。每一个需要记录的变量都要用一个MpDataRegPar功能块来注册。
▪注:数组、功能块、TIME_OF_DAY变量亦可注册为记录变量。
(6)添加功能块MpDataRecorderConfig
该功能块用来保存或读取MpDataRecorder功能块的当前配置
推荐使用方法是通过config文件(Configuration View-mappServices-Config.mpdatarecorder)来定义,MpDataRecorderConfig功能块只用于在线更改配置而用。
该功能块使用的MpLink和MpDataRecorder功能块一样。
“Configuration”输入端用于指定配置变量;
“Save”命令用于为MpDataRecorder功能块保存配置;
“Load”命令用于读取MpDataRecorder功能块的当前配置。该命令会覆盖配置变量(MpDataRecorderConfigType)结构体中的参数。
配置MpDataRecorderConfigType(上图中Config变量)结构体。该结构体与配置文件内容一致,以下说明同样适用于配置文件中的参数配置。
变量值保存到文件中
数据记录从“Record”命令的上升沿开始。变量值首先保存在内存中。内存的大小由参数“BufferSize”定义。“SaveInterval”参数决定了数据从内存传送到文件的频率。这个过程一直重复直到文件大小达到“MaxFileSize”。当文件大小达到最大后,会生成一个新的文件继续记录。当文件数量达到“MaxNumberOfFiles”时,数据记录就结束了。如果这时,内存中还有多余的数据,那么这些数据会保存在另外一个文件中(该文件不计入“MaxNumberOfFiles”)。如果使用了选项“OverwriteOldestFile=TRUE”,那么当文件数量达到最大值后,数据记录也不会停止,而是会将最先记录的文件覆盖,这样,数据记录就永远不会停止。
变量值保存在内存中
数据记录从“Record”命令的上升沿开始。量值首先保存在内存中。内存的大小由参数“BufferSize”定义。如果“AutoSave=TRUE”,那么内存中的buffer是一个环形buffer。当这个buffer满了之后(Info结构体中的CurrentBufferSize的值等于配置结构体中BufferSize的值),新的数据就会把最先保存的数据覆盖。
其他参数
“PowerFailSafe”参数用来设定掉电时是否保存参数。如果选择使能,则数据被存入文件前先记录在SRAM中(UserRAM),如果选择不使能,则存在DRAM中。
设定“BufferSize”参数时,要先保证RAM中有足够的内存大小。这些内存是不能用于其它功能的。
如果控制器没有足够的SRAM,那么数据就会存储在DRAM中,并且在logger中生成一条记录。当然掉电时也不能实现数据保存的功能。
注意:当使用电池保存的内存时,必须要为控制器配置足够的变量内存,如下图。
“DecimalDigits”定义了保留几位小数位。
“FileNamePattern”参数定义了生成文件的命名格式。文件名由描述和时间戳组成:
Default format:默认格式,Datalog_%Y_%m_%d_%H_%M_%S.csv(例如,Datalog_1990_25_03_01_13_27.csv)
Adjusted format:调整格式 ,Datalog _%H_%M_%S_%d_%m _%Y.csv(例如,Datalog13_27_00_27_11_1989.csv)
每次记录数据都会带有时间戳。使用“TimeStampPattern”参数来设置,格式如下:
Default format:默认格式,%Y %m %d %H:%M:%S:%L(例如, 1990 25 03 13:27:03:253)
Adjusted format:调整格式 ,DD.MM.YYYY HH:mm:SS(例如,25.02.1991 13:27:03:561)
下表中是调整格式时的可用选项:
保存数据到csv文件时,“ColumnSeparator”参数用来定义数据之间的分隔符。“DecimalMark”用来定义小数点的字符。
AutoSave(Save automatically):当关闭时,数据会被连续记录至内部Buffer中,并可通过Snapshot引脚输出全部记录值。当打开时,Snapshot仅能输出当前记录的部分记录值。
SaveInitialValues:当打开该开关时,MpDataRecorder功能块Record引脚一置TRUE即记录一次注册变量采样值,此后记录模式由程序定义的RecordMode决定。
(7)添加上位接口功能块MpDataTableUI
该功能块用来在上位界面中显示记录的数据表。
该功能块所使用的MpLink和MpDataRecorder一样。
MpDataTableUI在VC4和当前记录数据之间建立了连接,数据交换通过MpDataTableUIConnectType(下图中UIConnect变量)进行。
以下数据类型可以通过表格显示:
▪BOOL
▪SINT
▪INT
▪DINT
▪USINT
▪UINT
▪UDINT
▪REAL
▪LREAL
▪结构体、由以上数据类型组成的数组
▪枚举变量
MpDataTableUIConnectType说明
该数据类型包含上位显示的必需信息。
参数 |
数据类型 |
描述 |
Status |
MpDataUIStatusEnum |
当前状态 |
Table |
MpDataTableType |
以表格形式显示变量及其值 |
AutoRefresh |
BOOL |
使能自动刷新。当变量值变化时表格会刷新。 |
Refresh |
BOOL |
手动刷新表格。 |
Language |
STRING[20] |
单位设置 |
MpDataUIStatusEnum说明:该参数提供了显示变量值的表格的当前状态。
枚举值 |
描述 |
MpDATA_UI_STATUS_IDLE |
当前没有操作 |
MpDATA_UI_STATUS_REFRESH |
刷新表格 |
MpDATA_UI_STATUS_ERROR |
上一个操作出错 |
Table(MpDataTableType)是主要的列表显示操作信息。
参数 |
数据类型 |
描述 |
PV |
MpDataTableUIPVType数组[0..9] |
变量相关信息 |
Index |
UDINT类型数组[0..19] |
一条记录的索引号 |
TimeStamp |
STRING类型数组[0..19] |
时间戳。显示格式由“TimeStampPattern”决定 |
PageUp |
BOOL |
跳到页面的最上端,之后每次向上滚动一页。 VC4连接:Button / Type: SetDatapoint的数据点。 |
PageDown |
BOOL |
跳到页面的最末端,之后每次向下滚动一页。 VC4连接:Button / Type: SetDatapoint的数据点 |
StepUp |
BOOL |
选择列表中上一个 VC4连接:Button / Type: SetDatapoint的数据点 |
StepDown |
BOOL |
选择列表中下一个 VC4连接:Button / Type: SetDatapoint的数据点 |
PageLeft |
BOOL |
跳到页面的最左端,之后每次向左滚动一页。 VC4连接:Button / Type: SetDatapoint的数据点 |
PageRight |
BOOL |
跳到页面的最右端,之后每次向右滚动一页。 VC4连接:Button / Type: SetDatapoint的数据点 |
StepLeft |
BOOL |
选择列表中左边一个 VC4连接:Button / Type: SetDatapoint的数据点 |
StepRight |
BOOL |
选择列表中右边一个 VC4连接:Button / Type: SetDatapoint的数据点 |
RangeStartRows |
REAL |
连接到进度条,用来表明当前显示的是哪一部分(行)。该参数连接的是范围的开始部分。总的范围应该对应于列表的长度,“Range”应该对应于一页中显示的长度。 VC4连接:Scale的StartDatapoint |
RangeEndRows |
REAL |
连接到进度条,用来表明当前显示的是哪一部分(行)。该参数连接的是范围的结束部分。总的范围应该对应于列表的长度,“Range”应该对应于一页中显示的长度。 VC4连接:Scale的StartDatapoint |
RangeStartColumns |
REAL |
连接到进度条,用来表明当前显示的是哪一部分(列)。该参数连接的是范围的开始部分。总的范围应该对应于列表的长度,“Range”应该对应于一页中显示的长度。 VC4连接:Scale的StartDatapoint |
RangeEndColumns |
REAL |
连接到进度条,用来表明当前显示的是哪一部分(列)。该参数连接的是范围的开始部分。总的范围应该对应于列表的长度,“Range”应该对应于一页中显示的长度。 VC4连接:Scale的StartDatapoint |
部分变量连接如下图所示:
MpDataTableUIPVType结构体说明:它包含变量需要显示的描述信息。可以同时显示20个记录的变量值;
参数 |
数据类型 |
描述 |
Name |
STRING[100] |
变量名 |
Description |
STRING[50] |
变量描述 |
DescriptionIndex |
UINT |
该参数可以为每个变量对应一个文本组中的文本。该参数是自动赋值的,并且每个变量都不一样。 如果变量注册的顺序改变了,或者是在运行时动态注册的,那么每个变量的DescriptionIndex也会改变,会导致与文本组中的对应描述不符。 |
Unit |
STRING[20] |
变量单位 |
Value |
LREAL类型数组[0..19] |
在时间戳处的变量值 |
LowerLimit |
LREAL类型数组[0..19] |
变量上限 |
UpperLimit |
LREAL类型数组[0..19] |
变量下限 |
LimitMonitor |
MpDataPVItemLimitEnum结构体变量数组[0..19] |
指示当前值是否在定义范围内或超限 |
MpDataPVItemLimitEnum结构体说明:该结构体存储了注册变量是否超限信息。
枚举值 |
描述 |
mpDATA_NO_LIMITS_CONFIGURED |
未定义限制值或定义值对变量无效(例如String变量) |
mpDATA_WITHIN_LIMITS |
变量值在限制范围内 |
mpDATA_UPPER_LIMIT_VIOLATED |
变量值超出上限 |
mpDATA_LOWER_LIMIT_VIOLATED |
变量值超出下限 |
MpDataTableUISetupType说明:该结构体用来配置页面的相关显示参数。
参数 |
数据类型 |
默认值 |
描述 |
ValueListSize |
UINT |
20 |
一页可以显示的注册变量记录值个数 |
ValueScrollWindow |
USINT |
1 |
翻页滚动时,表格中可以预览的变量值个数 |
PVListSize |
UINT |
10 |
一页可以显示的注册变量个数 |
PVScrollWindow |
USINT |
1 |
翻页滚动时,表格中可以预览的注册变量个数 |
6Demo程序