30 Jan 2019 20:02 #125327
Hello.

I want to read out a servo controller to display the load of the axis in Linuxcnc.
The Controller is connected via Modbus in CL and the connection works.
So i read out the adress 1546. The Servo will output a value between -100 - +100 in HEX.
So the Values from 0-100 are working fine, but if the controller puts anything out with a -,
then i get in the CL values in the range of 65535.
How can I set it up, that the value is always positiv?

Best regards
Marcel

30 Jan 2019 20:22 #125330 by Grotius
HEX <-> BINARY <-> SIGN
0-7 <-> 0000-0111 <-> pos
8-F <-> 1000-1111 <-> neg

Negative value's cannot be shown positive, unless you add a formula *-1

30 Jan 2019 21:08 #125342
Hello,

HEX <-> BINARY <-> SIGN
0-7 <-> 0000-0111 <-> pos
8-F <-> 1000-1111 <-> neg

What do you mean with this?

If i define the value to be absolute, then it would be only positiv, right?
With a formula *-1, then my positiv values would become negativ?

Best regards
Marcel

06 Feb 2019 22:40 #125887
OK,
i´ve got it to work:

I first compare the input value from %Q0, if the input value is <2000, then i output the value on %QW1.
So I have the Imput from 0-100 on %Q0 -> 0-100 on %QW1.

With a nother comparisson I check if the value from %Q0 is > 2001.
If this is true, a use a assignment: %QW1=65535-%Q0.
So when the servo puts out -10, on %Q0 I have a value of 65525.
And 65535-35525=10, so I have on %QW1=10.

Now I have tried to run classicladder without the gui,
so I have written in the .hal:
But the CL doesn´t load, it only loads without the --nogui in the .hal...
What have I wrong?

Best regards

Marcel

07 Feb 2019 00:42 #125898 by cmorley
Modbus requires the gui to run.
Use the HAL pin hidegui (something like that) to hide the gui

Also I am pretty sure CL has an absolute command:
Might do what you want.

Chris M

07 Feb 2019 08:56 #125911
Ok,i will later look at this.

With ABS I had no sucess. But I think it is a error of the servo, who send wrong numbers. Have read out the servo with another modbus programm, it also shows , that for example the servo should output -10, I get a value of 5525 on modbus.

07 Feb 2019 17:13 #125933
Are the two bytes inverted?
Means high and low bytes inverted?

07 Feb 2019 18:52 #125940
Hello,

two bytes inverted?
The Servo response from high to low, if this is what you mean?

Best regards
Marcel

07 Feb 2019 19:43 #125947 by rodw

MATZE-ATZE-SCH wrote: Hello,

two bytes inverted?
The Servo response from high to low, if this is what you mean?

Best regards
Marcel

I think Mike means the hardware could store numbers in a high byte,low byte order when the PC is low byte, high byte order.

If that is the case in hexadecimal numbers for decimal 10 (forget the sign for now)
low byte 000A 0000 becomes high byte 0000 000A which is several magnitudes of order larger!

08 Feb 2019 17:04 #126011
OK,

but I don think that is the error.
If this will be the case, the values would only be offset, right?

But if I look at the Servo drive,
if there is -1, the value in Modbus is 65536,
if there is -10, the value in Modbus is 65526 etc.
So it is going only in the wrong direction.

In the manual of the servo it is high bit low bit.
But what a order expect Classicladder?

Best regards
Marcel