Overview

The Schneider Lexium 28A amplifer isn’t intended to be used over Modbus RTU but it can work. Schneider has a FAQ that addresses this also. FA371313. I think you will find more detail here.

This amplifier supports jogging, homing, indexing using pre programmed values and called up by toggling external IO. The trick done here is to tell the amplifier we are going to override the external IO over Modbus.

Serial Port Setup
Modbus Quirks
Initial Setup
Get Modbus Control
Jogging
Position set Zero
ABS Move
Get Position
Torque Limit

Equipment I Used for testing

LXM28AU01M3X Servo Amplifier
BCH2MB0133CA5C Servo Motor
VW3M5D1AR15 power cable 1.5m shielded
VW3M8D1AR15 encoder cable 1.5m shielded
TCSMCNAM3M002P USB to RS485 Schneider Cable

Default Serial Port Configuration

Default Com parameters: Unit ID 127, 19200, 8, Even, 1

Pin 4 the high line, Pin 5 is the low line of the RS485. It says no polarization so since my setup is working I would say polerization comes form the USB to Serial com cable I am using.

IMPORTANT MODBUS QUIRKS

I could not make any single word Modbus reads or writes work at all. Everything had to be two words even when what I am writing to is a single word value. Fore example when writing to register 0x50E to control the IO I had to do two consecutive words, 0x50E and 0x50F. Of the two words 0x50F is the least significant and the one I have to actually write to in the case of 16 bit registers.
Some parameters, such as jog speed, I can’t write to while jogging and get an exception code.

Needless to say this can cause some confusion so best to remember it. Perhaps future firmware versions will change this.

Initial Setup

For my application I want..

  • Set current position as home. This way I can just jog to a location and say I am home. No need for IO to be connected to the amplifier at all.
  • Jog at any velocity.
  • Make absolute moves

Parameters I changed using the free SoMove software. I believe they can all be set via the keypad also.

  • P1-01 - Operating Mode: Position Sequence
    IO Setup
  • P2-10 AB - Servo On
  • P2-11 AB - Jog Positive
  • P2-12 AB - Jog Negative
  • P2-13 AB - HOME
  • P2-14 AB - Data Set Bit 0
  • P2-15 AB - Start Data Set
  • P2-16 AB - Disabled
  • P2-17 AB - Torque Reference Value Bit 0
    Home Setup
  • P5-04 X - Homing Method: Actual position as reference point. (set current position to zero)
    Position Move Setup
  • P6-03 - Abs position, start data set immediately

**Be sure to un assign any digital inputs you are not using. For example if you have an IO point assigned to a limit switch and its not on, your motor won’t move.

Get Modbus Control

You must first tell the amplifier which digital inputs you are going to override via Modbus. This has to be done after every reset / power cycle so your program should do this on system startup.
0x40c = FF This tells the amplifier you want to use all 8 digital inputs over modbus. You can also do some IO controlled over Modbus and other IO via the physical inputs. This is a bit mask.

Now lets try jogging

0x50A = 100 This sets the jog speed to 100 RPM. I could only change this when NOT jogging.
0x50E = 1 Turn the first input on, which above we assigned to Servo On. Your servo should now be active.
0x50E = 3 3 = 11 in binary so that will keep the servo on signal on and turn on Jog Positive.
0x50E = 5 5 = 101 in binary so Servo on, and Jog minus.
When done..
0x50E = 1 Stop jogging, keep servo active.

Set our current Position to zero.

0x50E = 9 9 = 1001 in binary so keep servo active and set the home bit.
0X50E - 1 Turn off the homing bit, keep servo on bit.

Make a absolute move

0x704 = 1000000 Position to move to. A revolution is 100,000 so I did 1,000,000 to get 10 revolutions. This scaling can be changed but is beyond the scope of this document.
0x804 = 0x00C800C8 This is 200 in the upper word and 200 in the lower word. It sets the accel and decel to 200ms each. You can skip this step as 200ms is the default values anyhow.
0x806 = 0x02580000 The left numbers, most significant word, are 0x0258 is 600 in decimal and translates to 60.0 RPM. The less significant word is a wait time and we’re not using it here.
Now lets initiate the move.
0x50E = 33 33 is 100001 which will keep our servo on and Start Data Set.
The motor should spin 10 revolutions at 1 revolution per second.
Now lets move back to position zero.
0x50E = 1 Just servo on.
0x704 = 0 Set new requested position.
0x50E = 33 Trigger start data set in addition to servo on. You should get 10 revs at 1 rev per second in the other direction.

Getting current Position

Easiest method:
read P0-09 or Modbus register 0x112.

Another way would be to setup mapping like this.
P0-35 = 0X0B000B00 Mapping is a bit compilcated but the summary is 0B00 translates to P11-00 and since P11-00 is a 32 bit parameter you must do it twice. See Lexium 28 Manual for more.
Now you can read P0-25 or Modbus 0x132 for your current position.

Activating a torque limit

Multi step process of telling the amp you want to use a torque limit. By default this limit is expected via T_REF analog input on the I/O connector. So that we can set the limit with a paramter we have to set the ‘Torque Reference Value Bit 0’ to on. That makes it so P1-12 or Modbus 0x218 is our torque limit in percent.
P1-02 Modbus 0x204 set to 0x10 Activate a torque limit. Can be set via software and saved to flash or by using modbus.
0x218 = 10 Set torque limit to 10%
0x50E = 129 Turn on Servo on and Torque ref bit zero we mapped above.
Your torque limit should take effect.

**When you turned on P1-02 or set MB 0x204 above you told the drive to use a torque limit. The default is to get this limit from T_REF analog input. Assuming nothing is wired to this you will have zero torque. This is why you must keep the ‘Torque Reference Value Bit 0’ on all the time. If you want to remove this torque limit completely be sure to set P1-02 or MB 0x204 back to zero.