使用文档: 控制器: Q系列应用教程
型号说明:【HCQ0-1100-D】【HCQ0-1200-D】
外观接口说明:
npn接近开关,输出拉低0V (300mA)
Q0系列CPU模块说明书ATCIQ02232.pdf
【FN钮】:左stop,中run,右fn
【CAN】:
网口1.1 H【内部已并联120Ω】
网口1.2 L【can】
网口1.3 GND【屏蔽】
网口1.4 A2【内部已并联120Ω】【不支持从站模式】com2
网口1.5 B2
【port_1】:以太网
【port_2】:ECAT
【QBus 】: 右扩展io
【端子台 】: COM_1#:【右侧长端子】(SW4左:接通电阻120Ω)
COM_2#:【网口】(3 GND,4 a2,5 b2)
COM_3#:【rs232】
千兆以太网口支持 Modbus TCP ; 选择》 简单模式
固件版本越新越好。
大于 1.04 【越好】 该版本支持web【网页可视化】
IPV4:192.168.88.100 子网掩码:255.255.255.0
运行模式下改ip
PLC的描述文件安装方式是工具下第一个。 【包安装】
Q1系列有2个rj45网口:
网口1:IPV4:192.168.188.100 子网掩码:255.255.255.0
网口2:IPV4:192.168.88.100 子网掩码:255.255.255.0
闪烁(W): Update灯【闪烁4下】 '用于查看和PLC的连接'
固件升级默认ip: http://192.168.88.100:10000/
FN拨码:
左:STOP 中:RUN 右:FN
【RUN闪烁】下:
FN右拨一下,Update灯【闪4下】生效。再重新上电。
SW向左 ←《 是ON
【RUN闪烁】下:
FN右拨一下,Update灯【闪4下】生效。再重新上电。
SW4:【左◀on】: A1 B1并联120Ω
网口1.4 A2【内部已并联120Ω】
网口1.5 B2
TF卡位置:
sd0:TF卡
part0:U盘
程序总容量 16MBytes
I区(%) 128kBytes
Q区(%Q) 128kBytes
编程
M区 (%M) 512kBytes
掉电保持区 800kBytes
CPU 16bit
编译:
编译不报错,下载就报错:
固件版本问题导致的,需要降级【库函数】版本(占位符)
或者固件不支持的库/功能 也要删掉。如 web等
固件版本:
看名称后缀 1.04 需要注意某些函数库版本不能超过固件支持。
有些函数版本,不能超过固件版本
cmpCodeMeter
ioStandard
PN码第一位是4的话是340版本的,建议扫描确认具体版本
利用错误关键字,在库里找出这个是属于哪方面的,做降级参考。
降级这2个库后,程序下载到PLC就不报错了。
CAN主站:
面板上【CAN灯】:
【常亮】can网线没有接通。
【闪烁】正常工作中。
HL【内部已并联120Ω】
主站80h帧【必须】是Task周期的【1~2】倍。
从站心跳消费周期是主站心跳的【1.5】倍。 '480ms,720ms'
【POWER】启动条件:0x6041=0x0250
【JOG】 条件:0x6041=0x0637;且 0x60ff不为0,
且0x6061=3【可按stop切换到03】jog键【长按】
【JOG】释放后,需要等待5秒
【注】:复位节点是独立的,不受专家勾选影响。
在can模块下,再添加can轴主站
右键》扫描设备
添加can库:
MC_POWER_CO 的条件是0x6041的值为0x0250; 【其他函数】0x6041的值为0x0627;
说明文档: 禾川Q系列CANOPEN应用教程V1.3-20210907.pdf
库函数文件: 库函数HCFA_CANopenLib_0.0.0.4.compiled-library
注意:库函数文件,官网上下载不了,只能人工服务,问客服索取。
库并不好用,类似寄存器绑定。
ECAT主站:
codesys【ECAT总线】维修电工Demo-CSDN博客
ECAT轴【调试笔记】_smc_followposition-CSDN博客
1修改ECAT网卡ip
2用扳手在线
3ECAT总线【右击,扫描从站】
4断开PLC
5驱动器下,添加402轴。
PLC命令:
? 打印可用命令的列表。
getcmdlist 在内部用于显示所有可用的命令。
mem<address>〔<size>〕 打印指定内存区域的Hexdump。
reflect 只需回复输入的命令(用于测试连接)。
applist 打印当前加载的应用程序的列表。
pid[<应用程序名称>|<应用程序索引>] 转储一个特定或所有加载的应用程序的Guid。
pinf[<应用程序名称>|<应用程序索引>] 转储一个特定或所有加载的应用程序的项目信息。
startprg[<app名称>|<app索引>] 启动一个特定或所有加载的应用程序。
stopprg[<应用程序名称>|<应用程序索引>] 停止一个特定或所有加载的应用程序。
resetprg[<应用程序名称>|<应用程序索引>] 重置一个特定或所有加载的应用程序。
resetprgcold[<应用程序名称>|<应用程序索引>] 对一个特定或所有加载的应用程序执行冷重置。
reload[<应用程序名称>|<应用程序索引>] 从启动项目重新加载一个特定或所有加载的应用程序。
getprgprop[尚未实施]
getprgstat[<app名称>|<app索引>] 获取一个特定或所有加载的应用程序的状态。
plcload 获取PLC任务的处理器负载。
rtsinfo 打印运行时系统信息,如处理器和运行时版本。
channelinfo 返回通信信道信息。
rtc-get 通过DateTime字符串获取UTC。
rtc-set 通过DateTime字符串设置UTC(请参阅ISO 8601)。
所需格式:“rtc-set YYYY-MM-DDThh:mm:ss[,sss]”
showsecuritysettings 显示所有安全设置和当前配置的列表。
cert-getapplist 显示所有已注册的应用证书(组件ID和应用程序)
cert genselfsigned[<number retrieved by "cert-getapplist"> <expdays=>]生成所有自签名证书
cert-gendhparams [len in bits] 生成Diffie-Hellman密钥交换所需的参数。注意力可能会持续几分钟!
cert getcertlist[<trustlevel>] 获取所有证书的列表
cert-createcsr [<number retrieved by "cert-getapplist">] 为所有应用程序创建CSR文件
证书导入<信任级别><文件名>
导入证书
cert导出<trustlevel>〔<“cert-getcertlist”检索的数字>〕
导出证书
cert-remove<trustlevel><通过“cert-getcertlist”或“all”检索的数字>
删除证书
plc程序导出
将目标plc程序导出到usb设备。
delpasswd
删除用户密码。
saveretains[<applicationname>]
保存保留到个文件。[仅在指定的应用程序中可选]。
restoreretains[<applicationname>]
从文件还原保留。[仅对指定的应用程序可选]。
软件授权:
编程:
变量:
PROGRAM CANopen样例
VAR
//Axis1: AXIS_REF_CO ; // 新建局部变量
MC_Power_CO :MC_Power_CO;
MC_Home_CO :MC_Home_CO;
MC_Reset_CO :MC_Reset_CO;
MC_Stop_CO :MC_Stop_CO;
MC_MoveVelocity_CO :MC_MoveVelocity_CO;
MC_MoveAbsolute_CO :MC_MoveAbsolute_CO;
MC_MoveAbsolute1_CO :MC_MoveAbsolute_CO;
MC_MoveRelative_CO :MC_MoveRelative_CO;
MC_MoveRelative1_CO :MC_MoveRelative_CO;
MC_Jog_CO :MC_Jog_CO;
b伺服通信状态 :BOOL;
e轴运行状态 :SMC_AXIS_STATE;
e轴故障代码 :MC_ERROR_CO;
f轴当前位置 :LREAL;
f轴当前速度 :lREAL;
f轴当前转矩 :REAL;
num :UINT;
h0:uint;
h6:UINT;
h7:UINT;
hF:uint;
END_VAR
程序:
//GVL.Axis1.pDevice
gvl.Axis1.pDevice :=ADR(DMA882_CAN); //---指定对应的CANOPEN设备,必须赋值
// GVL.Axis1 := Axis1 ;
gvl.Axis1.fEncoderFactor :=10000; //---给定齿轮比,齿轮比=(电机一圈指令数÷电机转动一圈对应应用单元)
// 修改0x6041默认值0x0250
IF gvl.h6041 = 16#0200 THEN
gvl.Axis1.In.wStatusWord := 16#250;
ELSE
gvl.Axis1.In.wStatusWord := gvl.h6041;
END_IF
// 使能电机
mc_power_co.bRegulatorOn:=1;
mc_power_co.bEnable:=1;
// 刷新任务
A00_功能块调用();
num:=num+1;
//gvl.h6041:=num;
// 显示结果
b伺服通信状态 :=gvl.Axis1.bCommunication; //---读取从站通信状态
e轴运行状态 :=gvl.Axis1.nAxisState; //---读取轴运行状态
e轴故障代码 :=gvl.Axis1.eErrorID[0]; //---读取当前的轴故障代码
f轴当前位置 :=gvl.Axis1.fActPosition; //---读取伺服反馈位置
f轴当前速度 :=gvl.Axis1.fActVelocity; //---读取伺服反馈速度
f轴当前转矩 :=gvl.Axis1.fActTorque; //---读取伺服反馈转矩
IF gvl.Axis1.Out.wControlWord = 0 THEN
h0:=gvl.Axis1.In.wStatusWord;
END_IF
IF gvl.Axis1.Out.wControlWord = 6 THEN
h6:=gvl.Axis1.In.wStatusWord;
END_IF
IF gvl.Axis1.Out.wControlWord = 7 THEN
h7:=gvl.Axis1.In.wStatusWord;
END_IF
IF gvl.Axis1.Out.wControlWord = 16#F THEN
hf:=gvl.Axis1.In.wStatusWord;
END_IF
是oop对象。可以循环对轴操作。
程序移植:
变量:
PROGRAM CANopen样例
VAR
//Axis1: AXIS_REF_CO ; // 新建局部变量
MC_Power_CO :MC_Power_CO;
MC_Home_CO :MC_Home_CO;
MC_Reset_CO :MC_Reset_CO;
MC_Stop_CO :MC_Stop_CO;
MC_MoveVelocity_CO :MC_MoveVelocity_CO;
MC_MoveAbsolute_CO :MC_MoveAbsolute_CO;
MC_MoveRelative_CO :MC_MoveRelative_CO;
MC_Jog_CO :MC_Jog_CO;
b伺服通信状态 :BOOL;
e轴运行状态 :SMC_AXIS_STATE;
e轴故障代码 :MC_ERROR_CO;
f轴当前位置 :LREAL;
f轴当前速度 :lREAL;
f轴当前转矩 :REAL;
num :UINT;
h0:uint;
h6:UINT;
h7:UINT;
hF:uint;
END_VAR
程序:
//GVL.Axis1.pDevice
gvl.Axis1.pDevice :=ADR(DMA882_CAN); //---指定对应的CANOPEN设备,必须赋值
// GVL.Axis1 := Axis1 ;
gvl.Axis1.fEncoderFactor :=10000; //---给定齿轮比,齿轮比=(电机一圈指令数÷电机转动一圈对应应用单元)
// 修改0x6041默认值0x0250
IF gvl.h6041 = 16#0200 THEN
gvl.Axis1.In.wStatusWord := 16#250;
ELSE
gvl.Axis1.In.wStatusWord := gvl.h6041;
END_IF
// 使能电机
mc_power_co.bRegulatorOn:=1;
mc_power_co.bEnable:=1;
// 刷新任务
A00_功能块调用();
num:=num+1;
//gvl.h6041:=num;
// 显示结果
b伺服通信状态 :=gvl.Axis1.bCommunication; //---读取从站通信状态
e轴运行状态 :=gvl.Axis1.nAxisState; //---读取轴运行状态
e轴故障代码 :=gvl.Axis1.eErrorID[0]; //---读取当前的轴故障代码
f轴当前位置 :=gvl.Axis1.fActPosition; //---读取伺服反馈位置
f轴当前速度 :=gvl.Axis1.fActVelocity; //---读取伺服反馈速度
f轴当前转矩 :=gvl.Axis1.fActTorque; //---读取伺服反馈转矩
IF gvl.Axis1.Out.wControlWord = 0 THEN
h0:=gvl.Axis1.In.wStatusWord;
END_IF
IF gvl.Axis1.Out.wControlWord = 6 THEN
h6:=gvl.Axis1.In.wStatusWord;
END_IF
IF gvl.Axis1.Out.wControlWord = 7 THEN
h7:=gvl.Axis1.In.wStatusWord;
END_IF
IF gvl.Axis1.Out.wControlWord = 16#F THEN
hf:=gvl.Axis1.In.wStatusWord;
END_IF
修改ip:
运行模式下
运行模式下》【修改ip】》【写参数】》【断电重启】
如果ip修改不成功,
需要考虑设备库插件的问题,重新安装对应固件版本的库
ip改好后【写参数】【断电重启PLC】
如果ip修改失败,是因为固件描述版本不对,重新安装对应版本。
安装成功后
扩展模块:
1耦合器: HCQX-ES06-D4
2分布式io: HCQX-EC03-D4
3输入DI: HCQX-ID32-D4
4输出DO: HCQX-OD32-D4
5混合DIO: HCQX-MD32-D4