Spindle speed in Counterclockwise Wrong

  • Donno
  • Donno's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
26 Apr 2023 17:59 #269990 by Donno
I am setting and getting the spindle speed using Modbus. I use to get the spingde speed from Encoder A and Encoder B but need more input pins so i decided to get spindle speed using Modbus. Clockwise works as expected :

 

When doing counterclockwise :

 
 
 

It seems to get a signed int and displays an unsigned int

How could i convert/change to correct value ? Here is my current code

Hal File
...
loadusr -W mb2hal config=mb2hal.ini
...
loadrt limit1 count=1
addf limit1.0 servo-thread
setp limit1.0.min -2500
setp limit1.0.max 2500
...
net spindle-cmd-rpm => limit1.0.in
net spindle-speed-limit limit1.0.out => mb2hal.SetSpeed.00
net spindle-cmd-rpm-abs <= mb2hal.GetSpeed.00.float
...

mb2hal.ini
[MB2HAL_INIT]

INIT_DEBUG=3
HAL_MODULE_NAME=mb2hal
SLOWDOWN=0.0
TOTAL_TRANSACTIONS=2

[TRANSACTION_00]

LINK_TYPE=serial
SERIAL_PORT=/dev/ttyUSB0
SERIAL_BAUD=19200
SERIAL_BITS=8
SERIAL_PARITY=even
SERIAL_STOP=1
SERIAL_DELAY_MS=10
MB_SLAVE_ID=1
FIRST_ELEMENT=321
NELEMENTS=1
MB_TX_CODE=fnct_16_write_multiple_registers
MB_RESPONSE_TIMEOUT_MS=500
MB_BYTE_TIMEOUT_MS=500

HAL_TX_NAME=SetSpeed
MAX_UPDATE_RATE=0.0
DEBUG=1

[TRANSACTION_01]
MB_TX_CODE=fnct_03_read_holding_registers
FIRST_ELEMENT=449
NELEMENTS=1
HAL_TX_NAME=GetSpeed
MAX_UPDATE_RATE=0.0
DEBUG=1
Thanks for your attention. I'm looking forward to your reply.
Attachments:

Please Log in or Create an account to join the conversation.

More
26 Apr 2023 19:07 #269993 by JPL
Replied by JPL on topic Spindle speed in Counterclockwise Wrong
I'm pretty sure that the problem is about how (negative) numbers are internally formatted. If I remember correctly you need to send 2s complement signed numbers. I've had the same problem a while ago with an HMI via modbus but in my case this was easily solved since the HMI was able to 'read' 2s complement directly.

You then have 2 options: Either see if your VFD can directly send 2s complement values or find a way to convert the formatting. Sadly I cannot help much with the later.

Some info here: www.electronics-tutorials.ws/binary/signed-binary-numbers.html
 

Please Log in or Create an account to join the conversation.

More
26 Apr 2023 19:21 #269994 by JPL
Replied by JPL on topic Spindle speed in Counterclockwise Wrong
This could work: linuxcnc.org/docs/html/man/man9/conv_u32_s32.9.html

If not have a look at the others components starting with 'conv' here: linuxcnc.org/docs/html/man/man9/

 

Please Log in or Create an account to join the conversation.

  • Donno
  • Donno's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
26 Apr 2023 19:56 - 26 Apr 2023 20:11 #269996 by Donno
Replied by Donno on topic Spindle speed in Counterclockwise Wrong
When I
setp conv-u32-s32.0.in mb2hal.GetSpeed.00.float
I get following error
value 'mb2hal.GetSpeed.00.float' invalid for U32

I also tried conv_float_s32 :
setp conv-float-s32.0.in mb2hal.GetSpeed.00.float
with no luck
setp failed setting parameter 'conv-float-s32.0.in' to 'mb2hal.GetSpeed.00.float' value 'mb2hal.GetSpeed.00.float' invalid for float
Last edit: 26 Apr 2023 20:11 by Donno. Reason: typo

Please Log in or Create an account to join the conversation.

