1基础函数
MC_Power 电源
MC_Reset 重置
MC_Home 回零 SMC_Homing
MC_Stop 急停 【bit2,0x02;//[x01x]】
MC_Halt 暂停【bit8,0x10F】可继续
MC_Jog 点动
MC_MoveAbsolute 绝对运动
MC_MoveRelative 相对运动
MC_MoveVelocity 相对速度
SMC_SetTorque 设置转矩值
MC_MoveSuperImposed 叠加位置速度
MC_MoveAdditive 叠加位置
2主从轴
3坐标正逆变换:
TRAFOF【电机到笛卡尔坐标】正计算
TRAFOV【笛卡尔到电机,输出位置和速度】逆计算
TRAFO 【笛卡尔到电机位置】
主要用龙门5轴模型:
从笛卡尔坐标【逆计算】转到电机位置(移动刀具加工)
,和电机位置【正计算】转到笛卡尔坐标。(用于上位机模型显示)
带刀具末端位置补偿。
SoftMotion Transformations 软运动转换
【正计算】轴转笛卡尔
Gantry systems '龙门系统'
SMC_TRAFOF_5Axes (FB) 龙门五轴'正计算,5个电机位置到【笛卡尔坐标】'
SMC_TRAFOF_Gantry2 (FB) 激光打标机
SMC_TRAFOF_Gantry2Tool1 (FB)
SMC_TRAFOF_Gantry2Tool2 (FB) 带两把刀补【刀粗细】
SMC_TRAFOF_Gantry3 (FB)
SMC_TRAFOF_Gantry3D (FB) 附带Z轴限位
SMC_TRAFOF_GantryCutter2 (FB)
SMC_TRAFOF_GantryCutter3 (FB) '裁切机'带R旋转【A轴】刀片【切圆弧】附带Z轴
SMC_TRAFOF_GantryH2 (FB) 同步带串联H模组
SMC_TRAFOF_GantryT2 (FB)
SMC_TRAFOF_GantryT2_O (FB) 附带驱动器配置
【逆计算】笛卡尔转到电机位置
SMC_TRAFOV_Gantry2 (FB)
SMC_TRAFOV_Gantry3 (FB) 雕刻机'逆计算,笛卡尔坐标到【电机速度】【电机位置】'
SMC_TRAFOV_GantryCutter2 (FB)
SMC_TRAFOV_GantryCutter3 (FB) '裁切机'带刀片圆弧切割
SMC_TRAFOV_GantryH2 (FB)
SMC_TRAFOV_GantryT2 (FB)
SMC_TRAFOV_GantryT2_O (FB)
SMC_TRAFO_5Axes (FB) 龙门五轴'逆计算,笛卡尔坐标到【电机位置】'
SMC_TRAFO_Gantry2 (FB)
SMC_TRAFO_Gantry2Tool1 (FB)
SMC_TRAFO_Gantry2Tool2 (FB)
SMC_TRAFO_Gantry3 (FB) '雕刻机'
SMC_TRAFO_GantryCutter2 (FB)
SMC_TRAFO_GantryCutter3 (FB)
SMC_TRAFO_GantryH2 (FB)
SMC_TRAFO_GantryT2 (FB)
SMC_TRAFO_GantryT2_O (FB) 带驱动器配置
Parallel Systems 平行系统
Bipod_Arm 双脚架臂【垂直关节】
SMC_TRAFOF_Bipod_Arm (FB)
SMC_TRAFO_Bipod_Arm (FB)
Tripod 三脚架【三角洲3D打印机】
SMC_TRAFOF_Tripod (FB)
SMC_TRAFO_Tripod (FB)
Tripod_Arm 三脚架臂Arm
SMC_TRAFOF_Tripod_Arm (FB)
SMC_TRAFO_Tripod_Arm (FB)
Tripod_Lin 三脚架臂Lin
SMC_TrafoF_Tripod_Lin (FB)
SMC_Trafo_Tripod_Lin (FB)
Robot Kinematiks 机器人运动学【4轴机械手】
SMC_TrafoF_4AxisPalletizer (FB)
SMC_TrafoF_ArticulatedRobot_6DOF (FB)
SMC_Trafo_4AxisPalletizer (FB)
SMC_Trafo_ArticulatedRobot_6DOF (FB)
Scara System Scara系统【圆柱状水平关节】
SMC_TRAFOF_Polar (FB)
SMC_TRAFOF_Scara2 (FB)
SMC_TRAFOF_Scara3 (FB)
SMC_TRAFO_Polar (FB)
SMC_TRAFO_Scara2 (FB)
SMC_TRAFO_Scara3 (FB)
additional FBs '附加FB'
SMC_CalcDirectionFromVector (FB)
2电机定位:
从轴跟随: SMC_TrackAxis (FB)
【CNC库】
Direct Axis Control 直接轴控制
SMC_ControlAxisByPos (FB) '按位置控制轴'
SMC_ControlAxisByPosVel (FB) 位置速度
SMC_ControlAxisByVel (FB) 速度
【基本库】 SM3_Basic
SMC_FollowPosition (FB) 跟随
SMC_FollowPositionVelocity (FB)
SMC_FollowSetValues (FB)
SMC_FollowVelocity (FB)
SMC_SetTorque (FB) 力矩
SMC_TrackAxis (FB) 跟踪
SMC_TrackSetValues (FB)
【主/从】轴
MC_CamIn (FB) 凸轮
MC_CamOut (FB)
MC_GearIn (FB) 电子齿轮
MC_GearInPos (FB)
MC_GearOut (FB)
MC_Phasing (FB) 相位
Direct Axis Control '直接轴控制'
轴定位置 SMC_ControlAxisByPos (FB)
轴定速度位置 SMC_ControlAxisByPosVel (FB)
轴定速度 SMC_ControlAxisByVel (FB)
//================================================
配置轴位置1:SMC_ControlAxisByPos(
Axis:= x1, //目标轴
iStatus:= ,// SMC_Interpolator实例的状态
bEnable:= , //TRUE:开始执行
bAvoidGaps:= , //TRUE:开始监测位置
fSetPosition:= SM_Drive_Virtual_1, //在[u]中设置轴的位置。
fGapVelocity:= , //跳过的速度,单位为[u/s]
fGapAcceleration:= , //跳过的加速度[u/s2]
fGapDeceleration:= , //跳跃绕过的减速[u/s2]
fGapJerk:= , //在[u/s3]中跳过跳跃的跳跃
bBusy=> , //TRUE:功能块运行
bCommandAborted=> , //TRUE:执行被另一个在轴上操作的功能块实例中断。
bError=> , //TRUE:出现错误
iErrorID=> , //错误码
bStopIpo=> );//TRUE:速度或位置发生跳跃,并且正在运行对新位置的适应。
————————————————
版权声明:本文为CSDN博主「cfqq1989」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cfqq1989/article/details/131160892
SMC_INT_STATUS (ENUM)
0:SMC_Interpolator完全通过后可能不会出现的内部状态。
1:初始化状态;运动尚未开始
2:插值正在进行;当前正在加速
3:以恒定速度进行插值
4:插值正在进行;当前正在减速
5:插值完成
6:插值正在进行;当前正在等待,例如通过停止输入或M命令
7:插值正在进行;目前正在加速
8:插值正在进行;当前正在降低加速度
9:插值正在进行;目前正在加速减速
10:插值正在进行;目前正在减速
因为涉及到双X轴的龙门,所以我加了这一节:
轴组模型内,》绑定虚轴。》然后实轴跟随虚轴。
SMC_FollowPosition (FB) '跟随'
SMC_FollowPositionVelocity (FB) 位置和速度
SMC_FollowSetValues (FB)
SMC_FollowVelocity (FB)
SMC_SetTorque (FB) '力矩'
SMC_TrackAxis (FB) '跟踪'
SMC_TrackSetValues (FB)
这里主要使用:
直接轴【跟随】 SMC_TrackAxis (FB)// 从轴要使能状态下
bExecute上升沿:开始执行功能块。
Velocity 最高速度[u/s]
Acceleration 最大加速度,单位为[u/s²]。
Deceleration 最大减速度,单位为【u/s²】。
Jerk 起跳速度,单位为【u/s³】。【冲击速度】
————————————————
版权声明:本文为CSDN博主「cfqq1989」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cfqq1989/article/details/131799133
实轴使能后,再激活这个功能块,电机就会快速跟随。如果飞车【降低最大加速度和最高速度】
高阶的从轴跟随:
从轴配置成【力矩定位模式】》从轴跟随实轴。
3文件加载:SMC_ReadNCFile2
(FB)
SMC_ReadNCFile2 (FB) // NC文件: STRING := '_cnc/2.cnc';
SMC_NCInterpreter (FB) 'NC解释器'
' .....检查刀路,圆弧等'
SMC_CheckVelocities (FB) '检查速度'
SMC_Interpolator2Dir (FB) '插补器【正逆向】'
SMC_TRAFOV_GantryCutter3 (FB) '龙门裁切机'
SMC_ControlAxisByPosVel (FB) '配置电机【位置,速度】'
File
SMC_SINGLEVAR (STRUCT)
SMC_TOKENTYPE (ENUM)
SMC_VARLIST (STRUCT)
SMC_VARTYPE (ENUM)
使用请注明出处:维修电工 ,LSP电工,qq750273008
4G代码解析:
File:这个是G代码文件,CAD软件导出的dxf文件再转G代码。【上层】最终要解析到底层
SMC_CNC_REF:这个是G代码的半成品,带工具刀补等。【中层】
SMC_OutQueue:这个是最终的轨迹图,所见即所得。【底层】
SMC_Interpolator2Dir (FB)插补器【带正逆向】》
SMC_TRAFO_5Axes (FB)笛卡尔到电机位置》【或者其他机械模型】SMC_TRAFOV_GantryCutter3
(FB)
SMC_ControlAxisByPos (FB)配置电机运动到位置》从轴跟随: SMC_TrackAxis (FB)
【顶层】
SMC_ReadNCFile2 G代码处理【上层】
,SMC_NCInterpreter (FB) 解析文件,输出:SMC_OUTQUEUE (FB)
,串联其他检查(圆弧,刀补。。。。)
【中层】
SMC_CNC_REF (FB) G代码处理【中层】'带坐标宏的轨迹'
,SMC_NCDecoder (FB) 解析轨迹图对象,输出:SMC_OUTQUEUE (FB)
【底层】。。SMC_OUTQUEUE (FB) '最终轨迹流'轨迹所见即所得。'可串联圆弧,速度,刀补等FB'
,【串联,各种修饰FB】
,SMC_CheckVelocities (FB) 最后一条串联【速度平滑】
【插补器】
,SMC_Interpolator2Dir (FB) 带【正逆向插补器】加工的功能
,【串联模型,轴组逆计算模型】 'SMC_TRAFO_5Axes (FB)'或者'SMC_TRAFOV_GantryCutter3'
,SMC_ControlAxisByPos (FB) 坐标下发给电机 '坐标下发给电机前,串联一个检查速度FB'
【解析器】
SMC_NCInterpreter or SMC_NCDecoder.(文件 或者 中层对象)
, SMC_ToolRadiusCorr 圆弧
, SMC_AvoidLoop
, SMC_SmoothPath
, SMC_RoundPath
【插补器】
SMC_Interpolator 插补器【只能正向插补】
SMC_Interpolator2Dir (FB)【可正逆向插补】
SMC_XInterpolator 【凸轮曲速正向插补】
,SMC_ReadNCQueue (FB)
SMC_Interpolator, 【插补器】只能正向加工
SMC_Interpolator2Dir (FB), 可正逆向加工
SMC_XInterpolator 带凸轮的加工,凸轮编码器【100%】带动正向加工【100%】
旧的:
这三个,主要区别是:
File》SMC_CNC_REF》SMC_OutQueue
File:这个是G代码文件,CAD软件导出的dxf文件再转G代码。【上层】最终要解析到底层
SMC_CNC_REF:这个是G代码的半成品,带工具刀补等。【中层】
SMC_OutQueue:这个是最终的轨迹图,所见即所得。【底层】
项目可以加载这3种CNC,但程序最终结果是处理:SMC_OutQueue
//================================
File:
// 老版本,读取G代码文件
SMC_ReadNCFile (FB) 》SMC_NCDecoder (FB)
SMC_ReadNCQueue (FB) 》SMC_NCDecoder, SMC_SmoothPath, SMC_RoundPath,
SMC_AvoidLoop and SMC_ToolCorr
// 最新的
SMC_ReadNCFile2 (FB) 》SMC_NCInterpreter (FB)
SMC_NCLookupFile (FB)
//=================================
SMC_CNC_REF: '带坐标宏的轨迹'
//这个半成品后面跟》刀具补偿》圆弧插补》速度平滑》最后解析到 SMC_OutQueue
SMC_NCDecoder (FB)
//==================================
SMC_OutQueue:
SMC_Interpolator (FB)//解析出空间轨迹 //输入是指针【adr(CNC)】
SMC_Interpolator2Dir (FB)// 带【加工回退】,可反向插补运动
//===========================================
SMC_Interpolator (FB)// 解析空间轨迹
bExecute 执行从上升边缘开始。
poqDataIn 通常它指向SMC_CheckVelocities的输出poqDataOut。
bSlow_Stop true为停止。
bEmergency_Stop True为急停
bWaitAtNextStop 只要此变量为FALSE(默认值),路径就会不间断地传递。
dOverride 加工速度,【速度倍率】
iVelMode 该输入定义了SMC_INT_VELMODE中定义的速度剖面。
dwIpoTime【间隔时间】 必须为每次调用设置此变量。它表示循环时间,单位为μ秒。
dLastWayPos 该输入允许用户测量由插值器绘制的路径的拉伸。
bAbort 此输入设置为TRUE将中止功能块并重置输出。需要bExecute的上升沿才能再次启动插值器。
bSingleStep 此输入会使插值器在一个循环的持续时间内停止在两个路径对象之间的过渡处
bAcknM TRUE为确认M功能,并继续。
bQuick_Stop TRUE,插值器将把速度降低到零,直到bQuick_Stop重置为FALSE
dQuickDeceleration 用于bQuick_Stop的减速值
dJerkMax 起跳速度。它必须是正的,并且在插值器运行时不能更改。
dQuickStopJerk 如果选择了二次速度模式之一,则急动的幅度由快速停止用于降低加速度。
bSuppressSystemMFunctions 如果设置了此选项,则不会为G75或G4命令创建的内部M函数设置输出wM。
选中对象》 按F1 //获取帮助
【SMC_ReadNCFile2
(FB)】
SMC_ReadNCFile2 G代码处理【上层】
,SMC_NCInterpreter (FB) 加载后,输出:SMC_OUTQUEUE (FB)
,串联其他检查(圆弧,刀补。。。。)
,SMC_CheckVelocities (FB) 最后一条串联【检查速度】
,SMC_Interpolator2Dir (FB) 插补运动解析【插补器】
输入:
bExecute BOOL
bAbort BOOL
sFileName STRING(255)
pvl POINTER TO SMC_VARLIST
fDefaultVel LREAL
fDefaultAccel LREAL
fDefaultDecel LREAL
fDefaultVelFF LREAL
fDefaultAccelFF LREAL
fDefaultDecelFF LREAL
b3DMode BOOL
bStepSuppress BOOL
aSubProgramDirs ARRAY [0..4] OF STRING(174)
bParenthesesAsComments BOOL
bDisableJumpBuffer BOOL
pCustomFunTable POINTER TO SMC_NC_GFunctionTable
aTokenModifier ARRAY [0..(NUM_PARSER_CHAINS - 1)] OF SMC_ITokenModifier
aSentenceModifier ARRAY [0..(NUM_PARSER_CHAINS - 1)] OF SMC_IGSentenceModifier
输出:
【SMC_Interpolator2Dir
(FB)】
输入:
bExecute BOOL '触发'
poqDataIn POINTER TO SMC_OUTQUEUE 'ADR( )'轨迹图
bSlow_Stop BOOL
bEmergency_Stop BOOL
bWaitAtNextStop BOOL
dOverride LREAL 1
iVelMode SMC_INT_VELMODE TRAPEZOID
dwIpoTime DWORD '3000'插补周期
dLastWayPos LREAL
bAbort BOOL
bSingleStep BOOL
bAcknM BOOL
bQuick_Stop BOOL
dQuickDeceleration LREAL 0
dJerkMax LREAL
dQuickStopJerk LREAL
bStartAtEnd BOOL
bSuppressSystemMFunctions BOOL
输出:
【注】倒退路径需要在新Task里
【SMC_TRAFOV_GantryCutter3
(FB)】
裁切机,A轴刀片偏航方向
输入:
pi 目标位置矢量(x,y),插值器的输出
dVel 路径速度,插值器的输出
v 切线路径矢量,插值器的输出
dOffsetX x轴的附加偏移
dOffsetY y轴的附加偏移
dOffsetZ z轴的附加偏移
dOffsetR 旋转轴偏移
iDirectionR 旋转方向
输出:
【SMC_XInterpolator
(FB)】
带凸轮表,曲速正向加工
输入:
X_Axis AXIS_REF_SM3 '主轴'
bExecute BOOL 激活
poqDataIn POINTER TO SMC_OUTQUEUE 运动轨迹图
dLastWayPos LREAL 距离?
bAbort BOOL 中断
eDirection MC_Direction X轴,正逆向加工
dXOffset LREAL 相对于X轴位置的偏移
输出:
说明: 核心函数 SMC_NCInterpreter // File2的NC文件解析
SMC_Interpolator 旧版本,NC文件解析
SM3_CNC库文档
公司:3S-智能软件解决方案有限公司
标题:SM3_CNC
版本:4.13.0.0
分类:实习生| SoftMotion
作者:
占位符:SM3_CNC
说明[1]
该库的功能块允许读取、解释和插值g代码文件(根据DIN 66025)。
解释器(SMC_NCInterpreter)将路径转换为可以修改、转换和插值的结构,以便为驱动器创建循环设置位置。(例如
SMC_ReadNCFile2、//读取G代码文件
SMC_NCInterpreter、// G代码解析器,用与File2
SMC_ToolRadiusCorr、// 刀具补偿
SMC_AvoidLoop、// 轨迹
SMC_SmoothPath、// 平滑路径
SMC_RoundPath、// 圆形路径
SMC_Interpolator)。// 插补算法 它的上层是 SMC_CheckVelocities检查速度
//=========================
SMC_TRAFO_5Axes //获取5轴电机坐标 SMC_TRAFO_GantryCutter3 (FB)解析,XYZR轨迹
SMC_ControlAxisByPos // X axis 轴定位 XYZ R ABC
功能块的功能分解允许特定组件被为特殊需求设计的功能块所取代。此外,进一步的功能块——比如单独的路径预处理器——可以与现有组件组合,而不会出现任何问题。
库的数据结构(例如SMC_POSINFO、SMC_GEOINFO和SMC_VECTOR3D)描述位置,
SM_CNC_POUs 普通轴控制
SM_Trafo_POUs 龙门轴组控制
Forward and inverse transformation 正逆变换
SMC_TRAFOV_ // 解析,坐标位置和速度
' OF:(正计算)以实轴位置计算参考中心点在空间内坐标姿态【电机到笛卡尔】'
SMC_TRAFOF_5Axes (FB) 以5个实轴位置,计算参考点在笛卡尔内的坐标
SMC_TRAFOF_Gantry2 (FB) 龙门2轴,以轴位置计算出点坐标在笛卡尔内的位置
SMC_TRAFOF_Gantry2Tool1 (FB) XY+方位A轴
SMC_TRAFOF_Gantry2Tool2 (FB) XY+AB轴(刀具方向和角度)
SMC_TRAFOF_Gantry3 (FB) 实例,3轴龙门坐标位置
SMC_TRAFOF_Gantry3D (FB) 实例,空间实际坐标位置
SMC_TRAFOF_GantryCutter2 (FB) 龙门滚刀,XYR旋转轴(核桃机?)
SMC_TRAFOF_GantryCutter3 (FB) 龙门柱, XYZR
SMC_TRAFOF_GantryH2 (FB) 实例,龙门H形,XY
SMC_TRAFOF_GantryT2 (FB) 实例,龙门T形,XY
SMC_TRAFOF_GantryT2_O (FB) 与T2相比,驱动器配置有所不同(Y轴反向)
' OV:笛卡尔到电机速度和位置 '
SMC_TRAFOV_Gantry2 (FB) 解析,XY轨迹(用于图像比例显示)
SMC_TRAFOV_Gantry3 (FB) 解析,XYZ轨迹
SMC_TRAFOV_GantryCutter2 (FB) 解析,XYR切割轨迹(R旋转)
SMC_TRAFOV_GantryCutter3 (FB) 解析,XYZR切割轨迹
SMC_TRAFOV_GantryH2 (FB) 解析H龙门,XY轨迹 (参阅SM_Trafo_POUs概述。)
SMC_TRAFOV_GantryT2 (FB) 解析T龙门,XY速度
SMC_TRAFOV_GantryT2_O (FB)
' O:笛卡尔到电机位置 '
SMC_TRAFO_5Axes (FB) 解析,XYZ,+倾斜+方向(用于硬件轴运动定位加工)5轴
SMC_TRAFO_Gantry2 (FB) 解析,XY轨迹
SMC_TRAFO_Gantry2Tool1 (FB) 解析,XY+刀具距离
SMC_TRAFO_Gantry2Tool2 (FB) 解析,带刀补的XY轨迹
SMC_TRAFO_Gantry3 (FB) 解析,XYZ轨迹
SMC_TRAFO_GantryCutter2 (FB) 解析,XYR轨迹(R刀片方向)// 圆刀片裁布机
SMC_TRAFO_GantryCutter3 (FB) 解析,XYZR轨迹 //雕核桃机,雕刻鸡蛋
SMC_TRAFO_GantryH2 (FB) 解析H,由XY计算出辅助AB轴位置
SMC_TRAFO_GantryT2 (FB) 解析T,由XY计算出辅助AB轴位置
SMC_TRAFO_GantryT2_O (FB) 具有固定驱动器的T型龙门架系统的反向转换(替代驱动器配置)。
5轨迹图显示:
codesys的【3D路径】,控件_codesys unity3d-CSDN博客
1加功能块
2在PRG内运行 Path3d
6G代码执行显示:
硬件要求:
中型PLC汇川AM600,禾川HCQ0-1100-d,且带 SM3_CNC.library 库(3.5.6支持离线仿真)
G代码标准: DIN66025
DIN66025-1标准
G0 运动定位
G1 线性插补
G2 顺圆插补
G3 逆圆插补
G4 等待
G6 抛物线插补
G8 椭圆插补
M指令块:SMC_Interpolator 插补算法(按时间节拍,截取位置)
SMC_Interpolator //插补器(遇到M指令会暂停)
bAcknM置位(继续插补)
wM输出M指令值
//=====================
【插补器】
SMC_Interpolator 插补器【只能正向插补】
SMC_Interpolator2Dir (FB)【可正逆向插补】
SMC_XInterpolator 【凸轮曲速正向插补】
H点胶指令:开关量
SMC_Interpolator //插补器(遇到H指令不停顿)
N90 G1 X20
N100 G1 X100 H2 L20 H-2 L-10 //起点加20位置点胶,终点-10位置取消
// H指令不会影响运动速度
辅助轴:
插补轴:X,Y,Z
辅助轴:A,B,C,P,Q,U,V,W // 8个辅助轴
轴排序:ALL := 16#FFFF;
X := 2#1 ;
Y := 2#10 ;
Z := 2#100 ;
A,B,C,P,Q,U,V,W,A6,ALL,
1读取G代码文件解析
G代码文件》保存到 _cnc文件夹内
NC文件路径: STRING := '_cnc/gcode.cnc'; //PLC参考路径在本体主根目录下,G代码放在_cnc文件夹内
// (后续以这个路径参考点再添加文件深度)
放该文件夹内 ,文件名例如: SouJiKe.txt // 雕刻手机壳的G代码文件
2插补运算:SMC_Interpolator插补运动器, poqDataOut轨迹
利用 SMC_CheckVelocities(轨迹速度检查)的输出做输入
poqDataOut轨迹流
主从轴,位置跟随: SMC_ControlAxisByPos(FB)
SMC_Interpolator 插补算法(按时间节拍,截取位置)
piSetPosition 输出以时间为节拍的坐标流
SMC_TRAFO_Scara2 解析出节拍坐标位置》并发给对应的伺服电机
库函数:POU 功能块
SM3_CNC , ( 3.5.8.0 )
SM_CNC_POUs》SoftMotion CNC》SoftMotion Function Blocks
SM3_CNC, 3.5.8.0
Project Information // get项目信息
SM_CNC_Data types // SM_CNC_数据类型
SM_CNC_POUs // CNC程序块 SMC_ReadNCFile文件 SMC_ReadNCQueue队列
SM_Trafo_Data type // 轴组,龙门,机器人,数据类型
SM_Trafo_POUs // 轴组转换功能块 Gantry systems龙门系统
Visu_Templates // 模板
Visu_Templates_New // 新模板
轴组:龙门轴组,6轴机械臂,码垛机,行架 等
添加轴组后,可以选轴组类型,龙门数控或者搬运机械臂等。。。
轴组的库是 robotics (机器人)
转换FB块为5轴_龙门。
5轴由:X,Y,Z,A,B 轴组成
4是A轴:是旋转轴。(垂直于Z轴旋转,比如刀片)
3是B轴:是倾斜轴。(与Z角度仰角调节,如铣刀倒角)
刀具长度(u) : // '单位是 脉冲当量'
一般绑定虚轴。然后实轴跟随虚轴运动。实现主从运动
从轴,位置跟随: SMC_ControlAxisByPos(FB)
双X轴龙门:
这里涉及到2个电机:x1轴和x2轴
x1轴为主,x2轴为从,x2轴一直去追赶x1轴的坐标位置。用 MC_GearIN 电子齿轮
在齿条型的X大梁,x2轴如果与x1轴位置超差过大,会导致X大梁卡死。所以x2轴伺服要配置成:(力矩加定位)的混合模式PRT。
函数使用: MC_GearIN 电子齿轮功能 (注:注意从轴的追赶速度值大小)
脱开: MC_GearOut 断开耦合
另一种方案是:
新建一个虚轴。
x1和x2去追赶虚轴的坐标。从轴,位置跟随: SMC_ControlAxisByPos(FB)
H型龙门:这种如3D打印机,喷头单一方向移动,需要2个电机配合旋转,XY的皮带是串联的。
圆弧插补:
SMC_RoundPath
轴组状态:
SM3_Robotics 4.13.0.0
SMC_GroupPower 电源
MC_GroupEnable 使能 MC_GroupDisable 关闭
MC_GroupReset 复位
MC_GroupStop 停止
SMC_GroupWait 等待
MC_GroupContinue 继续
SMC_GroupJog2 点动
MC_GroupSetPosition 设置轴位置 a,c,v,坐标
MC_MoveLinearAbsolute MC_直线绝对移动【直线插补】
MC_MoveLinearRelative MC_直线相对移动
MC_MoveCircularAbsolute MC_圆弧绝对移动【圆弧插补】
MC_MoveCircularRelative MC_圆弧相对移动
MC_MoveDirectAbsolute MC_直接绝对值移动【点到点】
MC_MoveDirectRelative MC_直接相对移动
MC_AddAxisToGroup 添加轴组
MC_RemoveAxisFromGroup 删除一个轴
MC_UngroupAllAxes 解散轴组
SMC_GroupTargetPosition SMC_组目标位置
SMC_GroupEnableResumeAfterError 错误后组启用恢复
SMC_GroupUpdateContinueData 组更新连续数据
MC_SetCoordinateTransform 设置坐标转换(工件坐标,机械臂坐标,轴坐标)
CAN轴:
FUNCTION_BLOCK FB轴CanByPosVel
VAR_INPUT
u16齿轮比分子 : UINT := 5;//【导程5mm】
u16齿轮比分母 : UINT := 50000;//【单圈脉冲数】
u1电源:BOOL:=FALSE;// h6040
u1复位:BOOL:=FALSE;
u1停止: BOOL;
u1定位模式: BOOL := FALSE;
u1立即定位: BOOL := FALSE;
u1相对绝对: BOOL := FALSE;
f坐标:REAL:=5; // h607A
f速度:REAL:=60;// h6081 【1秒1圈】:= 单圈脉冲数 / 60秒
f加速度:REAL:=60;// h6083
f减速度:REAL:=60;// h6084
END_VAR
VAR_OUTPUT
yb准备启动:BOOL;
yb启动:BOOL;
yb命令允许:BOOL;
yb故障:BOOL;
yb电压输出:BOOL;
yb急停:BOOL;
yb未启动:BOOL;
yb非正常停止:BOOL;
yb通讯:BOOL;
yb位置到达:BOOL;
yb限位开关:BOOL;
b电压输出 :BOOL;
b轴使能状态 :BOOL;
b伺服通信状态 :BOOL;
b忙碌 :BOOL;
b故障 :BOOL;
f轴当前位置 :LREAL;
f轴当前速度 :lREAL;
f轴当前力矩 :REAL;
h6041 :DINT;
h6040 :UINT;
//e轴运行状态 :SMC_AXIS_STATE;
//e轴故障代码 :MC_ERROR_CO;
END_VAR
VAR
//【输入5x】
x6041:UINT;// 状态字
x6061:SINT;// 模式
x6064:DINT;// 电机位置
x606C:DINT;// 电机速度
x6077:INT;// 电机力矩
//【输出9y】
y6040:UINT;//控制字
y6060:SINT;//模式
y6081:UDINT;//【u32file】速度
y6083:UDINT;//【u32file】加速
y6084:UDINT;//【u32file】减速
y607A:DINT;//【i32Targe】定位坐标
y60FF:DINT;//【i32Targe】模式:速度
y6071:INT;// 【i16Targe】模式:力矩
y607C:DINT;//原点【刀具偏置】
switch:UDINT:=0;
switch跟随: INT;
END_VAR
ACT输出状态();
// 6041:
// 0 准备启动
// 1 启动
// 2 命令允许
// 3 故障
// 4 电压输出
// 5 急停
// 6 未启动
// 7
// 8 非正常停止
// 9 can远程
// 10 位置到达
// 11 限位开关
h6041:=x6041; //h6041:=16#fff;
h6040:=y6040;
yb准备启动 :=h6041.0;
yb启动 :=h6041.1;
yb命令允许 :=h6041.2;
yb故障 :=h6041.3;
yb电压输出 :=h6041.4;
yb急停 :=h6041.5;
yb未启动 :=h6041.6;
yb非正常停止 :=h6041.8;
yb通讯 :=h6041.9;// can通讯
yb位置到达 :=h6041.10;
yb限位开关 :=h6041.11;
// f轴当前位置:=TO_LREAL(x6064) /f齿轮比;
// f轴当前速度:=TO_LREAL(x606C)*60.0/f齿轮比/5;
f轴当前位置:=TO_LREAL(x6064) /u16齿轮比分母 * u16齿轮比分子; // 坐标 / 单圈脉冲数 * 导程5mm
f轴当前速度:=TO_LREAL(x606C)*60.0/u16齿轮比分母; // 单圈脉冲数 * (速度/分)
f轴当前力矩:=TO_REAL(x6077);// y6071:INT;// 【i16Targe】模式:力矩
b伺服通信状态:=h6041.9;// can通讯
ACT上电();
// 0x2000-00 电流【mA】
// 0x2001-00 圈脉冲当量
// 0x2002-00 待机时间【ms】
// 0x2003-00 待机电流百分比【40%】
// 0x2051-00 电机方向【0正1反】
// 0x2056-00 【0xFFFF】故障检测
// 6040:【6】【F】
// 【基本】 【定位】
// 0 启动
// 1 电压输出
// 2 急停
// 3 命令沿
// 4 新定位
// 5 立即执行
// 6 相对/绝对
// 7复位沿
// 8 停止
// 6041:
// 0 准备启动
// 1 启动
// 2 命令允许
// 3 故障
// 4 电压输出
// 5 急停
// 6 未启动
// 7
// 8 非正常停止
// 9 can远程
// 10 位置到达
// 11 限位开关
//上电
// IF NOT(b轴使能状态)AND u1电源 AND switch =0 THEN
// y6040:=6;
// b轴使能状态:=FALSE ;
// switch:=1;
// END_IF
/
IF (x6041 AND 16#23F) = 16#218 THEN //判断重点为位 3 是否等于 1
//驱动器报错了,需进行错误处理
b故障:=TRUE;
ELSE //未报错
b故障:=FALSE;
END_IF
IF u1电源 THEN //ENABLE 为来自主控的使能触发信号
CASE switch OF //index 用于切换使能的步骤,默认为 0
0:
y6040 := 0;
switch := 1;
1:
IF (x6041 AND 16#200) = 16#200 THEN //判断重点为位 0 是否等于 0
y6040 := 6;
switch := 2;
END_IF
2:
IF (x6041 AND 16#231) = 16#231 THEN//判断重点为位 0 是否等于 1
y6040 := 7;
switch := 3;
END_IF
3:
IF (x6041 AND 16#233) = 16#233 THEN//判断重点为位 0 和 1 是否等于 1 *1)
y6040:= 16#0F;
switch := 4;
END_IF
4:
IF (x6041 AND 16#237) = 16#237 THEN//判断重点为位 0、1 及 2 是否等于 1,使能完成
b轴使能状态 := TRUE; //使能完成标志输出
END_IF//雷赛 DM-CAN 系列步进驱动器——CANopen 技术应用指导手册
ELSE //ENABLE 为假,不使能
y6040:= 0;
switch:= 0; //清零跳转变量,以便下一次使能
b轴使能状态 := FALSE;
END_CASE
END_IF
IF u1复位 THEN
IF y6040.7 THEN
y6040.7:=FALSE;
ELSE
y6040.7:=TRUE;
END_IF
END_IF
IF u1停止 THEN
IF y6040.8 THEN
y6040.8:=FALSE;
ELSE
y6040.8:=TRUE;
END_IF
END_IF
ACT跟随();
// 6040:【6】【F】
// 【基本】 【定位】
// 0 启动
// 1 电压输出
// 2 急停
// 3 命令沿
// 4 新定位
// 5 立即执行
// 6 相对/绝对
// 7复位沿
// 8 停止
// 6041:
// 0 准备启动
// 1 启动
// 2 命令允许
// 3 故障
// 4 电压输出
// 5 急停
// 6 未启动
// 7
// 8 非正常停止
// 9 can远程
// 10 位置到达
// 11 限位开关
//
y6040.5:=u1立即定位;
y6040.6:=u1相对绝对;
y6040.8:=u1停止;
y6081:=TO_UDINT(u16齿轮比分母* f速度 /60.0);// 单圈脉冲数 * (速度/分)
y6083:=TO_UDINT(u16齿轮比分母*f加速度 /60.0);
y6084:=TO_UDINT(u16齿轮比分母*f减速度 /60.0);
IF u1定位模式 AND b轴使能状态 THEN
CASE switch跟随 OF
0:
b忙碌:=FALSE;
y6040.4:=FALSE; // 【新定位】
y607A:=TO_DINT(u16齿轮比分母/u16齿轮比分子*f坐标);// 坐标 / 单圈脉冲数 * 导程5mm
switch跟随:=1;
1:
b忙碌:=TRUE;
y6040.4:=TRUE; // 【新定位】
switch跟随:=0;
END_CASE
END_IF