ABB RAPID 实测 DSQC652 板卡(DI/DO 一键测试)
一、前置条件
DSQC652 硬件跳线地址 = 软件地址(默认10)
示教器已建好 IO 信号,映射到 652 通道
DI 接传感器 / 短接 24V,DO 接指示灯 / 电磁阀
控制器热启动生效
二、通用测试信号命名(统一规范)
plaintext
DI0~DI15:di_in0 ~ di_in15 DO0~DO15:do_out0 ~ do_out15
三、完整 RAPID 测试程序(直接导入运行)
rapid
MODULE IO_TEST_652
! 652板卡DI DO全自动测试
PROC IO652_ALL_TEST()
VAR num i;
TPErase;
TPWrite "=====DSQC652板卡测试开始=====";
WaitTime 0.8;
! 1.循环测试16路数字输入DI0-DI15
FOR i FROM 0 TO 15 DO
IF GetDI("di_in"+NumToStr(i))=1 THEN
TPWrite "DI"+NumToStr(i)+" 状态:ON";
ELSE
TPWrite "DI"+NumToStr(i)+" 状态:OFF";
ENDIF
WaitTime 0.3;
ENDFOR
WaitTime 1;
! 2.循环测试16路数字输出DO0-DO15
TPWrite "开始逐路输出点亮测试";
FOR i FROM 0 TO 15 DO
SetDO("do_out"+NumToStr(i),1);
TPWrite "DO"+NumToStr(i)+" 输出接通";
WaitTime 0.5;
SetDO("do_out"+NumToStr(i),0);
WaitTime 0.2;
ENDFOR
TPWrite "=====652板卡全部测试完成=====";
ENDPROC
! 单路DI单独测试(指定通道)
PROC SINGLE_DI_TEST(num di_num)
IF di_num<0 OR di_num>15 THEN
TPWrite "通道超出0-15范围";
RETURN;
ENDIF
IF GetDI("di_in"+NumToStr(di_num))=1 THEN
TPWrite "DI"+NumToStr(di_num)+" 有信号正常";
ELSE
TPWrite "DI"+NumToStr(di_num)+" 无信号";
ENDIF
ENDPROC
! 单路DO点动测试
PROC SINGLE_DO_TEST(num do_num,bool out_state)
IF do_num<0 OR do_num>15 THEN
TPWrite "通道超出0-15范围";
RETURN;
ENDIF
SetDO("do_out"+NumToStr(do_num),out_state);
IF out_state=TRUE THEN
TPWrite "DO"+NumToStr(do_num)+" 置ON";
ELSE
TPWrite "DO"+NumToStr(do_num)+" 置OFF";
ENDIF
ENDPROC
! 一键复位所有DO输出
PROC RESET_ALL_DO()
VAR num n;
FOR n FROM 0 TO 15 DO
SetDO("do_out"+NumToStr(n),0);
ENDFOR
TPWrite "所有DO已全部断开";
ENDPROC
ENDMODULE四、运行测试方法
1. 全自动整体测试
调用:IO652_ALL_TEST();
依次读取16 路 DI状态弹窗显示
依次接通断开16 路 DO,外接灯 / 负载同步动作
2. 单独测某一路输入
例测试 DI5:SINGLE_DI_TEST(5);
3. 单独控制点动输出
打开 DO3:SINGLE_DO_TEST(3,TRUE);关闭 DO3:SINGLE_DO_TEST(3,FALSE);
4. 紧急清空所有输出
RESET_ALL_DO();
五、快速判断板卡好坏
DI 全部无信号
652 板卡地址不匹配、DeviceNet 掉线、DI 公共端 24V 未接
DO 无输出
DO 公共端 0V 缺失、外部负载没电、信号映射错误
部分通道正常部分异常
板卡通道损坏、接线端子松动
程序提示找不到信号
示教器未创建对应
di_inx / do_outx信号
六、示教器简易离线测试(不用编程)
菜单 → I/O → 输入信号直接拨动传感器,看对应 DI 实时变色
输出信号手动强制置 1 / 置 0,看外部执行元件动作
七、精简极简测试程序
rapid
PROC TEST652() IF di_in0=1 THEN TPWrite "DI0正常";ENDIF Set do_out0;WaitTime 1;Reset do_out0; ENDPROC


