
1型号概述使用文档 控制器: Q系列应用教程型号说明:【HCQ0-1100-D】【HCQ0-1200-D】默认值ipnpn接近开关输出拉低0V300mAQ0系列CPU模块说明书ATCIQ02232.pdf【FN钮】左stop中run右fn【CAN】网口1网口1.1 H【内部已并联120Ω】网口1.2 L【can】网口1.3 GND【屏蔽】网口1.4 A2【内部已并联120Ω】【不支持从站模式】com2网口1.5 B2【port_1】网口2192.168.88.100【默认】【port_2】网口3 ECAT【QBus 】 右扩展io【485端子】 COM_1#【右侧长端子A1B1】SW4左接通电阻120ΩCOM_2#【网口1】3 GND4 a25 b2COM_3#【rs232】【可视化】192.168.88.100:8080【升固件】192.168.88.100:10000千兆以太网口支持 Modbus TCP 选择》简单模式固件版本越新越好。 大于 1.04 【越好】 该版本支持web【网页可视化】IPV4192.168.88.100 子网掩码255.255.255.0运行模式下改ip-----》写参数-------》关电重启//如果不行需要重新安装设备描述文件可视化ip地址PLC的ip 加上 :8080 //192.168.88.100:8080PLC的描述文件安装方式是工具下第一个。 【包安装】Q1系列有2个rj45网口 网口1IPV4192.168.188.100 子网掩码255.255.255.0 网口2IPV4192.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 B2TF卡位置sd0TF卡 part0U盘程序总容量 16MBytes I区(%) 128kBytes Q区(%Q) 128kBytes 编程 M区 (%M) 512kBytes 掉电保持区 800kBytes CPU 16bit编译编译不报错下载就报错固件版本问题导致的需要降级【库函数】版本占位符 或者固件不支持的库/功能 也要删掉。如 web等固件版本控制器: Q系列 产品包文件看名称后缀1.04需要注意某些函数库版本不能超过固件支持。有些函数版本不能超过固件版本 cmpCodeMeter ioStandard PN码第一位是4的话是340版本的建议扫描确认具体版本利用错误关键字在库里找出这个是属于哪方面的做降级参考。降级这2个库后程序下载到PLC就不报错了。CAN主站codesys【CAN总线】-CSDN博客CAN轴【禾川】-CSDN博客面板上【CAN灯】 【常亮】can网线没有接通。 【闪烁】正常工作中。 HL【内部已并联120Ω】 主站80h帧【必须】是Task周期的【1~2】倍。 从站心跳消费周期是主站心跳的【1.5】倍。 480ms720ms 【POWER】启动条件0x60410x0250 【JOG】 条件0x60410x0637且 0x60ff不为0 且0x60613【可按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 注意库函数文件官网上下载不了只能人工服务问客服索取。 库并不好用类似寄存器绑定。can轴全局变量区GVL{attribute qualified_only}VAR_GLOBALAxis1: AXIS_REF_CO;END_VAR程序区PROGRAM PLC_PRGVARf轴当前转矩: real;AAA: BOOL;MC_Power_CO: MC_Power_CO;b伺服通信状态: bool;f轴当前位置: real;f轴当前速度: real;e轴运行状态: SMC_AXIS_STATE;END_VAR----------------------------------------------------GVL.Axis1.pDevice :ADR(hcfaCAN); //---指定对应的CANOPEN设备必须赋值GVL.Axis1.fEncoderFactor :10000; //---给定齿轮比,齿轮比(电机一圈指令数÷电机转动一圈对应应用单元)b伺服通信状态 :GVL.Axis1.bCommunication; //---读取从站通信状态e轴运行状态 :GVL.Axis1.nAxisState; //---读取轴运行状态//e轴故障代码 :Axis1.eErrorID[0]; //---读取当前的轴故障代码f轴当前位置 :GVL.Axis1.fActPosition; //---读取伺服反馈位置f轴当前速度 :GVL.Axis1.fActVelocity; //---读取伺服反馈速度f轴当前转矩 :GVL.Axis1.fActTorque; //---读取伺服反馈转矩MC_Power_CO(Axis:GVL.Axis1 ,bEnable:AAA ,bRegulatorOn: ,bStatus ,bBusy ,bError ,eErrorID );ECAT主站用codesys软件保存轴参数时-------------------------------------0x1010-011702257011;//【保存所有参数】保存参数16#657661730x65766173-------0x1011-011684107116;//【恢复所有参数】0x64616F6Ccodesys【ECAT总线】维修电工Demo-CSDN博客ECAT轴【调试笔记】_smc_followposition-CSDN博客1修改ECAT网卡ip 2用扳手在线 3ECAT总线【右击扫描从站】 4断开PLC 5驱动器下添加402轴。ECAT主站设置 ST编程下输入助手直接输入ECAT主站名字EtherCAT_Master_SoftMotion(xRestart: , //上升沿触发复位xStopBus: , // true后还需要给xRestart上升沿xConfigFinished , // 配置完成xDistributedClockInSync , // 分布式时钟同步xError , // 故障xSyncInWindow ); // 窗口同步ECAT轴AXIS_REF_SM3(wAxisStructID: ,nAxisState: ,bRegulatorOn: ,bDriveStart: ,bCommunication: ,wCommunicationState: ,uiDriveInterfaceError: ,bRegulatorRealState: ,bDriveStartRealState: ,wDriveId: ,iOwner: ,fCycleTimeSpent: ,fTaskCycle: ,bError: ,dwErrorID: ,bErrorAckn: ,bDisableErrorLogging: ,fbeFBError: ,dwRatioTechUnitsDenom: ,iRatioTechUnitsNum: ,nDirection: ,fScalefactor: ,fFactorVel: ,fFactorAcc: ,fFactorTor: ,fFactorJerk: ,fFactorCur: ,fFactorReference: ,iMovementType: ,fPositionPeriod: ,eRampType: ,motorType: ,byControllerMode: ,byRealControllerMode: ,fSetPosition: ,fActPosition: ,fAimPosition: ,fSavePosition: ,fSetVelocity: ,fActVelocity: ,fMaxVelocity: ,fSWMaxVelocity: ,bConstantVelocity: ,fSaveVelocity: ,fSetAcceleration: ,fActAcceleration: ,fMaxAcceleration: ,fSWMaxAcceleration: ,bAccelerating: ,fSaveAcceleration: ,fMaxDeceleration: ,fSWMaxDeceleration: ,bDecelerating: ,fSaveDeceleration: ,fSetJerk: ,fActJerk: ,fMaxJerk: ,fSWMaxJerk: ,fRampJerk: ,fSaveJerk: ,fSetCurrent: ,fActCurrent: ,fMaxCurrent: ,fSWMaxCurrent: ,fSetTorque: ,fActTorque: ,fMaxTorque: ,fSWMaxTorque: ,fSWLimitPositive: ,fSWLimitNegative: ,usiSWEndSwitchState: ,bSWLimitEnable: ,bHWLimitEnable: ,bStartReference: ,fReference: ,bStartReferenceRealState: ,fOffsetPosition: ,dwPosOffsetForResiduals: ,dwOneTurn: ,dwLastPosition: ,bySwitchingState: ,iRestNumerator: ,iTurn: ,dwActPosition: ,usiBusBitWidth: ,dwBusModuloMask: ,eBrakeControl: ,bBrakeClosedRealState: ,bOldError: ,bVirtual: ,bLogical: ,fSetActTimeLagCycles: ,diSetPosition: ,diActPosition: , //实际脉冲当量u32diSetVelocity: ,diActVelocity: ,diSetAcceleration: ,diActAcceleration: ,diSetCurrent: ,diActCurrent: ,diSetTorque: ,diActTorque: ,fSWLimitDeceleration: ,xWaitForHaltWhenStopInterruptsHome: ,fSWErrorMaxDistance: ,eCheckPositionLag: ,fMaxPositionLag: ,bPositionLagActive: ,bModuloDoneByDrive: ,diFollowingError: ,fFollowingError: ,aCaptDesc: ,xPersistentDataLoaded: ,strDriveInterfaceError: ,adatAcyclic: ,nAbortCounter: ,vMinRequiredVersion: ,bAvoidReversalOnHaltStop: ,bConsiderLimitsOfAbortedMotionOnHaltStop: ,bUpdateIOsInStop: ,bAutoRestart: ,overrideFactors: ,m_superimposed: ,strDriver ,dwDriverVersion );PLC命令? 打印可用命令的列表。 getcmdlist 在内部用于显示所有可用的命令。 memaddress〔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-removetrustlevel通过“cert-getcertlist”或“all”检索的数字 删除证书 plc程序导出 将目标plc程序导出到usb设备。 delpasswd 删除用户密码。 saveretains[applicationname] 保存保留到个文件。[仅在指定的应用程序中可选]。 restoreretains[applicationname] 从文件还原保留。[仅对指定的应用程序可选]。软件授权【工具】》【设备读取器】TargetVisu 本地可视化WebVisu网页可视化编程变量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:num1; //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:num1; //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程序案例C:\Program Files\CODESYS 3.5.20.10\CODESYS\CODESYS SoftMotion\Examples\TutorialCNC案例修改ip控制器: Q系列 产品包文件运行模式下运行模式下》【修改ip】》【写参数】》【断电重启】如果ip修改不成功需要考虑设备库插件的问题重新安装对应固件版本的库ip改好后【写参数】【断电重启PLC】如果ip修改失败是因为固件描述版本不对重新安装对应版本。控制器: Q系列 产品包文件安装成功后分布式io模块1耦合器 HCQX-EC03-D4 【HCMX-EC01-D】2混合DIO HCQX-MD32-D43继电器DO HCQX-OC08-D44路由器 HCQX-ES06-D45输入DI HCQX-ID32-D46输出DO HCQX-OD32-D47一体式 HCNXE-MD1616-DFB284这个是codesys下的,方便新手使用FUNCTION_BLOCK PUBLIC FB284 VAR deinit: SMC3_ReinitDrive; power: MC_Power; reset: MC_Reset; jog: MC_Jog; moveVelocity: MC_MoveVelocity; home: MC_Home; moveRelative: MC_MoveRelative; moveABS: MC_MoveAbsolute; halt: MC_Halt; END_VAR VAR_IN_OUT // 轴绑定 p_Axis: AXIS_REF_SM3; END_VAR VAR_INPUT // 接常闭,灯灭是急停报警 急停: BOOL : TRUE; // 伺服使能 轴上电: BOOL : TRUE; // 伺服驱动器复位 大复位: BOOL : FALSE; // 轴故障复位 小复位: BOOL : FALSE; // 轴点动速度 轴速度: INT : 44; 轴加速度: INT : 44; 轴减速度: INT : 44; 轴速度变化曲线: INT : 44; // 轴点正 轴点正: BOOL : FALSE; // 轴点反 轴点反: BOOL : FALSE; END_VAR VAR // 自动旋转 自动旋转速度: INT : 44; // 自动旋转 自动旋转: BOOL : FALSE; END_VAR VAR_INPUT 回零偏置: UINT; // 轴回零,偏置用绝对坐标 回零: BOOL : FALSE; // 42步进,200比96,单圈1万填4800 相对坐标: LREAL : 10; 相对定位: BOOL : FALSE; 绝对坐标: LREAL; 绝对定位: BOOL : FALSE; 暂停: BOOL : FALSE; END_VARpower( Axis: p_Axis, Enable: 1, bRegulatorOn: 轴上电, bDriveStart:急停 , Status , bRegulatorRealState , bDriveStartRealState , Busy , Error , ErrorID ); reset( Axis: p_Axis, Execute:小复位 , Done , Busy , Error , ErrorID ); // 伺服驱动器,,,复位 deinit( Axis: p_Axis, bExecute: 大复位, bVirtual: , bDone , bBusy , bError , nErrorID ); jog( Axis: p_Axis, JogForward: 轴点正, JogBackward: 轴点反, Velocity:轴速度 , Acceleration: 轴加速度, Deceleration: 轴减速度, Jerk: 轴速度变化曲线, Busy , CommandAborted , Error , ErrorId ); moveVelocity( Axis: p_Axis, Execute: 自动旋转, Velocity: 自动旋转速度, Acceleration:轴加速度 , Deceleration:轴减速度 , Jerk: 轴速度变化曲线, Direction: , BufferMode: , InVelocity , Busy , Active , CommandAborted , Error , ErrorID ); home( Axis: p_Axis, Execute: 回零, Position: 回零偏置, Done , Busy , CommandAborted , Error , ErrorID ); moveRelative( Axis:p_Axis , Execute: 相对定位, Distance: 相对坐标, Velocity: 轴速度, Acceleration: 轴加速度, Deceleration: 轴减速度, Jerk: 轴速度变化曲线, BufferMode: , Done , Busy , Active , CommandAborted , Error , ErrorID ); moveABS( Axis: p_Axis, Execute: 绝对定位, Position: 绝对坐标, Velocity: 轴速度, Acceleration: 轴加速度, Deceleration: 轴减速度, Jerk: 轴速度变化曲线, Direction: , BufferMode: , Done , Busy , Active , CommandAborted , Error , ErrorID ); halt( Axis: p_Axis, Execute: 暂停, Deceleration: 轴减速度, Jerk: 轴速度变化曲线, Done , Busy , CommandAborted , Error , ErrorID ); (* Velocity:轴速度 , Acceleration: 轴加速度, Deceleration: 轴减速度, Jerk: 轴速度变化曲线, *)