Simotion应用指南(一) 如何快速的搭建一个Simotion项目

引言

Simotion作为西门子高端运动控制器在网上的资料比较少,大部分的资料也是英文的。自从从事C#后端开发之后,有项目的时候修改一下Simotion,调试Simotion的机会越来越少了,但是我无法忘记Simotion ST结构化语言的优雅。要是把Simotion全部的功能介绍完,估计没有个四五十篇文章下不来。我也不知道自己能不能坚持写完😂。本期就先不讲解理论,先快速的搭建一个Simotion项目,并通过仿真运行起来。(先货真价实的看见一个轴能动起来,至于什么是工艺包,什么是工艺对象,齿轮比配置等等理论之后的文章讲解。)

目录

引言

一、Simotion简介

Simotion系统概述

Simotion的应用领域

Simotion系统架构

Simotion与竞争产品的比较

二、如何快速的搭建一个Simotion项目 

1.打开SIMOTION SCOUT软件

2.添加一个Simotion站点

3.打开HardWare进行组态

4.打开NetWork进行网络配置

5.编译保存 

6. 添加一个电源模块

7.添加一个驱动模块

8.添加一个AXES 

9.修改报文 

三、仿真Simotion

1.打开仿真,项目下载

2.添加一个ST_Fault的ST空程序

3.EXECUTION SYSTEM中添加FaultTask

4.Control panel测试运行轴

四、使用点动程序的Simotion仿真

1.添加一个ST_Axis_Control的ST程序

2.添加一个ST_Global的ST程序

3.添加一个ST_Axis_Test的ST程序

4.ST程序设置可以监控

5.EXECUTION SYSTEM中添加BackgroundTask

6.监控程序


一、Simotion简介

Simotion是由西门子(Siemens)公司开发的一个高级运动控制系统,它结合了工业自动化领域的运动控制和工艺控制功能,旨在为复杂的运动控制应用提供全面的解决方案。Simotion系统集成了先进的硬件和软件技术,适用于各种需要精确控制和高性能的工业自动化应用,如机床、包装机械、印刷设备等。本文将深入探讨Simotion系统的核心特性、应用领域、技术架构以及与竞争产品的比较,以帮助读者更全面地了解这一先进的运动控制平台。

Simotion系统概述

Simotion系统是西门子公司专门为复杂运动控制应用而设计的,它融合了PLC(可编程逻辑控制器)的功能与CNC(计算机数控)系统的特点,形成了一种高度灵活、功能强大的解决方案。Simotion系统的核心特点包括:

  1. 集成的运动控制和工艺控制:Simotion系统不仅能够精确控制运动轨迹、速度和加速度,还可以同时管理复杂的工艺参数,如温度、压力等,以满足多种工业应用的需求。

  2. 开放的软件架构:Simotion系统基于西门子的TIA(Totally Integrated Automation)平台,支持多种编程语言和开发环境,如STEP 7、TIA Portal等,使得开发人员可以根据具体需求进行定制开发和集成。

  3. 高性能的硬件平台:Simotion系统采用先进的多核处理器和专用的运动控制芯片,具备强大的实时计算能力和高速通信接口,能够处理复杂的运动算法和大规模数据交换。

  4. 灵活的配置和扩展性:Simotion系统支持模块化设计,用户可以根据需要选择不同的模块(如运动控制、I/O接口、通信模块等)进行灵活组合和扩展,以满足不同规模和复杂度的应用场景。

  5. 全面的诊断和监控功能:Simotion系统集成了先进的诊断工具和监控功能,能够实时检测设备状态和运行参数,帮助用户快速定位和解决问题,提高生产效率和设备可用性。

Simotion的应用领域

Simotion系统广泛应用于需要高精度和高性能运动控制的行业和应用领域,包括但不限于:

  • 机床制造:用于数控机床和复合加工中心,能够实现高速、高精度的轨迹控制和加工过程优化。

  • 包装和填充设备:用于食品和饮料行业的包装机械,能够精确控制包装材料的输送、填充量和封口过程。

  • 印刷设备:用于印刷机械的卷取、定位和印刷控制,支持复杂的多轴同步运动和图像定位功能。

  • 材料处理和装配:用于各种材料处理设备和自动装配线,如焊接机器人、涂覆设备等,能够精确控制操作过程和产品质量。

  • 测试和检测设备:用于自动化测试和检测系统,能够实现精确的测量和数据采集,支持复杂的测试程序和数据分析。

Simotion系统架构

