关于固高的io访问,我常用到的是固高提供的 GT_GetDi 和 GT_GetDo 两个方法,前者用于访问输入io的io状态,后者用于访问输出io的io状态。
关于官方对这两方法的说明:
指令原型:GT_GetDi (short diType,long*pValue)
指令说明:读取数字IO输入状态
指令类型:立即指令,调用后立即生效
指令参数:
diType:指定数字IO类型。
取值 : 0:正限位
1:负限位
2:驱动报警
3:原点开关
4:通用输入
5:电机到位信号
6:手轮MPG轴选和倍率信号
pValue:数字IO输入状态,按位指示IO输入电平
当reverse=0时,1表示高电平,0表示低电平
当reverse=1时,相反
指令原型:GT_GetDo(short doType,long *pValue)
指令说明:读取数字IO输出状态
指令类型:立即指令,调用后立即生效
指令参数:
doType:指定数字IO类型
取值: 10:驱动器使能
11:报警清除
12:通用输出
pValue:数字IO输出状态,按位指示IO输出电平
默认情况下,1表示高电平,IO表示低电平
在实际操作中如果只有一块固高控制卡(就是机台上只配备一个运动控制卡),GT_GetDi 以及 GT_GetDo 方法的输出值取决于diType 和 doType 并且同IO类型的IO信息数据都被获取到,它的返回值可以是十进制数也可以是其它类型的数据,在这里我们拿它的int类型的十进制数,(以下是C#中固高的gts类片段)
然后我们需要对它们返回的pValue进行十进制转换二进制的转换:
string to_BIN = Convert.ToString(pValue, 2);
转换后得到的操作数可能是101010110这样的二进制数,这里将得到的二进制数称为操作数那是因为在每个位上都代表一个io点,其中值为1代表“true”;为0代表“false”。
在这里我们暂时打住,首先需要讲清楚这串 11001010这样的二进制数是如何确定 第一位代表哪个io点位 第二个又代表哪个io点位,我们需要拿接线表的IO表来看,如下信息:
上图是部分接线表的io点位信息,在一些规范中我们通常将点位字母EX代表通用io,I 和O 代表输入还是输出,数字代表点位的下标,打住。这里这些数字代表下标,它就是我们要说的区分返回来的二进制数的每一位代表什么io点位,就是通过这个下标来区分的。比如说通过GT_GetDi得到的二进制数是111110111 从后面开始,第一个位置代表EXI0;第二个位置代表EXI1;第三个位置代表EXI2 以此类推。
//返回结果
int result_DEC = -1;
//调用固高底层,0代表控制卡的下标(只有一张取0),4代表通用输入io
GTS.GT_GetDi(0, 4, out result_DEC);
//将返回的结果转换成二进制
string to_BIN = Convert.ToString(result_DEC, 2);
//返回结果
int result_DEC = -1;
//调用固高底层,12代表通用输出io
GTS.GT_GetDo(0, 12, out result_DEC);
//将返回的结果转换成二进制
string to_BIN = Convert.ToString(result_DEC, 2);
可操作的io比如说,指示灯系列以及警报灯系列等。我们还是拿固高官方说明文档来就事论事把:
比如说我常用的GT_SetDoBit
指令原型:GT_SetDoBit(short doType,short doIndex,short value)
指令说明:按位设置数字IO输出状态
指令类型:立即指令,调用后立即生效
指令参数:
doType:指定数字IO类型
取值:10:驱动器使能
11:报警清除
12:通用输出
doIndex:输出IO的索引
取值范围:当doType取值为10或11时 doIndex取[1,8]
当doType取值为12时 doIndex取[1,16]
value:设置数字IO输出电平
默认情况下,1表示高电平,0表示低电平
实际程序中的调用演示:
//参数1表示第一张控制卡,12表示通用输出,index表示IO位的下标,status是bool类型的数据
GTS.GT_SetDoBit(0 , 12, Convert.ToInt16(index + 1), Convert.ToInt16(status));