关于simotion建立同步/解除同步的问题
关于simotion建立同步/解除同步的问题。
问题:
【enable gearing】【disable gearing】【enable camming】【disable camming】都是一个过程,需要通过逻辑来保证该指令【能够执行一次,且仅执行一次】。
方法1)如果同步命令在background/IPO中执行,使用上升沿来保证“只执行一次”
方法2)建立【gearoff-running】【gearon-running】变量,在指令执行时置1,同步建立/解除后置0
可以参考我写的relative gear里面的时序。我的这个程序里面,方法1和方法2都用了。自己写程序可以只用其中一种方法。
    FUNCTION_BLOCK FB_RelativeGear
    //--------------------------------------------------------------------------
    // SFAE / Beijing, China
    //--------------------------------------------------------------------------
    //functionality:    two axis relative sync
    //assignment:       Ipo task / background
    //--------------------------------------------------------------------------
    //change log table:
    //version   date        expert in charge    changes applied
    //01.00.00  24.10.2016  Zheng lei           Created
    //01.01.00  29.06.2018  Zheng lei           fix 'GearOffRunning' signal bug
    //01.01.01  28.11.2018  Zheng lei           1)reset 'GearOnRunning''GearOffRunning' signal when command change
    //                                          2)change gearRatio on-the-fly
    //==========================================================================
        VAR_INPUT
            TO_master       :PosAxis := TO#nil;
            TO_slave        :FollowingAxis;
            TO_slaveSync    :FollowingObjectType := TO#nil;
            GearOn          :BOOL:= FALSE;
            GearRatio       :LREAL:= 1.0;
            Acc             :LREAL:= 50.0;
            //superImpose(options)
            SPos_Length      :LREAL:= 1.0;
            SPos_Spd         :LREAL:= 2.0;
            SPos_Positive    :BOOL:= FALSE;
            SPos_Negative    :BOOL:= FALSE;
        END_VAR
        VAR_OUTPUT
            gearOnOK    :BOOL;
        END_VAR
        VAR
            myRetDINT       :DINT;
            rtrig_gearOn    :R_TRIG;
            ftrig_gearOff   :F_TRIG;
            GearOnRunning   :BOOL;
            GearOffRunning  :BOOL;
            GearRatioChanged :BOOL;
            oldGearRatio   :LREAL;
            PosP_Trig       :R_TRIG;
            PosN_Trig       :R_TRIG;
        END_VAR
        rtrig_gearOn(GearOn);//rtrig
        ftrig_gearOff(GearOn);//ftrig
        IF rtrig_gearOn.q OR ftrig_gearOff.q THEN
            GearOnRunning   := FALSE;
            GearOffRunning  := FALSE;
        END_IF;
        GearRatioChanged := (GearRatio <> oldGearRatio);
        oldGearRatio := GearRatio;
        //gear on
        IF (rtrig_gearOn.q OR GearRatioChanged)
        AND TO_slave.control = active
        AND (TO_slave.syncMonitoring.syncState <> Yes OR GearRatioChanged)
        AND (TO_slave.motionStateData.motionState = STANDSTILL OR GearRatioChanged)
        AND TO_master <> TO#nil
        AND TO_slave <> TO#nil
        AND TO_slaveSync <> TO#nil
        AND NOT GearOnRunning
        THEN
            myRetDINT := _setMaster(                                //set master
                                followingObject := TO_slaveSync
                                ,master := TO_master
                                ,transientBehavior := DIRECT
                                ,nextCommand := IMMEDIATELY
                                );
            myRetDINT := _enableGearing(
                                followingObject := TO_slaveSync
                                ,direction := BY_VALUE
                                ,gearingType := RELATIVE
                                ,gearingMode := GEARING_WITH_RATIO
                                ,gearingRatioType := DIRECT
                                ,gearingRatio := GearRatio
                                ,synchronizingMode := IMMEDIATELY
                                ,syncProfileReference := RELATE_SYNC_PROFILE_TO_TIME
                                ,positiveAccelType := DIRECT
                                ,positiveAccel := Acc
                                ,negativeAccelType := DIRECT
                                ,negativeAccel := Acc
                                ,velocityProfile := TRAPEZOIDAL
                                ,mergeMode := IMMEDIATELY
                                ,nextCommand := IMMEDIATELY
                                ,synchronizingDirection := SHORTEST_WAY
                                );
            GearOnRunning := TRUE;
        END_IF;
        IF TO_slave.syncMonitoring.syncState = Yes
            OR NOT GearOn OR TO_slave.control = INACTIVE
        THEN //gear on finish
            GearOnRunning := FALSE;
        END_IF;
        //gear off
        IF TO_slave.control = active
            AND ftrig_gearOff.q
            AND TO_slave.syncMonitoring.syncState = Yes
            AND NOT GearOffRunning
            AND TO_slaveSync <> TO#nil
        THEN
            GearOffRunning := TRUE;
            myRetDINT := _disableGearing(
                                followingObject := TO_slaveSync
                                ,syncOffMode := IMMEDIATELY
                                ,syncProfileReference := RELATE_SYNC_PROFILE_TO_TIME
                                ,positiveAccelType := DIRECT
                                ,positiveAccel := Acc
                                ,negativeAccelType := DIRECT
                                ,negativeAccel := Acc
                                ,velocityProfile := TRAPEZOIDAL
                                ,mergeMode := IMMEDIATELY
                                ,nextCommand := IMMEDIATELY
                                );
        END_IF;
        IF TO_slave.syncMonitoring.syncState <> Yes THEN   //gearoff finish
            GearOffRunning         := FALSE;
        END_IF;
        //------------------- SuperImpose pos ------------------------
        PosP_Trig(SPos_Positive);
        PosN_Trig(SPos_Negative);
        IF PosP_Trig.q
            AND TO_slave.control = active
        THEN
            myRetDINT := _pos(
                         axis := TO_slave
                        ,direction := POSITIVE
                        ,positioningMode := RELATIVE
                        ,position := SPos_Length
                        ,velocityType := DIRECT
                        ,velocity := SPos_Spd
                        ,positiveAccelType := DIRECT
                        ,positiveAccel := Acc
                        ,negativeAccelType := DIRECT
                        ,negativeAccel := Acc
                        ,velocityProfile := TRAPEZOIDAL
                        ,blendingMode := INACTIVE
                        ,mergeMode := SUPERIMPOSED_MOTION_MERGE
                        ,nextCommand := IMMEDIATELY
                        );
        END_IF;
        IF PosN_Trig.q
            AND TO_slave.control = active
        THEN
            myRetDINT := _pos(
                        axis := TO_slave
                        ,direction := NEGATIVE
                        ,positioningMode := RELATIVE
                        ,position := SPos_Length
                        ,velocityType := DIRECT
                        ,velocity := SPos_Spd
                        ,positiveAccelType := DIRECT
                        ,positiveAccel := Acc
                        ,negativeAccelType := DIRECT
                        ,negativeAccel := Acc
                        ,velocityProfile := TRAPEZOIDAL
                        ,blendingMode := INACTIVE
                        ,mergeMode := SUPERIMPOSED_MOTION_MERGE
                        ,nextCommand := IMMEDIATELY
                        );
        END_IF;
        gearOnOK := TO_slave.syncMonitoring.syncState = Yes
                    AND TO_slave.control = active;
    END_FUNCTION_BLOCK
												
											关于simotion建立同步/解除同步的问题的更多相关文章
