Setting up the SHA Project
Starting your Project:
> The samples can be adapted for your application; however, it is more likely they will be used as a guideline/example, and your application will be created from scratch or from an existing project.
Jump a specific step by clicking a link below
Step 1
> After your hardware is entered in the project, the next step is to create a Motion Group. A 1 millisecond update rate is recommended, and the rate selected must be entered into the SHA_Config.Ts tag, in seconds; so, use 0.001 in this case. Likewise, any SHA_RelayId blocks should have their Ts set to this value. In the sample, a KyntronicsMotionGroup is used:
Here is the associated tag, which will be used to run the MotionTask:
Step 2
> Add/create the SHA_Axis with a datatype of AXIS_CIP_DRIVE. Add the PowerAxis as an AXIS_CIP_DRIVE.
Step 3
> Add/create the SHA_Position axis as type AXIS_VIRTUAL. If a controlled variable Force will be needed, then create the SHA_Force axis as type AXIS_VIRTUAL.
> If the half-axis feedback will be used, then create the FeedbackAxis as AXIS_CIP_DRIVE.
Step 4
> Setup the SHA_Axis CIP Axis configuration. In the General tab of the Properties, select: Velocity Loop, Custom, High Loop Response.
Step 5
> Set up the Motor based on the catalog number. Note: Because the motor drives the pump to move the actuator, no Autotune is needed; the default parameters for the motor from its catalog number are sufficient. Likewise, the LoadObserver does not need to be used or run.
Step 6
> The axis scaling should be setup as follows. User units for the Kinetix Axis will remain 1:1 such that all speeds to the drive are in units of Hertz (so the corresponding RPM is speed * 60).
The SHA_PositionControl block outputs a CommandPumpSpeed, in Hz, which is then sent to the SHA_Axis.VelocityTrim to turn the motor and pump. The minimum and maximum pump speed parameters in the SHA_CONFIG tags are in Hz as well.
Fun fact: The SHA’s rod will move faster when retracting than extending, for the same pump speed (say +5 Hz to extend and -5 Hz to retract). This is because in the retract case, the rod occupies some of the chamber volume, so less fluid is needed to move it a given distance.
Note: The Travel Mode should be set to Unlimited, as shown below.
Step 7
> When the Velocity mode was selected (above), the correct Cyclic Parameters need to be specified. The AOI requires non-default feedback and control parameters to be exchanged between the CIP Axis backing tag and the Kinetix drive.
Step 8
Enable the cyclic read/write parameters as shown below:
Step 9
> In the Exceptions tab, the Excessive Velocity Error MUST be set to Ignore:
Step 10
> Create the MotionTask, and the SHA_MotionTask_Program. The MotionTask is configured as Type: Event; with the Trigger of: Motion Group Execution; using the Tag: KyntronicsMotionGroup; set the Execute task… to 1.0 ms (if the MotionGroup is set to a 1 ms scan; otherwise use the MotionGroup scan time. Set a Watchdog value that is meaningful/reasonable. The SHA_Routine shown under the motion task will hold the SHA_PositionControl block(s).
The SHA_MotionTask_Program can be exported from a sample project and imported into your project: this will also bring in the SHA_Controller, SHA_PositionControl, SHA_RelayId, SHA_Config, etc. Or, the SHA_Controller and SHA components can be loaded via the Import Assets, and then create the tasks from scratch. Rungs can also be copied out of the samples, as needed.
Step 11
> Create/make sure the SHA_MotionTask_Program is scheduled:
Step 12
> Update the Kinetix Power and Drive modules to setup their Axis associations:
Step 13
Required Ladder logic to Post the SHA_PositionControl’s CommandPumpSpeed (or a ManualPumpSpeed) to the SHA_Axis/motor
> The CommandPumpSpeed output must be MOV’d to the SHA_Axis.VelocityTrim in order for the block to move the SHA. A ManualMode can be provided, to allow for direct jogs of the SHA_Axis via the VelocityTrim. Jog buttons could also be used, etc. Here are these other MOV rungs, placed after/below the SHA_PositionControl, to accomplish this (including logic to coordinate with the SHA_RelayId blocks):