Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Counts per Unit in IDE 4
#1
Hello,

First: Sorry, if it sounds a little rough...its not meant to.

I've just tried the new version 4 of the PowerPMAC IDE.
For the last years I've used the version 3, and got used to some bugs here and there.
Now for a new project we wanted to switch to the new IDE, but aside from some disturbing things (No Encoder setup...), I've stumbled over a "big" problem.

We are using the PMAC to control telescopes.
I'm using counts as motor units. But at the end we need usually degrees or some other unit. But not inside the PMAC.
Up until now the "Position Window" in the IDE had the possiblity to modify the displayed "counts per motor unit" - WITH fractional values.
E.g. I have an encoder which has 20480/360 = 56.8888889 counts per degree.

This was purely cosmetic and in the IDE v3 this was possible.
In the new v4 the modification window does not accept fractional values.
So essentially this is not possible as far as I can see.

After looking deeper in the manual and the IDE, one additional thing:
It seems this fuction is not possible, at least not at "the old position".
But:
I DON'T want the Motor[x]PosSF changed! The "User Units Setup" inside the motor setup changes all these values.
I just want the position window display a converted value of the current motor units.
ONLY in the Position Window.

Now my question:
Is this "change of displayed values" still somehow possible in v4?

If yes: How its done?
If no: Why?

Greetings,
Uno
Reply
#2
The User Units section of motor setup is for scaling motor units with Motor[x].PosSf.

To Change the scale on the position window:
1. Select the box or boxes you want to alter and right on one of them. To select multiple boxes, click on the first box and hold shift while clicking the last.
2. Change the number in the "motor units" box. Your motor position will be devided by this number.
3. You may want to change the display units, for example to mm. This will not auto-scale the displayed position.
4. You may also want to change the time units. This will auto-scale the displayed position.

There was also a bug in previous IDE versions that would make the "motor units" box be greyed out. Update to IDE version 4.2.1.19 if you experience this issue.


Attached Files Image(s)
   
Reply
#3
(03-06-2019, 11:26 AM)Eric Hotchkiss Wrote: The User Units section of motor setup is for scaling motor units with Motor[x].PosSf.

To Change the scale on the position window:
1. Select the box or boxes you want to alter and right on one of them. To select multiple boxes, click on the first box and hold shift while clicking the last.
2. Change the number in the "motor units" box. Your motor position will be devided by this number.
3. You may want to change the display units, for example to mm. This will not auto-scale the displayed position.
4. You may also want to change the time units. This will auto-scale the displayed position.

There was also a bug in previous IDE versions that would make the "motor units" box be greyed out. Update to IDE version 4.2.1.19 if you experience this issue.

Hello Eric,

thanks for the quick response.
But you described exactly the problem:
Such an settings window you attached existed also in IDE v3. The difference is,
that in v3 I could input in this factor as a floating point.
In my current case I want to display 56.88889 counts as one unit displayed.

In the IDE v4 I could enter 56.889 or 56,889 and always it is changed to 568889.
So then I get displayed 0.062613 degrees instead of 62,613 degrees.

I hope you see my problem.

Is this only a bug, or is there some intention behind this decision, to allow only integer values in this conversion? After all this unit conversion could be used until now for arbitrary mappings from motor units to user units (as it would be possible with the ScalingFactors of the motor)

Greetings,
Uno
(aka Georg Luthardt)


Attached Files Image(s)
   
Reply
#4
Are you using the latest 4.2.1.19 update? I can enter 56.88889 and it works correctly. It displays as 56.889 after enter is pressed but it appears to use the whole value that was type in.
Reply
#5
(03-07-2019, 05:34 AM)Tony Wrote: Are you using the latest 4.2.1.19 update? I can enter 56.88889 and it works correctly. It displays as 56.889 after enter is pressed but it appears to use the whole value that was type in.

Hello Tony,

tanks for trying.
After your "successful possible" message I fiddled a bit more.

It seems ,that there is a problem with language settings.

The whole Situation for others with this problem:
I'm using an english language windows, but with the region format set to Germany.
Now while programming, I'm using a dot as decimal separator.
I tried this in the position window. It was changed from 56.8889 -> 568889.
I tried the german version with comma. It was changed from 56,8889 -> 568889.

No I've changed the language inside the IDE from "from windows" to explicit English.
After this change, the 56.8889 input is correctly taken and the scaling is right.

