codesys 轴程序
//控制模式上升沿、下降沿
rTrigControlMode(CLK:=bControlMode , Q=> );
fTrigControlMode(CLK:=bControlMode , Q=> );//手模式控制、自动模式控制
IF bControlMode THENAxisControl:=AxisAutomaticControl;AxisParameter:=AxisAutomaticParameter;
ELSEAxisControl:=AxisManualControl;AxisParameter:=AxisManualParameter;
END_IF//状态切换
IF rTrigControlMode.Q OR fTrigControlMode.Q THENAxisControl.bJogBackward:=FALSE;AxisControl.bJogForward:=FALSE;AxisControl.bHome:=FALSE;AxisControl.bMoveRelative:=FALSE;AxisControl.bMoveAbsolute:=FALSE;AxisControl.bMoveVelocity:=FALSE;AxisControl.bHalt:=TRUE;
END_IF//干涉
AxisStatus.bInterferenceError:=FALSE;
FOR i:=1 TO 4 BY 1 DOIF AxisSignal.bInterference[i] THENAxisStatus.bInterferenceError:=TRUE;END_IF
END_FOR//正负软限位
AxisStatus.bPositiveLimitError:=FALSE;
AxisStatus.bNegativeLimitError:=FALSE;
IF AxisOther.bPositionLimit THENIF (AxisStatus.nActualPosition>=AxisOther.nPositiveLimit AND AxisControl.bJogForward)OR (AxisParameter.nPosition>=AxisOther.nPositiveLimit AND AxisControl.bMoveAbsolute)OR ((AxisParameter.nDistance+AxisStatus.nActualPosition)>=AxisOther.nPositiveLimitAND (AxisControl.bMoveRelative AND NOT AxisStatus.bMoveRelativeBusy)) THENAxisStatus.bPositiveLimitError:=TRUE;END_IFIF (AxisStatus.nActualPosition<=AxisOther.nNegativeLimit AND AxisControl.bJogBackward)OR (AxisParameter.nPosition<=AxisOther.nNegativeLimit AND AxisControl.bMoveAbsolute)OR ((AxisParameter.nDistance+AxisStatus.nActualPosition)<=AxisOther.nNegativeLimitAND (AxisControl.bMoveRelative AND NOT AxisStatus.bMoveRelativeBusy)) THENAxisStatus.bNegativeLimitError:=TRUE;END_IF
END_IF//扭矩软限位
AxisStatus.bTorqueLimitError:=FALSE;
IF AxisOther.bTorqueLimit THENIF AxisStatus.nActualTorque>=AxisOther.nTorqueLimit THENAxisStatus.bTorqueLimitError:=TRUE;END_IF
END_IF//控制允许
bMoveAllow:=TRUE;
IF AxisStatus.bInterferenceError OR AxisStatus.bTorqueLimitError
OR AxisStatus.bPositiveLimitError OR AxisStatus.bNegativeLimitError
OR AxisStatus.nAxisErrorID>0 OR AxisStatus.bHomeError OR AxisStatus.bJogError
OR AxisStatus.bMoveRelativeError OR AxisStatus.bMoveAbsoluteError OR AxisStatus.bMoveVelocityError
OR AxisControl.bHalt OR AxisControl.bStop OR bSystemStop OR bSystemEmergency THENbMoveAllow:=FALSE;
END_IF//复位
bResetAllow:=FALSE;
IF AxisStatus.bInterferenceError OR AxisStatus.bTorqueLimitError
OR AxisStatus.bPositiveLimitError OR AxisStatus.bNegativeLimitError
OR AxisStatus.nAxisErrorID>0 OR AxisStatus.bHomeError OR AxisStatus.bJogError
OR AxisStatus.bMoveRelativeError OR AxisStatus.bMoveAbsoluteError OR AxisStatus.bMoveVelocityError THENIF AxisControl.bReset OR bSystemReset THENbResetAllow:=TRUE;END_IF
END_IF//使能
IF AxisStatus.nAxisErrorID>0 OR NOT AxisControl.bPower OR AxisStatus.bHomeBusy OR bSystemEmergency THENbPowerAllow:=FALSE;
ELSEbPowerAllow:=TRUE;
END_IF//回原点
IF bMoveAllow AND NOT AxisStatus.bJogBusy
AND NOT AxisStatus.bMoveRelativeBusy AND NOT AxisStatus.bMoveAbsoluteBusy AND NOT AxisStatus.bMoveVelocityBusy
AND AxisControl.bHome THENbHomeAllow:=TRUE;
ELSEbHomeAllow:=FALSE;
END_IF//正向点动
IF bMoveAllow AND NOT AxisStatus.bHomeBusy
AND NOT AxisStatus.bMoveRelativeBusy AND NOT AxisStatus.bMoveAbsoluteBusy AND NOT AxisStatus.bMoveVelocityBusy
AND NOT AxisSignal.bPositiveSensor AND AxisControl.bJogForward THENbJogForwardAllow:=TRUE;
ELSEbJogForwardAllow:=FALSE;
END_IF//负向点动
IF bMoveAllow AND NOT AxisStatus.bHomeBusy
AND NOT AxisStatus.bMoveRelativeBusy AND NOT AxisStatus.bMoveAbsoluteBusy AND NOT AxisStatus.bMoveVelocityBusy
AND NOT AxisSignal.bNegativeSensor AND AxisControl.bJogBackward THENbJogBackwardAllow:=TRUE;
ELSEbJogBackwardAllow:=FALSE;
END_IF//相对运动
IF bMoveAllow AND NOT AxisStatus.bHomeBusy AND NOT AxisStatus.bJogBusy
AND NOT AxisStatus.bMoveAbsoluteBusy AND NOT AxisStatus.bMoveVelocityBusy
AND NOT AxisSignal.bPositiveSensor AND NOT AxisSignal.bNegativeSensor
AND AxisControl.bMoveRelative THENbMoveRelativeAllow:=TRUE;
ELSEbMoveRelativeAllow:=FALSE;
END_IF//绝对运动
IF bMoveAllow AND NOT AxisStatus.bHomeBusy AND NOT AxisStatus.bJogBusy
AND NOT AxisStatus.bMoveRelativeBusy AND NOT AxisStatus.bMoveVelocityBusy
AND NOT AxisSignal.bPositiveSensor AND NOT AxisSignal.bNegativeSensor
AND AxisControl.bMoveAbsolute THENbMoveAbsoluteAllow:=TRUE;
ELSEbMoveAbsoluteAllow:=FALSE;
END_IF//速度运动
IF bMoveAllow AND NOT AxisStatus.bHomeBusy AND NOT AxisStatus.bJogBusy
AND NOT AxisStatus.bMoveRelativeBusy AND NOT AxisStatus.bMoveAbsoluteBusy
AND NOT AxisSignal.bPositiveSensor AND NOT AxisSignal.bNegativeSensor
AND AxisControl.bMoveVelocity THENbMoveVelocityAllow:=TRUE;
END_IF
IF NOT bMoveAllow THENbMoveVelocityAllow:=FALSE;
END_IF//加速度
AxisParameter.nAcceleration:=AxisParameter.nVelocity*2/AxisParameter.nAccelerationTime;
AxisParameter.nJogAcceleration:=AxisParameter.nJogVelocity*2/AxisParameter.nAccelerationTime;//减速度
AxisParameter.nDeceleration:=AxisParameter.nVelocity*2/AxisParameter.nDecelerationTime;
AxisParameter.nJogDeceleration:=AxisParameter.nJogVelocity*2/AxisParameter.nDecelerationTime;//加加速度
AxisParameter.nJerk:=AxisParameter.nAcceleration*2/AxisParameter.nAccelerationTime;
AxisParameter.nJogJerk:=AxisParameter.nJogAcceleration*2/AxisParameter.nAccelerationTime;//位置比较
IF ABS(AxisStatus.nActualPosition-AxisParameter.nPosition)<AxisOther.nPositionCompareMax THEN AxisStatus.bPositionCompare:=TRUE;
ELSEAxisStatus.bPositionCompare:=FALSE;
END_IF//轴功能块
ReadAxisError(Axis:=AxisRef , Enable:=TRUE , Valid=> , Busy=> , Error=> , ErrorID=> , AxisError=> , AxisErrorID=>AxisStatus.nAxisErrorID , SWEndSwitchActive=> );ReadActualPosition(Axis:=AxisRef , Enable:=TRUE , Valid=> , Busy=> , Error=> , ErrorID=> , Position=>AxisStatus.nActualPosition );ReadActualVelocity(Axis:=AxisRef , Enable:=TRUE , Valid=> , Busy=> , Error=> , ErrorID=> , Velocity=>AxisStatus.nActualVelocity );ReadActualTorque(Axis:=AxisRef , Enable:=TRUE , Valid=> , Busy=> , Error=> , ErrorID=> , Torque=>AxisStatus.nActualTorque );Power(Axis:=AxisRef , Enable:=bPowerAllow , bRegulatorOn:=TRUE , bDriveStart:=TRUE , Status=>AxisStatus.bPowerState , bRegulatorRealState=> , bDriveStartRealState=> , Busy=> , Error=> , ErrorID=> );Halt(Axis:=AxisRef , Execute:=AxisControl.bHalt , Deceleration:= , Jerk:= , Done=> , Busy=> , CommandAborted=> , Error=> , ErrorID=> );Stop(Axis:=AxisRef , Execute:=NOT bMoveAllow AND NOT AxisControl.bHalt , Deceleration:= , Jerk:= , Done=> , Busy=> , Error=> , ErrorID=> ); Reset(Axis:=AxisRef , Execute:=bResetAllow , Done=> , Busy=> , Error=> , ErrorID=> );Jog(Axis:=AxisRef , JogForward:=bJogForwardAllow , JogBackward:=bJogBackwardAllow , Velocity:=AxisParameter.nJogVelocity , Acceleration:=AxisParameter.nJogAcceleration , Deceleration:=AxisParameter.nJogDeceleration , Jerk:=AxisParameter.nJogJerk , Busy=>AxisStatus.bJogBusy , CommandAborted=> , Error=> , ErrorId=> );Home(Axis:=AxisRef , Execute:=bHomeAllow , Position:=0 , Done=>AxisStatus.bHomeDone , Busy=>AxisStatus.bHomeBusy , CommandAborted=> , Error=>AxisStatus.bHomeError , ErrorID=> ); MoveRelative(Axis:=AxisRef , Execute:=bMoveRelativeAllow , Distance:=AxisParameter.nDistance , Velocity:=AxisParameter.nVelocity , Acceleration:=AxisParameter.nAcceleration , Deceleration:=AxisParameter.nDeceleration , Jerk:=AxisParameter.nJerk , BufferMode:= , Done=>AxisStatus.bMoveRelativeDone , Busy=>AxisStatus.bMoveRelativeBusy , Active=> , CommandAborted=> , Error=>AxisStatus.bMoveRelativeError , ErrorID=> );MoveAbsolute(Axis:=AxisRef , Execute:=bMoveAbsoluteAllow , Position:=AxisParameter.nPosition , Velocity:=AxisParameter.nVelocity , Acceleration:=AxisParameter.nAcceleration , Deceleration:=AxisParameter.nDeceleration , Jerk:=AxisParameter.nJerk , Direction:= , BufferMode:= , Done=>AxisStatus.bMoveAbsoluteDone , Busy=>AxisStatus.bMoveAbsoluteBusy , Active=> , CommandAborted=> , Error=>AxisStatus.bMoveAbsoluteError , ErrorID=> );MoveVelocity(Axis:=AxisRef , Execute:=bMoveVelocityAllow , Velocity:=AxisParameter.nVelocity , Acceleration:=AxisParameter.nAcceleration , Deceleration:=AxisParameter.nDeceleration , Jerk:=AxisParameter.nJerk , Direction:=AxisParameter.nDirection , BufferMode:= , InVelocity=>AxisStatus.bMoveVelocityState , Busy=>AxisStatus.bMoveVelocityBusy , Active=> , CommandAborted=> , Error=>AxisStatus.bMoveVelocityError , ErrorID=> );
//描述信息
ACT_comment();//干涉(若有则添加)//轴功能块控制
(*
FOR i:=1 TO nAxisMaxNum BY 1 DOaxis[i].FB(AxisRef:=axis[i].REF , bSystemStop:=system.control.bStop , bSystemEmergency:=system.control.bEmergency , bSystemReset:=system.control.bReset , bControlMode:= , AxisAutomaticControl:=axis[i].automaticControl , AxisAutomaticParameter:=axis[i].automaticParameter , AxisManualControl:=axis[i].manualControl , AxisManualParameter:=axis[i].manualParameter , AxisOther:=axis[i].other , AxisSignal:=axis[i].signal , AxisStatus=>axis[i].status );
END_FOR *)axis[1].FB(AxisRef:=SM_Drive_Virtual , bSystemStop:=system.control.bStop , bSystemEmergency:=system.control.bEmergency , bSystemReset:=system.control.bReset , bControlMode:= , AxisAutomaticControl:=axis[1].automaticControl , AxisAutomaticParameter:=axis[1].automaticParameter , AxisManualControl:=axis[1].manualControl , AxisManualParameter:=axis[1].manualParameter , AxisOther:=axis[1].other , AxisSignal:=axis[1].signal , AxisStatus=>axis[1].status );
codesys 轴程序相关推荐
- 信捷PLC程序 八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算
信捷PLC程序 八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算,模块化编程框架,包含各功能区规划,伺服步进电机DOG+JOG,气缸手动,公式计算数据处理,报警功能区,自动步进S调用等 研究透彻 ...
- 松下6轴程序模板 plc采用FP-XHC60T ,标准可带6轴程序
松下6轴程序模板 1:plc采用FP-XHC60T ,标准可带6轴程序. 2:昆仑通态触摸屏程序(触摸屏附带配方功能,以及产能统计:) 3:项目各种功能完整. 该程序为标准框架, a.故障, b.复位 ...
- 松下PLC FP-XHC60T 程序 两个PLC通信控制11个轴 程序稳定已批量生产 注释完整 带威纶通触摸屏程序
松下PLC FP-XHC60T 程序 两个PLC通信控制11个轴 程序稳定已批量生产 注释完整 带威纶通触摸屏程序
- 西门子smart200和西门子伺服V90三轴程序
西门子smart200和V90伺服程序 西门子smart200和西门子伺服V90三轴程序 包括smart200PLC 程序和西门子smart触摸屏程序,详细注释,控制系统详细说明书,IO表,电气原理图 ...
- 西门子smart200和西门子伺服V90三轴程序 包括smart200PLC 程序和西门子smart触摸屏程序
西门子smart200和V90伺服程序 西门子smart200和西门子伺服V90三轴程序 包括smart200PLC 程序和西门子smart触摸屏程序,详细注释,控制系统详细说明书,IO表,电气原理图 ...
- 西门子PLC伺服大型20轴程序modbus通讯RS232通讯MES通讯气缸
西门子PLC伺服大型20轴程序modbus通讯RS232通讯MES通讯气缸,通讯,机械手,模拟量等,各种FB块 PTO控制20多个轴,100多个气缸,控制2台机器人. 5台PLC智能IO通讯,Modb ...
- 西门子PLC伺服大型20轴程序modbus通讯RS232通讯MES通讯气缸,通讯
西门子PLC伺服大型20轴程序modbus通讯RS232通讯MES通讯气缸,通讯,机械手,模拟量等,各种FB块 PTO控制20多个轴,100多个气缸,控制2台机器人. 5台PLC智能IO通讯,Modb ...
- 信捷PLC程序,八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算,模块化编程框架
信捷PLC程序,八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算,模块化编程框架,包含各功能区规划,伺服步进电机DOG+JOG,气缸手动,公式计算数据处理,报警功能区,自动步进S调用等. 研究透 ...
- 松下6轴程序模板 1:plc采用FP-XHC60T ,标准可带6轴程序
松下6轴程序模板 1:plc采用FP-XHC60T ,标准可带6轴程序. 2:昆仑通态触摸屏程序(触摸屏附带配方功能,以及产能统计:) 3:项目各种功能完整. 该程序为标准框架, a.故障, b.复位 ...
- 包膜机西门子PLC和维纶触摸屏程序,西门子1512和5台1214C通讯控制20轴程序
包膜机西门子PLC和维纶触摸屏程序,西门子1512和5台1214C通讯控制20轴程序 博图V14.1和维纶触摸屏程序,带扫码枪和远程IO 1>内含PLC程序.触摸屏程序:程序带有20轴,4路扫码 ...
最新文章
- matlab 字符分割
- OneHotEncoder独热编码和 LabelEncoder标签编码——机器学习
- 为什么维护工作让数据中心工作人员夜不能寐?
- 一直出现 Enter passphrase for key '/root/.ssh/gitkey12.pub'
- 嵌入式实时操作系统的基本概念——μ/COS-II读书笔记
- mysql pt-kill_percona-toolkit之pt-kill 杀掉mysql查询或连接的方法
- 2021云数据库RDS重磅升级发布会
- JSP页面如何调用自己写的.class文件
- 刚开始用 Go 做项目开发时都会面临哪些问题?
- mysql中删除数据库中的表格数据恢复_恢复从数据库中删除的表
- python爬虫要安装什么_python爬虫之分布式爬虫和部署
- Qt编写地图综合应用30-世界地图
- Linux-bash笔记
- shel文件生成和执行
- python输入一个英文句子 输出单词个数_C 统计英文句子“python is an interpreted language” 有多少个单词...
- Go Context 原理详解
- c语言用随机投点法计算圆周率,(原创精品)用随机投点法计算π值【compute π with dartpoint randomly】...
- Jugglefest
- vue 点击按钮实现随机颜色
- 37 | 什么是SLI、SLO、SLA