Simotion系统的核心架构包括硬件和软件两个方面,它们共同构成了这一高级运动控制平台的基础。

  1. 硬件架构

    • 主控制单元(CPU):Simotion系统的核心控制单元,通常由多核处理器组成,负责执行运动控制算法和数据处理任务。

    • 运动控制模块(Motion Control Unit):专用的运动控制芯片或模块,负责实时控制运动轨迹、速度和加速度,保证高精度的运动控制。

    • I/O模块:用于与外部设备和传感器进行数据交换和信号处理,支持多种数字和模拟接口。

    • 通信接口:支持各种工业通信协议和网络,如PROFIBUS、PROFINET等,实现Simotion系统与其他设备和上位系统的数据交换和集成。

    • 电源模块和冷却系统:确保Simotion系统稳定运行的电源供应和散热管理。

  2. 软件架构

    • 工程开发环境:Simotion系统通常使用TIA Portal或SCOUT作为工程开发环境,集成了运动控制编程、图形化编程语言(如STL、SCL)、参数配置和在线监控等功能。

    • 运动控制软件:包括运动控制算法、插补算法、轨迹规划和同步控制等软件模块,用于实现复杂的多轴同步运动控制。

    • 诊断和监控工具:提供实时的设备状态监控、诊断报告和事件记录功能,帮助用户快速定位和解决问题。

Simotion与竞争产品的比较

Simotion系统作为一个高级运动控制平台,在市场上与其他类似产品进行竞争。以下是Simotion系统相对于竞争产品的优势和特点:

  • 集成度高:Simotion系统集成了运动控制、工艺控制和诊断功能,能够满足复杂应用的多重需求,减少系统集成和维护成本。

  • 灵活的软件架构:Simotion系统支持多种编程语言和开发环境,使得开发人员能够根据具体需求进行定制开发和集成,提高系统的灵活性和可扩展性。

  • 高性能的硬件平台:Simotion系统采用先进的多核处理器和专用的运动控制芯片,具备出色的实时计算能力和高速数据交换能力,能够处理复杂的运动算法和大规模数据处理。

  • 全面的支持和服务:作为西门子公司的产品,Simotion系统拥有全球范围内的技术支持和服务网络,能够及时响应用户需求并提供定制化的解决方案。

二、如何快速的搭建一个Simotion项目 

1.打开SIMOTION SCOUT软件

2.添加一个Simotion站点

3.打开HardWare进行组态

添加站点之后HardWare会自动打开,或右键D4x5 选择Open HW Configuration进入HardWare界面。因为我们是要进行仿真测试,所以设置127编程口的网络。

4.打开NetWork进行网络配置

添加一个pg/pc

设置 pg/pc的ip

设置  pg/pc的接口

5.编译保存 

NetWork编译保存

 

 

HardWare编译保存

6. 添加一个电源模块

7.添加一个驱动模块

8.添加一个AXES 

9.修改报文 

三、仿真Simotion

1.打开仿真,项目下载

2.添加一个ST_Fault的ST空程序

INTERFACE
    PROGRAM Falut;
END_INTERFACE

IMPLEMENTATION
    PROGRAM Falut
    //未调用故障处理任务,导致SIMOTION D4x5 CPU无法进入RUN状态。
    //在EXCUTION SYSTEM中的
    //SystemInterruptTasks内的所有FaultTask中调用空程序。
    //必须调用,否侧CPU无法run。
        ;
    END_PROGRAM   
END_IMPLEMENTATION

3.EXECUTION SYSTEM中添加FaultTask

添加之后再次下载。

4.Control panel测试运行轴

点动测试 

四、使用点动程序的Simotion仿真

刚才我们已经通过Control panel进行了点动,现在我们开始通过程序进行点动测试。

1.添加一个ST_Axis_Control的ST程序

INTERFACE

    USEPACKAGE cam_ext;   
    FUNCTION_BLOCK  FB_JOG;   
    FUNCTION_BLOCK  FB_Axis_Enable;
    
END_INTERFACE