It looks to me, that the IDE has some problems with the different number formats. It thinks from windows (german number format) -> ok, dot is bad. But it also does not accept the comma somehow.

After the forced language setting to english, it works...
for now.

So perhaps this is a (temporary) solution. Although it is a problem which should not occur.

Thank your for the help in finding this solution...I hope the main problem which is responsible here, gets fixed in the future.

Greetings,
Uno
Reply
#6
Uno,

I can see what I believe is the same issue with my IDE language set to Spanish. When I set my windows region format to "German (Germany)", set the IDE language to windows default and restart the IDE, the position window seems to work the same as English.

Is this an English installation of windows with that setting changed, or a German installation?
Reply
#7
(03-07-2019, 11:22 AM)Eric Hotchkiss Wrote: Uno,

I can see what I believe is the same issue with my IDE language set to Spanish. When I set my windows region format to "German (Germany)", set the IDE language to windows default and restart the IDE, the position window seems to work the same as English.

Is this an English installation of windows with that setting changed, or a German installation?

Hello Eric,

sorry for the late reply, I had a bit of vacation :)

I'm using a english windows 10, but have the region format switch to "Germany" to have the date and some other number related stuff right.
But Region Settings in windows are a big problem, and I think its getting worse with every version.
For example: In Acrobat Reader I can switch the Paper format from letter to Din A4, but after I close the program, this setting is gone. Somehow Acrobat is assuming some settings derived from some language settings...
The same goes for Libre Office, but I think there is at least some setting no to set the decimal separator on the number pad.

To come to your question again:
Usually I have windows configured windows in English (US), and the "Format" under "Region" in the control panel is set to Germany. The Language for non unicode programs is set to English (US)
The main problem with this constellation in many programs is the different decimal separator: English its a dot, German its a comma.

Some of these settings are only really applied after a reboot or re-login, I think.

Anyway, now it works. :)
Reply
#8
Thanks for the reply. I've forwarded the additional information to our software team.
Reply
#9
Hi I have a similar case.
I was using virtual motors to test my program and the Position window was showing me the correct motors positions, after updating from IDE 3 to 4, the position window show the position divided by 69905 and the option to change this number is grayed out.
when checking the position from the terminal it's the correct number. only the position window shows this number.

the following code is used to setup the virtual motors.

Code:
L0=1


Ldata.Motor=L0
//DKILL
Motor[L0].Ctrl=Sys.PidCtrl    // This can be set to Sys.ServoCtrl for using advanced filters. Sys.PidCtrl adds less CPU load in comparison.
Motor[L0].ServoCtrl=1    //this value should be larger than 0 for the motor to be activated and used in application.
Motor[L0].pAmpEnable=0    //If no amplifier-enable flag is used  for the motor, this element should be set to 0, disabling the function for the motor.
Motor[L0].pAmpFault=0    //If no amplifier-fault flag is used  for the motor, this element should be set to 0, disabling the function for the motor.
Motor[L0].pLimits=0    //If no hardware overtravel limit flags are used for the motor, this element should be set to 0, disabling the function for the motor.
Motor[L0].pEnc=EncTable[L0].a    // specifies the address of the register Power PMAC reads for the ongoing outerloop feedback for the motor. The outer loop is virtually always the position loop for the motor.
Motor[L0].pEnc2=EncTable[L0].a    //specifies the address of the register Power PMAC reads for the ongoing innerloop feedback for the motor. The inner loop is virtually always the velocity loop for the motor.
Motor[L0].pDac=Sys.Idata[L0].a    //instructs Power PMAC where to place its output command value(s) for Motor by specifying the address of the register. Sys.Idata is a 32-bit signed integer user shared memory buffer.
EncTable[L0].type=11
EncTable[L0].pEnc=Motor[L0].IqCmd.a
EncTable[L0].pEnc1=Sys.pushm
EncTable[L0].index1=0
EncTable[L0].index2=0
EncTable[L0].index3=0
EncTable[L0].index4=1
EncTable[L0].index5=255
EncTable[L0].ScaleFactor=1/(256*(EncTable[L0].index5+1))
Motor[L0].PosSf=360/(24*exp2(20))
Motor[L0].Pos2Sf=360/(24*exp2(20))
//Motor[L0].Pos=10    //power-on servo position
Motor[L0].AbsPosFormat = $00002000    // have 32-bit signed register for simulated encoder

