一文讲清GTS IO状态和索引问题

一文讲清GTS IO状态和索引问题

  • DI有输入或DO有输出,状态是0还是1
  • IO的索引是从0还是1开始
  • DI输入或DO输出时是低电平还是高电平
  • 扩展IO模块能扩展多少个       

1. GTS本地IO资源和扩展IO资源

表1-1 GTS IO资源数

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有效电平

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状态

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);

 

我也是有底线哒~
一文讲清GTS IO状态和索引问题-工控吧!
一文讲清GTS IO状态和索引问题
此内容为付费阅读,请付费后查看
500积分
付费阅读
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容