Jump to content
OMRON Forums

Rollover mode


Recommended Posts



I am trying to implement a "rollover" mode for my rotation table. I am doing the following:







#6->CC 'rotation table


Coord[1].FeedTime = 1000

Coord[1].PosRollover[5] = 360


All motors are homed and I make jog, rel, abs moves. I don't see that position of CC

is running between 0-360 degrees. It is continuously grows up in + or - direction.

What I am doing wrong? Please, advise.


I am using PPmac IDE v., firmware -, CPU:PowerPC, 460EX, Type: UMAC

Link to comment
Share on other sites

  • Replies 7
  • Created
  • Last Reply

Top Posters In This Topic

  • 3 months later...

Hi again,


more than one year ago I asked this question, but the problem is still there. I need to reset the position of the rotary axis when it reaches 360° to 0° and so on.

Until today I have been doing that in the software on PC side using the modulo. Our application is testing disks with different resolutions. It might be 1 degree and less. It is very critical to have data every scan resolution. With modulo sometimes we missed data in the areas where the reset was done. So, how can I implement it differently? I would like to make it as PLC module that monitors the position and when Home sensor is high, the position becomes 0. The motor is revolving when I want to do that. The sensor is connected to Gate3[0].Chan[0].HomeFlag. On PC side I execute the "#1p" command the get the current position.


Is it possible to make something like this:


if (Gate3[0].Chan[0].HomeFlag == 1)

Motor[0].ActPos = 0



I tried to reset ActPos, it does not work, so what does?

Link to comment
Share on other sites

There are several reasons why trying to reset any internal position registers on the fly is a BAD idea and will not work reliably.


The first reason is that in the time gap between deciding you want to change the position value and the time you actually do it, the real position can change, so the new value you try to force will not be correct.


The second reason is that it is not possible to change all of the related registers for both commanded and actual position together while anything is happening. On the commanded position side, you have the axis move command value, the motor move command value, and the instantaneous interpolated motor command value, with "pipelined" value in queues between the different stages. On the actual position side, you have the hardware encoder register, the motor software actual position value, and various offsets.


A mismatch at any stage of the processing will probably cause a fatal error.


There is no fundamental reason why applying the modulo operation to "extended" position value is not robust. There is no reason for it to "miss data" if properly applied.


If you can provide us with more information about exactly what you are trying to do in your rollover calculations, we should be able to give you suggestions.

Link to comment
Share on other sites



below you can see a piece of source code for position reading:


if (commInThread.SendCommand("#1.." + MAX_AXIS.ToString() + "p", out reponse) == Status.Ok)




string[] words = reponse[0].Split(delimiterChars);

for (int i = 0; i < MAX_AXIS; i++)


if (i == WIndex)


float Wpos = float.Parse(words);

axisPositions = Wpos%360inpulses;




axisPositions = float.Parse(words);




catch (Exception /*ex*/)


DebugPrint("DTDEBUG::UpdatePosLoop: error while reading position from the controller\n");




In case I move modulo operation to PLC program, the "p" command will return the value without modulo.

So, I'll be forced to make changes for special position reading of W axis in the software. May be you know the better

solution for such a case? Thanks!

Link to comment
Share on other sites

This topic is now closed to further replies.

  • Create New...