//控制模式上升沿、下降沿
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 轴程序相关推荐

  1. 信捷PLC程序 八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算

    信捷PLC程序 八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算,模块化编程框架,包含各功能区规划,伺服步进电机DOG+JOG,气缸手动,公式计算数据处理,报警功能区,自动步进S调用等 研究透彻 ...

  2. 松下6轴程序模板 plc采用FP-XHC60T ,标准可带6轴程序

    松下6轴程序模板 1:plc采用FP-XHC60T ,标准可带6轴程序. 2:昆仑通态触摸屏程序(触摸屏附带配方功能,以及产能统计:) 3:项目各种功能完整. 该程序为标准框架, a.故障, b.复位 ...

  3. 松下PLC FP-XHC60T 程序 两个PLC通信控制11个轴 程序稳定已批量生产 注释完整 带威纶通触摸屏程序

    松下PLC FP-XHC60T 程序 两个PLC通信控制11个轴 程序稳定已批量生产 注释完整 带威纶通触摸屏程序

  4. 西门子smart200和西门子伺服V90三轴程序

    西门子smart200和V90伺服程序 西门子smart200和西门子伺服V90三轴程序 包括smart200PLC 程序和西门子smart触摸屏程序,详细注释,控制系统详细说明书,IO表,电气原理图 ...

  5. 西门子smart200和西门子伺服V90三轴程序 包括smart200PLC 程序和西门子smart触摸屏程序

    西门子smart200和V90伺服程序 西门子smart200和西门子伺服V90三轴程序 包括smart200PLC 程序和西门子smart触摸屏程序,详细注释,控制系统详细说明书,IO表,电气原理图 ...

  6. 西门子PLC伺服大型20轴程序modbus通讯RS232通讯MES通讯气缸

    西门子PLC伺服大型20轴程序modbus通讯RS232通讯MES通讯气缸,通讯,机械手,模拟量等,各种FB块 PTO控制20多个轴,100多个气缸,控制2台机器人. 5台PLC智能IO通讯,Modb ...

  7. 西门子PLC伺服大型20轴程序modbus通讯RS232通讯MES通讯气缸,通讯

    西门子PLC伺服大型20轴程序modbus通讯RS232通讯MES通讯气缸,通讯,机械手,模拟量等,各种FB块 PTO控制20多个轴,100多个气缸,控制2台机器人. 5台PLC智能IO通讯,Modb ...

  8. 信捷PLC程序,八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算,模块化编程框架

    信捷PLC程序,八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算,模块化编程框架,包含各功能区规划,伺服步进电机DOG+JOG,气缸手动,公式计算数据处理,报警功能区,自动步进S调用等. 研究透 ...

  9. 松下6轴程序模板 1:plc采用FP-XHC60T ,标准可带6轴程序

    松下6轴程序模板 1:plc采用FP-XHC60T ,标准可带6轴程序. 2:昆仑通态触摸屏程序(触摸屏附带配方功能,以及产能统计:) 3:项目各种功能完整. 该程序为标准框架, a.故障, b.复位 ...

  10. 包膜机西门子PLC和维纶触摸屏程序,西门子1512和5台1214C通讯控制20轴程序

    包膜机西门子PLC和维纶触摸屏程序,西门子1512和5台1214C通讯控制20轴程序 博图V14.1和维纶触摸屏程序,带扫码枪和远程IO 1>内含PLC程序.触摸屏程序:程序带有20轴,4路扫码 ...

最新文章

  1. matlab 字符分割
  2. OneHotEncoder独热编码和 LabelEncoder标签编码——机器学习
  3. 为什么维护工作让数据中心工作人员夜不能寐?
  4. 一直出现 Enter passphrase for key '/root/.ssh/gitkey12.pub'
  5. 嵌入式实时操作系统的基本概念——μ/COS-II读书笔记
  6. mysql pt-kill_percona-toolkit之pt-kill 杀掉mysql查询或连接的方法
  7. 2021云数据库RDS重磅升级发布会
  8. JSP页面如何调用自己写的.class文件
  9. 刚开始用 Go 做项目开发时都会面临哪些问题?
  10. mysql中删除数据库中的表格数据恢复_恢复从数据库中删除的表
  11. python爬虫要安装什么_python爬虫之分布式爬虫和部署
  12. Qt编写地图综合应用30-世界地图
  13. Linux-bash笔记
  14. shel文件生成和执行
  15. python输入一个英文句子 输出单词个数_C 统计英文句子“python is an interpreted language” 有多少个单词...
  16. Go Context 原理详解
  17. c语言用随机投点法计算圆周率,(原创精品)用随机投点法计算π值【compute π with dartpoint randomly】...
  18. Jugglefest
  19. vue 点击按钮实现随机颜色
  20. 37 | 什么是SLI、SLO、SLA

热门文章

  1. html的iframe用法
  2. 软考中级网络工程师学习笔记(知识点汇总)普通版
  3. linux转到工作目录,linux工作目录切换命令
  4. 日志文件的格式和内容,日志文件的作用,登记日志文件的规则
  5. 人民币大写金额转换为数字
  6. CISP-PTS学习笔记-XSS
  7. 4款好用流程图软件,都是经验总结出来的
  8. Linux 服务器网卡驱动安装及故障排除
  9. 使用片段嵌入进行文档搜索
  10. 4.3 木马隐藏分析