- HCNP Routing&Switching之IS-IS邻居建立、LSDB同步、拓扑计算和路由形成
		
前文我们了解了IS-IS的报文结构和类型相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15260670.html:今天我们来聊一聊IS-IS建立邻居. ...
 - OSPF协议原理及配置4-邻接关系的建立和LSDB同步
		
OSPF协议原理及配置4-邻接关系的建立和LSDB同步 进入ExStart状态后,广播和NBMA型网络要等待4倍的Hello时间,确定DR和BDR.然后建立邻接关系,并交互链路状态通告,以使用LS ...
 - 线程同步 synchronized 同步代码块 同步方法 同步锁
		
一 同步代码块 1.为了解决并发操作可能造成的异常,java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块.其语法如下: synchronized(obj){ // ...
 - android账号与同步之同步实现
		
上一篇博文我先介绍了账号与同步的账号管理,这篇就介绍一下还有一部分.就是android给提供的sync同步机制的使用. 事实上sync机制的使用和上一篇博文中介绍的账号管理非常类似,也是基于binde ...
 - C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]
		
C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...
 - MYSQL同步--主从同步问题集锦
		
1 同步停止,报错误: Could not find first log file name in binary log index file 数据库主从出错: Slave_IO_Running: ...
 - 彻底理解线程同步与同步代码块synchronized
		
public class Demo { public static synchronized void fun1(){ } public synchronized void fun2(){ } pub ...
 - rsync 远程同步 实时同步备份 两种免交互的方式实现实时备份
		
rsync 远程同步: 一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步 作用:做数据备份 备份方式: 完全备份 增量备份 ...
 - 同步对象(同步条件Event)
		
event = threading.Event() #创建同步对象 event.wait() #同步对象等待状态 event.set() #同步对象设置Trueevent.clear() ...
 
随机推荐
- JAVA 使用Dom4j 解析XML
			
[转自] http://blog.csdn.net/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1)下载 ...
 - 剑指offer——面试题11:旋转数组的最小数字
			
#include"iostream" using namespace std; int GetMinNumber(int *data,int len) { ,right=len-, ...
 - css3 渐变色
			
Firefox可以使用角度来设定渐变的方向,而webkit只能使用x和y轴的坐标. 渐变可以创建类似于彩虹的效果,低版本的浏览器使用图片来实现,CSS3将会轻松实现网页渐变效果 粘贴代码 <di ...
 - PIE 支持项目介绍
			
目前PIE SDK已经支持了气象.海洋.农业.水利.测绘等多个行业应用. [气象应用-和WebGIS程序界面结合] [气象应用-积雪监测] [气象应用-洪涝监测] [气象应用-专题模板] [气象应用- ...
 - jenkins +gitlab 自动化代码秒级上线
			
一,配置脚本 #!/bin/bash #目标服务器IP地址 host=$ #job名称 job_name=$ #包名 name=web-$(date +)) #打包 cd /var/lib/jenki ...
 - ansible 实战项目之文件操作(二)
			
一,前言 如果没有安装好的话看我以前的贴子哦!! 上次安装已经确定通了,所以下面步骤应该是完全ok的 特点: (1).轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可: (2 ...
 - 弹出table页面--hq
			
function queryRelation(tableID,prosourceID){ //弹出页面 debugger; initqueryRelationGrid(tableID,prosour ...
 - Go初探
			
官方网站:https://golang.org/ 标准库文档:https://golang.org/pkg/ 在线编码学习:https://play.golang.org/ PS:请自行FQ 简介 ...
 - Java关键字final、static使用总结 (final static在容器中不可以改变容器但可以改变存放)
			
一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效 ...
 - C#(Winform)的SaveFileDialog(文件保存对话框)控件使用
			
#region 保存对话框 private void ShowSaveFileDialog() { //string localFilePath, fileNameExt ...