自由落体运动c语言编程_欧姆龙NX PLC 轴运动功能块,ST和梯形图双语言
一. 前言
大部分主流品牌商编程时采用ST语言,如施耐德PLC等。ST是结构化文本编程,类似于C语言,不同于梯形图和顺序函数功能表。它的优点就是能简化复杂的数学方程,进行梯形图所难以执行的复杂计算,完成程式的建立;
少部分品牌商编程时采用C语言,可以通过C语言子函数调用的方式,加入到梯形图的体系中,主要起到辅助作用,它主要解决复杂的数字方程,解决梯形图无法达到的运算速度和效率,解决梯形图编程过于复杂的问题,用C语言编程可提高程序效率,如CRC校验,复杂浮点数运算,多项式函数运算,凸轮参数设置等
梯形图就是为了逻辑控制而产生的语言,平时大家用没必要死磕ST,ST在逻辑控制的直观性上肯定是不如梯形图,而ST在数据处理上的优势也很明显,所以各有所长,灵活运用即可,最重要的是白猫黑猫做出稳定设备的才是好猫.管你啥语言,干就完事.
二.轴运动功能块设计
1.运动控制需要的变量的建立
然后将这些变量放在一个结构体里面
这个轴控制结构体,包含配置,100个点位,报警,自动控制变量,手动控制变量,状态反馈
在全局变量在声明要使用轴变量,有几个轴就声明几个
参数配置可以用触摸屏直接访问相关变量设置即可
如设置0号轴的Jog速度
2.功能块设计--梯形图和ST混编
功能块输入输出
3.功能块设计--纯ST
注意:以下ST写好未经测试
注意ST语言的上升沿下降沿是要自己写的
//手动使能IF Sys_Manual AND NOT tempMaualServoOn AND Axis.MaualControl.ServoOn AND NOT MaualServoOnLastSta THENtempMaualServoOn:=TRUE;END_IF;手动使能延时器(tempMaualServoOn,T#0.1s,手动使能置位延时,ET);IF (Axis.MaualControl.ServoOn AND MaualServoOnLastSta=FALSE AND 手动使能置位延时 )OR(Axis.AutoControl.ServoOn AND AutoServoOnLastSta=FALSE)OR(Axis.Status.Error AND ErrorLastSta=FALSE) THEN tempMaualServoOn:=FALSE;END_IF;AutoServoOnLastSta:=Axis.AutoControl.ServoOn;MaualServoOnLastSta:=Axis.MaualControl.ServoOn;ErrorLastSta:=Axis.Status.Error;//使能IF EStop THENIF Sys_Manual THENPower_On(Axis.Config.sAXIS_REF,tempMaualServoOn,FunctionStatus,FunctionBusy,FunctionError,FunctionErrorID);ELSEPower_On(Axis.Config.sAXIS_REF,Axis.AutoControl.ServoOn,FunctionStatus,FunctionBusy,FunctionError,FunctionErrorID);END_IF;END_IF;//使能状态Axis.Status.ServoOn:=Axis.Config.sAXIS_REF.DrvStatus.ServoOn;//复位Axis.AutoControl.Reset:=Reset;IF Axis.Config.sAXIS_REF.MFaultLvl.Active THENIF Axis.AutoControl.Reset OR Axis.MaualControl.Reset THEN Error_Reset( Axis.Config.sAXIS_REF,TRUE,FunctionDone,FunctionBusy,FunctionStatus,Axis.Error.ResetError,FunctionErrorID);END_IF;END_IF;//回零IF Axis.Status.ServoOn AND Axis.Config.Home_Interlock THEN IF Sys_Manual THENHome(Axis.Config.sAXIS_REF, Axis.MaualControl.StartHardHome, FunctionDone, HomeBusy, Axis.Error.HHomeCommandAbortedError, Axis.Error.HardHomeError, FunctionErrorID );ELSEHome(Axis.Config.sAXIS_REF, Axis.AutoControl.StartHardHome, FunctionDone, HomeBusy, Axis.Error.HHomeCommandAbortedError, Axis.Error.HardHomeError, FunctionErrorID );END_IF;END_IF;//回零状态Axis.Status.Homing:=Axis.Config.sAXIS_REF.Status.Homing;Axis.Status.HardHomed:=Axis.Config.sAXIS_REF.Details.Homed;//限位状态IF NOT Axis.Status.Homing AND NOT HomeBusy AND Axis.Config.sAXIS_REF.DrvStatus.P_OT THEN Axis.Status.HardPositiveSignal:=TRUE;ELSIF Axis.Status.HardPositiveSignal AND ( Axis.MaualControl.Reset OR Axis.AutoControl.Reset )THENAxis.Status.HardPositiveSignal:=FALSE;END_IF;IF NOT Axis.Status.Homing AND NOT HomeBusy AND Axis.Config.sAXIS_REF.DrvStatus.N_OT THENAxis.Status.HardNegativeSignal:=TRUE;ELSIF Axis.Status.HardNegativeSignal AND ( Axis.MaualControl.Reset OR Axis.AutoControl.Reset )THENAxis.Status.HardNegativeSignal:=FALSE;END_IF;//JOGIF Axis.Status.ServoOn THENIF NOT Axis.Status.HardPositiveSignal THEN IF NOT Sys_Manual AND Axis.AutoControl.JogPositive AND NOT Axis.AutoControl.JogNegative THEN tempJogPositive:=TRUE;ELSIF Sys_Manual AND Axis.MaualControl.JogPositive AND NOT Axis.MaualControl.JogNegative THENtempJogPositive:=TRUE;ELSEtempJogPositive:=FALSE;END_IF;END_IF;IF NOT Axis.Status.HardNegativeSignal THENIF NOT Sys_Manual AND Axis.AutoControl.JogNegative AND NOT Axis.AutoControl.JogPositive THENtempJogNegative:=TRUE;ELSIF Sys_Manual AND Axis.MaualControl.JogNegative AND NOT Axis.MaualControl.JogPositive THENtempJogNegative:=TRUE;ELSEtempJogNegative:=FALSE;END_IF;END_IF;END_IF;JOG(Axis.Config.sAXIS_REF,tempJogPositive,tempJogNegative,Axis.Config.Jog_velocity,Axis.Config.Manual_AccDec,Axis.Config.Manual_AccDec,FunctionBusy,FunctionAborted,Axis.Error.JogError,FunctionErrorID);//停止IF (MoveAbsoluteBusy OR MoveRelativeBusy) AND NOT Axis.Config.Move_Interlock THENStop( Axis.Config.sAXIS_REF, TRUE, 10000, 10000, BuffMode, FunctionDone,stopBusy, FunctionActive, FunctionAborted, Axis.Error.StopError, FunctionErrorID );ELSIF (HomeBusy OR MoveSoftZeroBusy) AND NOT Axis.Config.Home_Interlock THENStop( Axis.Config.sAXIS_REF, TRUE, 10000, 10000, BuffMode, FunctionDone,stopBusy, FunctionActive, FunctionAborted, Axis.Error.StopError, FunctionErrorID );ELSIF MoveAbsoluteBusy OR MoveRelativeBusy OR HomeBusy OR MoveSoftZeroBusy THENIF NOT Sys_Manual AND Axis.AutoControl.StopMove THENStop( Axis.Config.sAXIS_REF, TRUE, 10000, 10000, BuffMode, FunctionDone,stopBusy, FunctionActive, FunctionAborted, Axis.Error.StopError, FunctionErrorID );ELSIF Sys_Manual AND Axis.MaualControl.StopMove THENStop( Axis.Config.sAXIS_REF, TRUE, 10000, 10000, BuffMode, FunctionDone,stopBusy, FunctionActive, FunctionAborted, Axis.Error.StopError, FunctionErrorID );END_IF;END_IF;//绝对位移速度坐标设置IF Sys_Manual=TRUE THENtempDistance:=Axis.Config.Manual_RelativeMove_Pulse;tempPos:=Axis.Config.Manual_AbsoluteMovePulse;tempVel:=Axis.Config.Manual_velocity;tempAccDec:=Axis.Config.Manual_AccDec;tempJerk:=Axis.Config.Manual_jerk;ELSEtempDistance:=Axis.Config.Auto_RelativeMove_Pulse;tempPos:=Axis.Position_Table[PosIndex].Auto_AbsoluteMovePulse;tempVel:=Axis.Position_Table[PosIndex].Auto_AbsoluteMoveVelocity;tempAccDec:=Axis.Position_Table[PosIndex].Auto_AbsoluteMoveAccDec;tempJerk:=Axis.Position_Table[PosIndex].Auto_AbsoluteMoveJerk;END_IF;//移动限制,碰到极限只能往反方向移动IF Axis.Status.HardPositiveSignal =TRUE AND tempPos>0 THENtempAbsCondition:=FALSE;ELSIF Axis.Status.HardNegativeSignal =TRUE AND tempPos<0 THENtempAbsCondition:=FALSE;ELSEtempAbsCondition:=TRUE;END_IF;IF Axis.Status.HardPositiveSignal =TRUE AND tempDistance>0 THEN tempRelCondition:=FALSE;ELSIF Axis.Status.HardNegativeSignal =TRUE AND tempDistance<0 THEN tempRelCondition:=FALSE;ELSE tempRelCondition:=TRUE;END_IF;//绝对位移IF Axis.Config.Move_Interlock AND Axis.Status.ServoReady AND tempAbsCondition THENIF NOT Sys_Manual THENMoveAbsolute(Axis.Config.sAXIS_REF,Axis.AutoControl.AbsoluteMove,tempPos,tempVel,tempAccDec,tempAccDec,tempJerk,Direction,BuffMode,FunctionDone,MoveAbsoluteBusy,FunctionActive,Axis.Error.AbsCommandAbortedError,Axis.Error.AbsoluteMoveError,FunctionErrorID);ELSEMoveAbsolute(Axis.Config.sAXIS_REF,Axis.MaualControl.AbsoluteMove,tempPos,tempVel,tempAccDec,tempAccDec,tempJerk,Direction,BuffMode,FunctionDone,MoveAbsoluteBusy,FunctionActive,Axis.Error.AbsCommandAbortedError,Axis.Error.AbsoluteMoveError,FunctionErrorID);END_IF;END_IF;//相对位移IF Axis.Config.Move_Interlock AND Axis.Status.ServoReady AND tempRelCondition THENIF NOT Sys_Manual THENMoveRelative( Axis.Config.sAXIS_REF, Axis.AutoControl.RelativeMove, tempDistance,tempVel,tempAccDec, tempAccDec,tempJerk,BuffMode, FunctionDone, MoveRelativeBusy, FunctionActive, FunctionAborted, Axis.Error.RelativeMoveError, FunctionErrorID );ELSEMoveRelative( Axis.Config.sAXIS_REF, Axis.MaualControl.RelativeMove, tempDistance,tempVel,tempAccDec, tempAccDec,tempJerk,BuffMode, FunctionDone, MoveRelativeBusy, FunctionActive, FunctionAborted, Axis.Error.RelativeMoveError, FunctionErrorID );END_IF;END_IF;//软回零IF Axis.Config.Home_Interlock AND Axis.Status.ServoReady THENIF NOT Sys_Manual THENMoveSoftZero(Axis.Config.sAXIS_REF,Axis.AutoControl.StartSorftHome,Axis.Config.Manual_velocity,Axis.Config.Manual_AccDec,Axis.Config.Manual_AccDec,Axis.Config.Manual_jerk,BuffMode,FunctionDone,MoveSoftZeroBusy,FunctionActive,Axis.Error.SHomeCommandAbortedError,Axis.Error.SorftHomeError,FunctionErrorID);ELSEMoveSoftZero(Axis.Config.sAXIS_REF,Axis.MaualControl.StartSorftHome,Axis.Config.Manual_velocity,Axis.Config.Manual_AccDec,Axis.Config.Manual_AccDec,Axis.Config.Manual_jerk,BuffMode,FunctionDone,MoveSoftZeroBusy,FunctionActive,Axis.Error.SHomeCommandAbortedError,Axis.Error.SorftHomeError,FunctionErrorID);END_IF;END_IF;//位置到位检测FOR i:=0 TO SizeOfAry(Axis.Position_Table) BY 1 DOtempFirstPos:=Axis.Position_Table[i].Auto_AbsoluteMovePulse-PosCheckValue;tempLastPos:=Axis.Position_Table[i].Auto_AbsoluteMovePulse+PosCheckValue;Axis.Position_Table[i].Auto_InPositionedMark:=ZoneCmp(tempFirstPos,Axis.Config.sAXIS_REF.Act.Pos,tempLastPos);END_FOR;//轴运动Busy检测SvonBusy:=MoveAbsoluteBusy OR HomeBusy OR MoveSoftZeroBusy OR MoveRelativeBusy;IF SvonBusy AND SvonBusyLastSta=FALSE THENAxis.AutoControl.AbsoluteMove:=FALSE; Axis.AutoControl.StartSorftHome:=FALSE; Axis.AutoControl.RelativeMove:=FALSE; Axis.AutoControl.StartHardHome:=FALSE;END_IF;SvonBusyLastSta:=SvonBusy;//伺服状态Axis.Status.ServoIdle:=Axis.Config.sAXIS_REF.Details.Idle;Axis.Status.ServoReady:=NOT SvonBusy AND Axis.Status.ServoIdleAND Axis.Status.HardHomed AND Axis.Status.ServoOnAND NOT Axis.Status.AlarmingAND NOT Axis.Status.ErrorAND NOT Axis.AutoControl.StopMove;IF Axis.Status.ErrorCode=WORD#16#6440 THENAxis.Status.SoftPositiveSignal:=TRUE;ELSIF Axis.Status.ErrorCode=WORD#16#6441 THENAxis.Status.SoftNegativeSignal:=TRUE;ELSEAxis.Status.SoftPositiveSignal:=FALSE;Axis.Status.SoftNegativeSignal:=FALSE;END_IF;Axis.Status.EncoderPos:=LREAL_TO_REAL(Axis.Config.sAXIS_REF.Act.Pos);Axis.Status.CommandPos:=LREAL_TO_REAL(Axis.Config.sAXIS_REF.Cmd.Pos);//软回零状态确定IF MoveSoftZeroBusy THENAxis.Status.SorftHomed:=FALSE;END_IF;IF NOT MoveSoftZeroBusy AND MoveSoftZeroBusyLastSta THENIF Axis.Status.EncoderPos<0.5 AND Axis.Status.EncoderPos>-0.5 AND Axis.Status.HardHomed THENAxis.Status.SorftHomed:=TRUE; ELSEAxis.Status.SorftHomed:=FALSE;END_IF;END_IF;MoveSoftZeroBusyLastSta:= MoveSoftZeroBusy;//报警检测IF Axis.Config.sAXIS_REF.MFaultLvl.Active THEN Axis.Status.ErrorCode:=Axis.Config.sAXIS_REF.MFaultLvl.Code;Axis.Status.Error:=TRUE;ELSIF Axis.Status.HardPositiveSignal THENAxis.Status.Error:=TRUE;ELSIF Axis.Status.HardNegativeSignal THENAxis.Status.Error:=TRUE;ELSEAxis.Status.Error:=FALSE;END_IF;Axis.Status.Alarming:=Axis.Config.sAXIS_REF.DrvStatus.DrvAlarm OR Axis.Config.sAXIS_REF.DrvStatus.DrvWarning;
三.功能块调用
axisX:=0; axisY:=1; axisZ:=2; axisR:=3;Z上料位:=0; Z首片位:=1;R初始位:=0; R取片位:=1; R放片位:=2;Y初始位:=0; Y整形位:=1; X初始位:=0; X预取料位:=1; X取料位:=2; X物料整形位:=3;Axis[axisX].Config.sAXIS_REF:=MC_Axis000;Axis[axisY].Config.sAXIS_REF:=MC_Axis001;Axis[axisZ].Config.sAXIS_REF:=MC_Axis002;Axis[axisR].Config.sAXIS_REF:=MC_Axis003;
四.程序中使用
使能
回零
运动
自由落体运动c语言编程_欧姆龙NX PLC 轴运动功能块,ST和梯形图双语言相关推荐
- c语言二级编程实例,二级C语言编程_-实例.doc
二级C语言编程_-实例.doc 编程实例 ? 1.???????? 1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位.十位.个位的数字都是1.2.3. ...
- 换硬币c语言编程_如何才能成为编程高手?别人都不告诉你的东西,我来说给你听...
在IT行业摸爬滚打十几年的应该知道,下面简单说说关于编程需要掌握的技术与相关知识.很多人感觉编程很难.很多人问我,我英语不好,数学不好能做编程吗? 我非常肯定的说,能做编程.编程的领域很广泛.细分出来 ...
- 换硬币c语言编程_为什么大多数程序员都会学C语言的5大原因!什么原因让你学不会?...
一.c语言,不朽的传奇 从30年前到如今,一些流行的科技媒体上发表的编程语言排行榜,c语言始终稳定位于前三位,这是其他一种其他的编程语言都达不到的.c语言的江湖地位,不容撼动.虽历史悠久,却也是不朽的 ...
- 《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍
本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.3节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.3 主流 ...
- 使用c语言编程首先要新建,【C语言编程入门系列】—— 第三章,编写第一个C语言程序!...
导读:一般学一门计算机语言的第一堂上机课("上机"顾名思义,上计算机,机你太美),就是往屏幕输出"hello world",本章也不例外. 3.1 Hello, ...
- c语言编程上升沿怎样写,plc结构化编程怎么写
1.PLC如何编程 要看什么类型的PLC,有三菱的.西门子的 有以下几种编程方法: 梯形图编程语言(LD) 指令语句表编程语言(IL) 功能块图编程语言(FBD) 顺序功能图编程(SFC) 结构化文本 ...
- idea怎么进行c语言编程_编程入门-C语言开发IDE选择
上一篇文字:https://www.jianshu.com/p/40133cfcd9e3,笔者和大家分享了数据结构和算法的慨念,笔者用写作和写程序做了类比,写文章需要有文章组织结构和写作方法以更好的表 ...
- st语言 数组的常用方法_欧姆龙cp1h常用指令学习(九)结构化语言ST
结构化语言ST是作用于功能块编程中. 这门语言对于梯形图中不善于处理的数值运算等逻辑算法,采用类似于高级语言的语法,使其变得简单. 下面先从功能块的相关知识说起: CP1H的功能块规格: 功能块定义数 ...
- 猜数游戏c语言编程_做游戏,学编程(C语言) 10 僵尸危机
这个案例,分享14级同学大一时实现的打僵尸小游戏,电脑点击下图可以看到动图效果: 这个案例的代码不复杂,但是结合了游戏角色的动画效果.射击声音特效,实现后还是挺酷的.对应的游戏素材.分步骤代码,可从百 ...
- idea怎么进行c语言编程_怎么进行C语言编程,要全代码
展开全部 #include main() { 32313133353236313431303231363533e59b9ee7ad9431333332643238char goods[4][20] = ...
最新文章
- Apache Tiles 学习(四)、Tiles实战
- nginx的负载均衡
- Tomcat 最新版安装与使用手册,tomcat更改端口号方法,tomcat控制台乱码问题解决方法
- Go语言简单的TCP编程
- codevs 3054 高精度练习-文件操作
- 【搜索引擎基础知识1】搜索引擎的技术架构
- 数据结构实验之栈八:栈的基本操作
- 自定义带标尺的seekbar
- 医保费用监控指标体系建立(九)其他专项分析
- 人工智能与自动驾驶汽车_自动驾驶汽车中的道德AI
- windows10:检测windows defender是不是已经连接到了云安全中心
- 不离不弃共赴鸿蒙是什么歌,很早听过一首粤语歌,歌词好像是往往世界这么大 又可以遇到你 蛮经典的一首歌 求解答...
- mjs无法访问ftp文件解决
- 【PTA】【Python】【拼题A 2022 跨年挑战赛】太神奇了
- 2022-2028全球超声波封管机行业调研及趋势分析报告
- 如何整合线上和线下营销进行深度交融
- apex语言与java比较_Apex 基础知识合辑
- wordpress配置SSL证书
- 20个数据分析师必会的营销模型,赶紧收藏
- 魔兽怀旧服务器维护副本是否重置,魔兽世界怀旧服副本重置时间 魔兽世界怀旧服副本重置时间详解...
热门文章
- PLSQL提示动态执行表不可访问,本会话的自动统计被禁止问题的解决
- Mobile First! Wijmo 5 之 架构
- 【转载】jQuery框架
- vue运行报错:Cannot find module 'webpack/bin/config-yargs'
- vscode生成vue模板快捷键_VSCode 初次写vue项目并一键生成.vue模版
- python下载问题_初学者下载使用Python遇到的问题看它就行了
- c语言贪吃蛇游戏的关键技术,C语言的贪吃蛇游戏设计
- 重构java和js版_重构Javascript代码示例(重构前后对比)
- Yii Framework2.0开发教程(9)运行机制概述
- 2019年三峡大学计算机考研名单,三峡大学2019硕士研究生复试录取方案