「资料取样」功能用于按照设置的规则定时或触发采集变量实时值到保存数据库,然通过曲线或表格方式显示出来。
1)周期式
按照设定周期对数据进行采集
2)触发式
按照触发条件对数据进行采集
1)保存到HMI
2)保存到SD卡
3)保存到U盘
1)曲线图显示;
2)表格显示;
3)导出为CSV文件;
双击“工程设置”进入工程设置界面,再选择“资料取样”选项卡,如下图示:
右上角工具栏对应添加、删除、修改功能。
点击“添加”按钮,弹出资料取样设置界面,
项目
|
描述
|
变量名称
|
选择一个或多个变量作为采样源
![]() |
取样方式
|
1)周期式 用固定的时间频率进行资料取样,[采样周期] 可设定范围从 0.1 秒至 25秒。
2)触发式 利用一个变量的状态,来触发取样动作。 [模式] 可为: [OFF -> ON] 当指定地址的状态从 OFF 变为 ON,会触发资料取样。 [ON -> OFF] 当指定地址的状态从 ON 变为 OFF,会触发资料取样。 [OFF <-> ON] 只要指定地址的状态改变,就会触发资料取样。
取样后取反 若勾选,在触发资料取样后,系统会将触发位复归为 ON/OFF。 |
暂停取样控制
|
当指定位变量的状态被触发时,将暂停取样动作,直到指定地址的状态恢复。
|
清除实时
数据地址
|
当指定位变量的状态由 [OFF -> ON] 或 [ON -> OFF] 时,将清除在实时曲线已取样的数据,取样数据的数目也会被归零,但不影响已存成文件中的历史取样数据。 |
数据保存
|
可选择保存至HMI或U盘。
|
存放文件夹
|
存放的文件夹名称
|
文件数量限制
|
若勾选,当取样天数超过设定天数时系统会自动清除以前的记录。
|
注意:每一条采集设置记录有一个唯一数字编号,当与控件配合使用时,控件的“资料取样”属性需要设置选择正确的采样记录编号,如下图所示。
放置一个历史曲线控件到页面中,拖放到合适大小,
主要设置以下属性:
1)“绑定采样”选择需要显示的采样数据任务编号,
2)“显示类型”选择:实时数据,
3)设置X轴长度、时间单位、时间格式等主要参数,
4)设置Y轴上下限,
5)设置各个显示通道(曲线)的颜色,
运行效果如下,
放置一个历史曲线控件到页面中,拖放到合适大小,
主要设置以下属性:
1)“绑定采样”选择需要显示的采样数据任务编号,
2)“显示类型”选择:历史数据,
3)设置X轴长度、时间单位、时间格式等主要参数,
4)设置Y轴上下限,
5)设置各个显示通道(曲线)的颜色,
6)关联日期变量,用来告诉历史曲线显示哪一天开始的历史数据,
7)添加四个按钮,用来进行时间轴的前进、后退、跳转最前、跳转最后记录,
添加点击事件代码如下:
void Frm04::wMButton1_prs_cb(uint16_t code, LvEvent e) {
/*wMButton1(功能键)的按下事件*/
wMHistoryTrend2->navBack();
}
void Frm04::wMButton2_prs_cb(uint16_t code, LvEvent e) {
/*wMButton2(功能键)的按下事件*/
wMHistoryTrend2->navNext();
}
void Frm04::wMButton4_prs_cb(uint16_t code, LvEvent e) {
/*wMButton1(功能键)的按下事件*/
wMHistoryTrend2->navFirst();
}
void Frm04::wMButton5_prs_cb(uint16_t code, LvEvent e) {
/*wMButton2(功能键)的按下事件*/
wMHistoryTrend2->navLast();
}
运行效果如下,
X轴时间跨度、Y轴上下限可以关联变量,通过调整变量值来实现时间跨度、曲线上下限的调整。
下面的例子中,通过滑块来调整,效果如下:
参考视频,
正余弦波形生成请参考定时任务
参考视频:
API接口:
//使用函数
void exportCSV(const string sids,int ymdstart,int ymdend, const string dircsv="");
//sids 多个采样id用逗号分隔,如 "1,2,3"。为空时,表示全部;
//ymdstart 开始日期yyyyMMdd(含)
//ymdend 结束日期yyyyMMdd(含)
//dircsv 导出csv的保存目录(导出文件名不变,扩展名为csv)
//电脑上仿真时不起作用,固定存放在项目的“数据”文件夹下
//HMI中运行时,该参数表示U盘根目录下的子目录,如果为空表示在U盘根目录下。
void Frm04::wMButton14_prs_cb(uint16_t code, LvEvent e) {
//全部导出到U盘sample目录下。
SampleMgr::getInstance(p_rt)->exportCSV("",0,99999999,"sample");
//导出采样#1从2022年01月02日到2023年01月01日的采样数据到U盘sample目录下
SampleMgr::getInstance(p_rt)->exportCSV("1",20220102, 20230101,"sample");
}
int deleteDB(const string sids, int ymdstart,int ymdend);
//sids 多个采样id用逗号分隔,如 "1,2,3"。为空时,表示全部;
//ymstart 开始日期yyyyMMdd(含)
//ymend 结束日期yyyyMMdd(含)
//返回删除的文件数,0表示没有删除文件
SampleMgr::getInstance(p_rt)->deleteDB("", 20230918, 20230918);