一、NewWatch功能介绍:
1、使用功能场合
上位机程序运行过程中需要实时采集一些信号实时性要求较高时,可以使用watch功能来实现对这些变量的变化值采集,采集间隔通常可设置为250us-16ms间(变量不可过多)。
2、可以采集的变量说明
NewWatch功能可以采集的资源一般为固高端子板所包括资源(拓展模块不支持),常见的一下变量如:
- 轴规划的一些变量,包括规划位置、规划速度,规划加速度加速度等。
- 轴编码器相关变量,包括编码器位置、实际速度、实际加速度等。
- IO输入输出变量,包括IO输入输出信号状态。
- 模拟量输入输出变量 ,包括AI输入采集和AO输出采集。
- 其他咨询固高技术人员。
二、程序流程(C#)
1、准备工作
- 确认GTS控制卡版本支持此功能使用(DSP固件及FPGA固件日期确定,通常需要16年之后固件才支持)。
- 需要添加config.cs文件,new watch相关功能指令在其中。
2、程序流程
//其他正常初始化过程省略。
private void btn_Watch_Click(object sender, EventArgs e)
{
short sRtn; //指令返回值
int pSts; //检测轴运动状态
double[] pBuf1 = new double[10000];//变量1存放
double[] pBuf2 = new double[10000];//变量2存放
double[] pBuf3 = new double[10000];//变量3存放
//1、初始清除watch变量和采集事件
sRtn = mc_cfg.GT_ClearWatch(0);
//2、添加watch变量,此处例子为采集1轴运动状态、1轴编码器位置和第一路模拟量输入值
//watch变量1:1轴规划运动状态
mc_cfg.TWatchVar tWatchVar0 = new mc_cfg.TWatchVar();
tWatchVar0.type = 6200; //变量类型:宏定义mc_cfg.WATCH_VAR_PRF_RUN;6200
tWatchVar0.index = 1; //索引号:x轴轴号1
sRtn = mc_cfg.GT_AddWatchVar(ref tWatchVar0);//添加watch变量指令
//watch变量2:1轴编码器位置
mc_cfg.TWatchVar tWatchVar1 = new mc_cfg.TWatchVar();
tWatchVar1.type = 30000; //变量类型:mc_cfg.WATCH_VAR_ENC_POS;
tWatchVar1.index = 1; //索引号:x轴轴号
sRtn = mc_cfg.GT_AddWatchVar(ref tWatchVar1);//添加watch变量指令
//watch变量3:第一路模拟量输入值
mc_cfg.TWatchVar tWatchVar2 = new mc_cfg.TWatchVar();
tWatchVar2.type = 33000; //变量类型:mc_cfg.WATCH_VAR_AI;
tWatchVar2.index = 1; //索引号:AI输入1
sRtn = mc_cfg.GT_AddWatchVar(ref tWatchVar2);//添加watch变量指令
//3、设置启动watch条件(可以不设置则按GT_WatchOn指令调用时启动)
//此处当满足变量1:轴处于运动状态时开始采集。
mc_cfg.TWatchEvent tWatchEvent = new mc_cfg.TWatchEvent();
tWatchEvent.type = (ushort)mc_cfg.WATCH_EVENT_START; //满足条件时开启
tWatchEvent.var = tWatchVar0; //变量1 WATCH_VAR_PRF_RUN
tWatchEvent.loop = 0;//循环次数 0:无限
tWatchEvent.condition = (ushort)mc_cfg.WATCH_CONDITION_EQ;//条件:等于
tWatchEvent.watchCount = 10000;//watch数据次数
tWatchEvent.value = 1;//WATCH_VAR_PRF_RUN值 = 1 开始watch数据,即1轴规划运动中开始watch功能
sRtn = mc_cfg.GT_AddWatchEvent(ref tWatchEvent);//添加启动条件
//watch使能开启
sRtn = mc_cfg.GT_WatchOn(
0,//采用间隔
0,// 0:静态模式,1:循环模式,2:动态模式
0);//数据次数,0:不限次
//此处若指令返回值都为0,则表示开启watch功能
//开启点位运动,使满足采集条件,使用时最好放在线程中使用,否则会卡住界面,此处为例可单步调试检测。
mc.TTrapPrm trap = new mc.TTrapPrm;
short axis = 1;
sRtn = mc.GT_PrfTrap( 1); //设置为点位运动,模式切换需要停止轴运动。
//若返回值为 1:若当前轴在规划运动,请调用GT_Stop停止运动再调用该指令。
sRtn = mc.GT_GetTrapPrm( 1, out trap); /*读取点位运动参数(不一定需要)。若返回值为 1:请检查当前轴是否为 Trap 模式若不是,请先调用 GT_PrfTrap 将当前轴设置为 Trap 模式。*/
trap.acc = 10; //单位pulse/ms2
trap.dec = 10; //单位pulse/ms2
trap.velStart = 0; //起跳速度,默认为0。
trap.smoothTime = 0; //平滑时间,使加减速更为平滑。范围[0,50]单位ms。
sRtn = gts.mc.GT_SetTrapPrm(1, ref trap);//设置点位运动参数。
sRtn = gts.mc.GT_SetVel( 1, 200); //设置目标速度
sRtn = gts.mc.GT_SetPos( 1, 100000); //设置目标位置
sRtn = gts.mc.GT_Update( 1 << (1 - 1)); //更新轴运动
do
{
sRtn = gts.mc.GT_GetSts( 1, out pSts, 1, out pClock);
}
while ((pSts & 0x0400) != 0);
//4、运动完成后关闭watch
sRtn = mc_cfg.GT_WatchOff();
//5、可以将采集数据放在数组中读取
sRtn = mc_cfg.GT_ReadWatch(1, out pBuf1[0], 10000, out pReadCount);//1轴运动状态
sRtn = mc_cfg.GT_ReadWatch(2, out pBuf2[0], 10000, out pReadCount);//1轴位置
sRtn = mc_cfg.GT_ReadWatch(3, out pBuf3[0], 10000, out pReadCount);//模拟量值
//6、也可通过指令打印到txt文本文件中(应用程序目录下自动生成),此指令会造成卡顿
sRtn = mc_cfg.GT_PrintWatch( "watchData", 0, 10000);//bin->debug目录下dataWatch.txt
//sRtn = mc_cfg.GT_ClearWatch(0);
}
三、注意事项
- 指令返回值8为固件不支持该功能,请确认是否能够升级固件解决。
- 一次性采集变量数量不可过多,最好不超过5个。
- 此功能针对熟悉固高控制卡或有采集需求时使用。