IMPLEMENTATION
    
    FUNCTION_BLOCK FB_JOG         
        VAR_INPUT
            axisName         : posaxis;
            jogForward       : BOOL;
            jogBackward      : BOOL;
            speedsetpoint    : LREAL;
            Axis_AutoAccel   : LREAL:=3000;
            Axis_AutoDecel   : LREAL:=3000;
            mymovingmode     : EnumMovingMode;
        END_VAR
        
        VAR           
            myDINT        : DINT;
            forwardton       : TON;
            backwardton      : TON;
        END_VAR
        
        VAR_OUTPUT           
            ActualSpeed                : REAL;
            ActualPosition             : REAL;
        END_VAR
                                       
        IF axisname.control=ACTIVE THEN
            forwardton(in:=jogForward AND NOT jogBackward, pt:=t#3000ms);
            backwardton(in:=NOT jogForward AND jogBackward, pt:=t#3000ms);          
        END_IF;
        
        ActualSpeed:=LREAL_TO_REAL(axisName.motionStateData.actualVelocity);
        ActualPosition:=LREAL_TO_REAL(axisName.positioningState.actualPosition);
             
        IF forwardton.q THEN 
            myDINT :=_move(
                axis:= axisName,
                direction:= POSITIVE,
                velocitytype:= DIRECT,
                velocity:= speedsetpoint,
                positiveacceltype:=Direct ,
                positiveaccel:=Axis_AutoAccel,
                negativeacceltype:=Direct ,
                negativeaccel:=Axis_AutoDecel,
                velocityprofile:=SMOOTH,
                mergemode:=IMMEDIATELY,
                nextcommand:=IMMEDIATELY,
                movingmode:=mymovingmode
            );
        END_IF;
    
        IF backwardton.q THEN 
            myDINT :=_move(
                axis:= axisName,
                direction:= NEGATIVE,
                velocitytype:= DIRECT,
                velocity:= speedsetpoint,
                positiveacceltype:=Direct ,
                positiveaccel:=Axis_AutoAccel,
                negativeacceltype:=Direct ,
                negativeaccel:=Axis_AutoDecel,
                velocityprofile:=SMOOTH,
                mergemode:=IMMEDIATELY,
                nextcommand:=IMMEDIATELY,
                movingmode:=mymovingmode
            );
        END_IF;
        
        IF forwardton.q = FALSE AND backwardton.q = FALSE THEN
            myDINT :=_stop(
                axis:=axisName,
                stopmode:=STOP_WITHOUT_ABORT,
                stopspecification:=ALL_AXIS_MOTION,
                positiveacceltype:=Direct ,
                positiveaccel:=Axis_AutoAccel,
                negativeacceltype:=Direct ,
                negativeaccel:=Axis_AutoDecel,
                velocityprofile:=SMOOTH,
                mergemode:=IMMEDIATELY,
                nextcommand:=IMMEDIATELY,
                movingmode:=CURRENT_MODE
            );      
        END_IF;

    END_FUNCTION_BLOCK

    FUNCTION_BLOCK FB_Axis_Enable  
        
        VAR_INPUT
            axisName         : driveaxis; 
            axis_enable      : BOOL;
        END_VAR
        
        VAR           
            myDINT        : DINT;
        END_VAR
        
        VAR_OUTPUT
            axis_enabled       : BOOL;
        END_VAR     
        
        IF axis_enable THEN
            myDINT :=_enableAxis(axis :=axisName);
        ELSE 
            myDINT :=_disableAxis(axis :=axisName);                  
        END_IF;
        
        IF axisName.control=inactive THEN 
            axis_enabled:=FALSE;
        ELSE
            axis_enabled:=TRUE;   
        END_IF; 
                    
    END_FUNCTION_BLOCK
    
END_IMPLEMENTATION

2.添加一个ST_Global的ST程序

INTERFACE
    
    USES ST_Axis_Control;
    
    VAR_GLOBAL
        
        myfbaxisen : FB_Axis_Enable;
        
        myfbaxisjog : FB_JOG;
        
    END_VAR    
    
END_INTERFACE

IMPLEMENTATION


    
END_IMPLEMENTATION

3.添加一个ST_Axis_Test的ST程序

INTERFACE
    
    USES ST_Global;

    PROGRAM Axis_Test;
         
END_INTERFACE

IMPLEMENTATION
    
    PROGRAM Axis_Test
               
        VAR
            axisen : BOOL;
        END_VAR
        
        
        myfbaxisen(
            axisName := Axis_1
            ,axis_enable := TRUE
            ,axis_enabled => axisen);
        
        myfbaxisjog(
            axisName := Axis_1
            ,jogForward := TRUE   
            ,jogBackward := FALSE 
            ,speedsetpoint := 10
            ,Axis_AutoAccel := 3000
            ,Axis_AutoDecel := 3000  
            ,mymovingmode := POSITION_CONTROLLED);
            
                     
    END_PROGRAM 
       
END_IMPLEMENTATION

4.ST程序设置可以监控

5.EXECUTION SYSTEM中添加BackgroundTask

添加之后下载至仿真cpu中

6.监控程序

此时我们可以看到轴已经运行起来。 

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值