More
26 Apr 2023 20:56 - 26 Apr 2023 20:57 #270006 by JPL
Replied by JPL on topic Spindle speed in Counterclockwise Wrong
For some reason sometimes you have to create a new signal (or use an existing one) instead of using setp when connecting pins. (This is somewhere in the HAL doc)

For example: setp conv-u32-s32.0.in mb2hal.GetSpeed.00.float        Does NOT work

Try instead
net speed-u32 <= mb2hal.GetSpeed.00.float
net speed-u32 => conv-u32-s32.0.in
net speed-s32 <= conv-u32-s32.0.out

likewise for conv-float-s32
Last edit: 26 Apr 2023 20:57 by JPL.

Please Log in or Create an account to join the conversation.

More
26 Apr 2023 21:00 #270007 by JPL
Replied by JPL on topic Spindle speed in Counterclockwise Wrong
Or the short version

net speed-u32  mb2hal.GetSpeed.00.float => conv-u32-s32.0.in

Please Log in or Create an account to join the conversation.

  • Donno
  • Donno's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
27 Apr 2023 06:11 #270034 by Donno
Replied by Donno on topic Spindle speed in Counterclockwise Wrong
net speed-u32  mb2hal.GetSpeed.00.float => conv-u32-s32.0.in
I still get an error
Signal 'speed-u32' of type 'float' cannot add pin 'conv-u32-s32.0.in' of type 'u32'

This is the code how i added the component
loadrt conv_u32_s32 count=1

Please Log in or Create an account to join the conversation.

  • Donno
  • Donno's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
27 Apr 2023 06:24 #270037 by Donno
Replied by Donno on topic Spindle speed in Counterclockwise Wrong
I manage to get the linuxcnc going with
loadrt conv_float_s32  count=1
net speed-u32  mb2hal.GetSpeed.00.float => conv-float-s32.0.in

But it did not manage to solve my problem

 

Is there a way to do math in .hal file. So If mb2hal.GetSpeed.00.float  > 32 000 then -1(mb2hal.GetSpeed.00.float-65,535) that will solve my problem
Attachments:

Please Log in or Create an account to join the conversation.

  • Donno
  • Donno's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
27 Apr 2023 10:51 #270055 by Donno
Replied by Donno on topic Spindle speed in Counterclockwise Wrong
I started working on a formula So If mb2hal.GetSpeed.00.float  > 32767 then -1(mb2hal.GetSpeed.00.float-65,535)
setp sum2.0.in1 -65536
net sum-speed mb2hal.GetSpeed.00.float => sum2.0.in0
setp mult2.0.in1 -1
net multi-speed mult2.0.in0 => sum2.0.out
setp comp.0.in0 32767
net compare comp.0.in1 => mult2.0.out
net neg-speed mux2.0.in0 => comp.0.in1
net pos-speed mux2.0.in1 => mb2hal.GetSpeed.00.float
net sel-speed mux2.0.sel => comp.0.out
net spindle-cmd-rpm-abs <= mux2.0.out

but i am getting stuck at
net neg-speed mux2.0.in0 => comp.0.in1
net pos-speed mux2.0.in1 => mb2hal.GetSpeed.00.float

Pin 'comp.0.in1' was already linked to signal 'compare'

Please Log in or Create an account to join the conversation.

More
27 Apr 2023 11:37 #270058 by 0x2102
Replied by 0x2102 on topic Spindle speed in Counterclockwise Wrong
Hallo Donno,

attached is a simple component that should do exactly what you need.

1.) Download and copy to your config folder
2.) Open terminal and cd to your config folder
3.) "sudo halcompile --install spindle_speed.comp" (linuxcnc-dev apt package required for this)
4.) add the following to your machine.hal

loadrt spindle_speed names=spindle-speed
addf spindle-speed      servo-thread

5.) Create your net connections 
Attachments:
The following user(s) said Thank You: Donno, JPL

Please Log in or Create an account to join the conversation.

Time to create page: 0.257 seconds
Powered by Kunena Forum