- DI有输入或DO有输出,状态是0还是1
- IO的索引是从0还是1开始
- DI输入或DO输出时是低电平还是高电平
- 扩展IO模块能扩展多少个
1. GTS本地IO资源和扩展IO资源
表1-1 GTS IO资源数
GTS 每张卡,端子板上有 16 点输入和 16 点输出的本地 IO。GTS 有 16 个地 址用于扩展 IO 模块,16 输入 16 输出型号的模块每个占用 1 个地址,纯 32 输入 型号的模块每个占用 2 个地址,模拟量模块每个占用 8 个地址。所以扩展纯数字 量 IO 模块,输入点最多扩展:16*16=256(或 32*8=256)个点,输出点最多扩 展:16*16=256 个点。
2. GTS 本地 IO 和扩展 IO 的有效电平
GTS 本地 IO 默认输入和输出都是低电平有效,扩展 IO,16 输入 16 输出的型 号也是输入输出都是低电平有效,纯 32 输入的型号,输入高低电平可选。在这 里需要强调对于 DO,在没有输出时是高组态,不能理解为高电平状态,高组态 是对地阻抗无穷大,是一个无效的电平。
表2-1 GTS IO有效电平
3. GTS 本地 IO 和扩展 IO 有输入或输出时的状态
DO 输出或 DI 输入时到底是 0 还是 1,相信很多软件工程师很多时候都觉得很混乱。GTS 本地 IO,默认 DI 有输入时状态为 0,无输入时状态为 1;DO 有输出时状态为 0,无输出时 状态为 1;DI 通过对其取反改为 DI 有输入时状态为 1,无输入时状态为 0。但 DO 一般不能 取反,因为卡配置复位时可能导致接的外设动作异常发生危险。扩展 IO 不能取反,固定是 DI 有输入时状态为 0,无输入时状态为 1;DO 有输出时状态为 0,无输出时状态为 1。
默认 IO 状态:
表3-1 GTS IO状态
4. GTS 本地 IO 和扩展 IO 的索引问题
对 IO 读写时需要知道 IO 的索引才能操作指定的 IO。GTS 端子板上的 IO 丝 印是从 0 开始,扩展 IO 的丝印也是从 0 开始,那么读写 IO 时索引也是从 0 开始 吗?下面来具体分析:
4.1 GTS 本地 IO 读写
GTS 读取本地 DI 是一次性把 16 个 DI 一起读取,读到的状态值的 bit0~bit15 代表 EXIO~EXI15 的状态;例如需要读取 EXI3 的状态:
long lGpiValue;
// 读取 DI 值
sRtn = GT_GetDi(MC_GPI, &lGpiValue);
// 通过判断 DI 值的 bit3 的状态来判断 EXI3 有无输入
if( lGpiValue& (1<<3))
return 1; //EXI3 无输入
else if (!( lGpiValue& (1<<3)))
return 0; // EXI3 有输入
GTS 设置本地 DO 输出有两种方式,一种是通过改变 DO 值一次性更新 16 个 DO 的状态,另一种是操作单个 DO。例如原来所有 DO 都没有输出(即所有状态都 为 1),现在要让 EXO6 输出:
更新所有 DO 值的方式:
long lGpoValue=0xffbf; //把 lGpoValue 的 bit6 置 0
sRtn = GT_SetDo(MC_GPO, lGpoValue);
单独操作 EXO6 的方式:
//注意此处的索引是 7
sRtn = GT_SetDoBit(MC_GPO,7, 0);
4.2 GTS 扩展 IO 读写
GTS 读取扩展 IO 模块上 DI 也是一次性把 16 个 DI 一起读取,读到的状态值 的 bit0~bit15 代表 DIO~DI15 的状态;例如需要读取第一个扩展模块上 DI3 的状态:
short mdl=0;
unsigned short value;
sRtn = GT_GetExtIoValue(mdl,&pValue);
// 通过判断 DI 值的 bit3 的状态来判断 DI3 有无输入
if( pValue& (1<<3))
return 1; // DI3 无输入
else if (!( pValue& (1<<3)))
return 0; //DI3 有输入
GTS 设置扩展 IO 模块上的 DO 输出有两种方式,一种是通过改变 DO 值一次 性更新 16 个 DO 的状态,另一种是操作单个 DO。例如原来所有 DO 都没有输出(即 所有状态都为 1),现在要让第一个扩展 IO 模块上的 DO6 输出:
更新所有 DO 值的方式:
short mdl=0;
unsigned short value;
value=0xffbf; //把 value 的 bit6 置 0
sRtn = GT_SetExtDoValue(mdl,value);
单独操作 DO6 的方式:
short mdl=0;
short index=6;// index 从 0 开始
short value=0;
sRtn = GT_SetExtIoBit(mdl,index,value);

暂无评论内容