Motor[L0].AbsPosSf = 1 // want 1 to 1 in this register
Motor[L0].HomeOffset = 0 // no offset

//Motor[L0].pAbsPos = Sys.UData[100].a

//Motor[L0].HomePos=150
Motor[L0].Ctrl=Sys.ServoCtrl
Motor[L0].FatalFeLimit=10
Motor[L0].WarnFeLimit=5

// Adjust the following values based upon the application

Motor[L0].MotorTa=10000
Motor[L0].MotorTs=1000
Motor[L0].MaxSpeed=0.172
Motor[L0].JogSpeed=0.005
Motor[L0].InvAmax=1/5.471960662E-4
Motor[L0].InvJmax=1/5.471960662E-4
Motor[L0].InvDmax=1/5.471960662E-4
Motor[L0].JogTa=0
Motor[L0].JogTs=250
Motor[L0].InPosBand=0.0005
Motor[L0].InPosTime=9

Motor[L0].Servo.Ke1=0
Motor[L0].Servo.Ke2=0
Motor[L0].Servo.Kf1=0
Motor[L0].Servo.Kf2=0
Motor[L0].Servo.Ka0=1
Motor[L0].Servo.Ka1=0
Motor[L0].Servo.Ka2=0
Motor[L0].Servo.Ka3=0
Motor[L0].Servo.Ka4=0
Motor[L0].Servo.Ka5=0
Motor[L0].Servo.Ka6=0
Motor[L0].Servo.Ka7=0
Motor[L0].Servo.Kb0=1
Motor[L0].Servo.Kb1=0
Motor[L0].Servo.Kb2=0
Motor[L0].Servo.Kb3=0
Motor[L0].Servo.Kb4=0
Motor[L0].Servo.Kb5=0
Motor[L0].Servo.Kb6=0
Motor[L0].Servo.Kb7=0
Motor[L0].Servo.Kc1=0
Motor[L0].Servo.Kc2=0
Motor[L0].Servo.Kc3=0
Motor[L0].Servo.Kc4=0
Motor[L0].Servo.Kc5=0
Motor[L0].Servo.Kc6=0
Motor[L0].Servo.Kc7=0
Motor[L0].Servo.Kd1=0
Motor[L0].Servo.Kd2=0
Motor[L0].Servo.Kd3=0
Motor[L0].Servo.Kd4=0
Motor[L0].Servo.Kd5=0
Motor[L0].Servo.Kd6=0
Motor[L0].Servo.Kd7=0
Motor[L0].Servo.Kp=8000
Motor[L0].Servo.Kvifb=0
Motor[L0].Servo.Kviff=0
Motor[L0].Servo.Kvfb=0
Motor[L0].Servo.Kvff=69905.055
Motor[L0].Servo.Kafb=0
Motor[L0].Servo.Kaff=69905.055
Motor[L0].Servo.Ki=9.9999997e-5
Motor[L0].Servo.Kfff=0
Motor[L0].Servo.MaxPosErr=10000
Motor[L0].Servo.MaxInt=28000
Motor[L0].Servo.BreakPosErr=0
Motor[L0].Servo.Kbreak=0
Motor[L0].Servo.OutDbOn=0
Motor[L0].Servo.OutDbOff=0
Motor[L0].Servo.OutDbSeed=0
Motor[L0].Servo.SwPoly7=0
Motor[L0].Servo.SwFffInt=0
Motor[L0].Servo.SwZvInt=0
Motor[L0].Servo.Kxpg=0
Motor[L0].Servo.Kxvg=0
Motor[L0].Servo.Kxig=0
Motor[L0].Servo.EstTime=0
Motor[L0].Servo.EstMinDac=0
Motor[L0].Servo.NominalGain=0
Motor[L0].Servo.MinGainFactor=1
Motor[L0].Servo.MaxGainFactor=1
Motor[L0].Servo.MaxW=0
Motor[L0].Servo.MaxDR=0
Motor[L0].Servo.MinW=0
Motor[L0].Servo.MinDR=0


Attached Files Image(s)
   
Reply
#10
I believe I gave an incomplete answer before.

The intended behavior is that is Motor[x].PosSf=1, you can put any number you want in the box. If PosSf != 1, then the box is grayed out and displays 1/Motor[x].PosSf. If this is the case, motor units will be displayed.

In previous IDE versions, the box could be grayed out accidentally, so make sure you are on at least version 4.2.1.19.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)