固高控制卡学习5 –数字 IO

调用 GT_GetDi 指令可以读取限位、驱动报警、原点、通用输入、手轮接口这些数字量输入接口的输入电平状态。其中,手轮接口为 5V 电平输入,其余 IO 24V 电平输入。调用 GT_SetDo 指令可以设置伺服使能、报警清除、通用输出这些数字量输出接口的输出电平状态。
调用
GT_GetDiRaw 指令可以读取数字量输入接口的原始电平状态。
GT_GetDiReverseCount 指令用来读取数字量输入的变化次数,当数字量输入由 0 变为 1,或者由 1 变为 0,该次数就会增加一次。
GT_SetDiReverseCount 指令用来设置数字量变化次数计数器的初值。
GT_SetDoBitReverse 指令用来使数字量输出信号输出一个定时的脉冲,例如,假设当前通用数字量输出信号 1 是高电平,当调用指令 GT_SetDoBitReverse(MC_GPO, 1, 0, 100);则该数字量信号将会发出一个 100×250μs=25ms 时间宽度的负脉冲。

GT_GetDi 读取数字 IO 输入状态
GT_GetDiRaw 读取数字 IO 输入状态的原始值
GT_GetDiReverseCount 读取数字量输入信号的变化次数
GT_SetDiReverseCount 设置数字量输入信号的变化次数的初值
GT_SetDo 设置数字 IO 输出状态
GT_SetDoBit 按位设置数字 IO 输出状态
GT_SetDoBitReverse 使数字量输出信号输出定时脉冲信号
GT_GetDo 读取数字 IO 输出状态

例程

有一个按键连接端子板上通用输入 EXI3 ,常为低电平,按下按键,输入高电平。端子板通用输出 EXO6 上连接一个指示灯,当 EXO6 输出低电平时指示灯亮,输出高电平时指示灯灭。开始指示灯一直灭,用户希望不断读取轴 1 正负限位的数字量输入变化次数,并将结果输出到显示器。在正负限位变化次数都超过 10 次之后归零重新计数,并且使指示灯一直亮起来。用户可以随时按键停止这种检测。

// 打开运动控制器 sRtn = GT_Open(); // 复位运动控制器 sRtn = GT_Reset(); // 初始化变化次数为0 lPosLmtReverseCount = 0; lNegLmtReverseCount = 0; // 读取EXI3输入值 sRtn = GT_GetDi(MC_GPI, &lGpiValue); // 如果为高电平,说明按键正在被按下,则不检测,返回 1 if( lGpiValue& (1<<3)) return 1; // EXO6输出高电平,使指示灯灭 sRtn = GT_SetDo(MC_GPO, 1<<6); // 按键没有被按下,循环。如果EXI3输入值为高电平,即按键按下,则退出循环 while( ! (lGpiValue& (1<<3))) { // 读取正限位输入变化次数 sRtn = GT_GetDiReverseCount( MC_LIMIT_POSITIVE, // 指定数字IO类型是正限位 1, // 指定正限位1 &lPosLmtReverseCount, // 读取的值 1); // 一次读取一个数字量 // 读取负限位输入变化次数 sRtn = GT_GetDiReverseCount( MC_LIMIT_NEGATIVE, // 指定数字IO类型是负限位 1, // 指定负限位1 &lNegLmtReverseCount, // 读取的值 1); //一次读取一个数字量 // 将结果输出到显示器 printf("PosLmtReverseCount = %d\n NegLmtReverseCount = %d\n",lPosLmtReverseCount, lNegLmtReverseCount); // 如果正负限位的输入变化次数都超过10次 if(( lPosLmtReverseCount>= 10) &&( lNegLmtReverseCount>= 10) ) { // 重新归为0 lPosLmtReverseCount = 0; lNegLmtReverseCount = 0; // 设置正限位输入变化次数 sRtn = GT_SetDiReverseCount( MC_LIMIT_POSITIVE, // 指定数字IO类型是正限位 1, // 指定正限位1 &lPosLmtReverseCount, // 读取的值 1); // 一次读取一个轴 // 设置负限位输入变化次数 sRtn = GT_SetDiReverseCount( MC_LIMIT_NEGATIVE, // 指定数字IO类型是负限位 1, // 指定负限位1 &lNegLmtReverseCount, // 读取的值 1); // 一次读取一个轴 // EXO6输出高电平,使指示灯亮 sRtn = GT_SetDoBit( MC_GPO, // 指定数字IO类型是通用输出 7, // 指定第7个通用输出,即EXO6 0); // 输出低电平 } // 不断读取通用输入,已检测EXI3的电平状态 sRtn = GT_GetDi(MC_GPI, &lGpiValue); }

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

在线客服
在线客服
QQ客服