- Configuring LinuxCNC
- Configuration Tools
- PnCConf Wizard
- Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
19 Aug 2018 06:41 #116291
by tecno
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Hi Rod,
Still hangs on 'for'
Still hangs on 'for'
Please Log in or Create an account to join the conversation.
19 Aug 2018 08:15 #116292
by tecno
After your edit
Line 46 = mixed declarations
gearengaded is undeclared
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Its best practice to define variables at the head of the function. The exception might be if you have a low memory environment.
I don't think the halcompile environment likes a definition of the loop variable in the for statement. Also you are mixing types by assigning an int (geartouse) to a long (eg. S32) so try this:
FUNCTION(_) { static double speeds[7][2] = { { 160.0, 80.0}, { 270.0, 160.0}, { 450.0, 270.0}, { 750.0, 450.0}, {1250.0, 750.0}, {1500.0, 1250.0}, {2500.0, 1500.0}, }; // Gears are number from 1 (lowest) to 7 // Check which gear to use with this speed Sxxx long geartouse = -1; int i; for (i=0; i<7; i++) { if (speed <= speeds[i][0] && speed > speeds[i][1]) geartouse = (long) i+1L; } // Which gear is engaged int gearengaged = 1*input_a + 2*input_b + 3*input_c + 4*input_d + 5*input_e + 5*higear; if (geartouse == gearengaged) { // Everything ok gearshift = 0; wantedgear = gearengaged; speedratio = speed/speeds[gearenaged-1][0]; } else { // Should change gear gearshift = 1; wantedgear = geartouse; speedratio = speed/speeds[(int)geartouse-1][0]; } }
I'm not sure if halcompile will like 1L which signifies 1 is a long type. If it complains, try "(long) 1" instead
OOPS just edited as an explicit typedef is required on the line where speedratio is defined.
After your edit
Line 46 = mixed declarations
gearengaded is undeclared
Please Log in or Create an account to join the conversation.
19 Aug 2018 09:08 - 19 Aug 2018 09:22 #116293
by Hakan
Replied by Hakan on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
I added the ratios here and started with a very rudimentary error check on the inputs. Also the enable_in/out signal added.
It compiles fine here on "master".
It compiles fine here on "master".
component gearbox3 "LinuxCNC HAL component for Tecno's gearbox";
author "Rod Webster Hakan Bastedt";
pin in bit input_a "input a";
pin in bit input_b "input b";
pin in bit input_c "input c";
pin in bit input_d "input d";
pin in bit input_e "input e";
pin in bit higear "true if in high gear";
pin in bit enable_in "Enable signal. Input";
pin out bit enable_out "Enable signal. Output";
pin in float speed "Spindle speed in RPM as in Sxxx";
pin out bit gearshift "Need to shift gear, true if high";
pin out s32 wantedgear "Shift to this gear if told so";
pin out float speedratio "max RPM for machine divided by maximum RPM for gear";
param rw float maxrpm "maximum RPM for machine";
function _;
license "GPL";
;;
#include <rtapi_math.h>
FUNCTION(_) {
// Gears are number from 1 (lowest) to 7
static double speeds[7][2] = {
{ 160.0, 80.0},
{ 270.0, 160.0},
{ 450.0, 270.0},
{ 750.0, 450.0},
{1250.0, 750.0},
{1500.0, 1250.0},
{2500.0, 1500.0},
};
static double ratios[7] = {
0.064, 0.108, 0.18, 0.3, 0.5, 0.6, 1.0};
// Check which gear to use with this speed Sxxx
int geartouse = -1;
int i;
for (i=0; i<7; i++) {
if (speed <= speeds[i][0] && speed > speeds[i][1])
geartouse = i+1;
}
// Is at least one of the inputs active? Calculate gear from inputs.
int inputs_sum = 1*input_a + 2*input_b + 3*input_c + 4*input_d + 5*input_e;
int gearengaged;
if (higear)
gearengaged = inputs_sum + 2; // inputs_sum 4,5 => gear 6,7
else
gearengaged = inputs_sum; // inputs_sum 1,2,3,4,5 => gear 1,2,3,4,5
if (inputs_sum > 0 && geartouse == gearengaged) { // Everything ok
gearshift = 0;
wantedgear = gearengaged;
speedratio = ratios[gearengaged-1];
enable_out = enable_in;
} else { // Should change gear
gearshift = 1;
wantedgear = geartouse;
speedratio = ratios[geartouse-1];
enable_out = 0;
}
}
$ halcompile --compile gearbox3.comp
Compiling realtime gearbox3.c
Linking gearbox3.so
$
Last edit: 19 Aug 2018 09:22 by Hakan.
Please Log in or Create an account to join the conversation.
19 Aug 2018 09:24 #116294
by tecno
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Does not compile here on 2.7.14
component gearbox3 "LinuxCNC HAL component for Tecno's gearbox";
author "Rod Webster Håkan Båstedt";
pin in bit input_a "input a";
pin in bit input_b "input b";
pin in bit input_c "input c";
pin in bit input_d "input d";
pin in bit input_e "input e";
pin in bit higear "true if in high gear";
pin in bit enable_in "Enable signal. Input";
pin out bit enable_out "Enable signal. Output";
pin in float speed "Spindle speed in RPM as in Sxxx";
pin out bit gearshift "Need to shift gear, true if high";
pin out s32 wantedgear "Shift to this gear if told so";
pin out float speedratio "max RPM for machine divided by maximum RPM for gear";
param rw float maxrpm "maximum RPM for machine";
function _;
license "GPL";
;;
#include <rtapi_math.h>
FUNCTION(_) {
// Gears are number from 1 (lowest) to 7
static double speeds[7][2] = {
{ 160.0, 80.0},
{ 270.0, 160.0},
{ 450.0, 270.0},
{ 750.0, 450.0},
{1250.0, 750.0},
{1500.0, 1250.0},
{2500.0, 1500.0},
};
static double ratios[7] = {
0.064, 0.108, 0.18, 0.3, 0.5, 0.6, 1.0};
// Check which gear to use with this speed Sxxx
int geartouse = -1;
int i;
for (i=0; i<7; i++) {
if (speed <= speeds[i][0] && speed > speeds[i][1])
geartouse = i+1;
}
// Is at least one of the inputs active? Calculate gear from inputs.
int inputs_sum = 1*input_a + 2*input_b + 3*input_c + 4*input_d + 5*input_e;
int gearengaged;
if (higear)
gearengaged = inputs_sum + 2; // inputs_sum 4,5 => gear 6,7
else
gearengaged = inputs_sum; // inputs_sum 1,2,3,4,5 => gear 1,2,3,4,5
if (inputs_sum > 0 && geartouse == gearengaged) { // Everything ok
gearshift = 0;
wantedgear = gearengaged;
speedratio = ratios[gearengaged-1];
enable_out = enable_in;
} else { // Should change gear
gearshift = 1;
wantedgear = geartouse;
speedratio = ratios[geartouse-1];
enable_out = 0;
}
}
bengt@debian:~/linuxcnc/configs/sim.gmoccapy$ halcompile --compile gearbox3.comp
make KBUILD_EXTRA_SYMBOLS=/usr/realtime-3.4-9-rtai-686-pae/modules/linuxcnc/Module.symvers -C /usr/src/linux-headers-3.4-9-rtai-686-pae SUBDIRS=`pwd` CC=gcc V=0 modules
make[1]: Entering directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
CC [M] /tmp/tmpQ__mt1/gearbox3.o
gearbox3.comp: In function ‘_’:
gearbox3.comp:48:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/tmpQ__mt1/gearbox3.mod.o
LD [M] /tmp/tmpQ__mt1/gearbox3.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
bengt@debian:~/linuxcnc/configs/sim.gmoccapy$
Please Log in or Create an account to join the conversation.
19 Aug 2018 09:31 - 19 Aug 2018 09:32 #116295
by Hakan
Replied by Hakan on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Ok, I think i am a bit C++-centric.
Changeto
Also change the line with inputs_sum.
Change
int geartouse = -1;
int geartouse;
geartouse = -1;
Also change the line with inputs_sum.
Last edit: 19 Aug 2018 09:32 by Hakan.
Please Log in or Create an account to join the conversation.
19 Aug 2018 09:33 - 19 Aug 2018 09:34 #116296
by tecno
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
bengt@debian:~/linuxcnc/configs/sim.gmoccapy$ halcompile --compile gearbox3.compmake KBUILD_EXTRA_SYMBOLS=/usr/realtime-3.4-9-rtai-686-pae/modules/linuxcnc/Module.symvers -C /usr/src/linux-headers-3.4-9-rtai-686-pae SUBDIRS=`pwd` CC=gcc V=0 modules
make[1]: Entering directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
CC [M] /tmp/tmpMfZqkR/gearbox3.o
gearbox3.comp: In function ‘_’:
gearbox3.comp:42:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
gearbox3.comp:49:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/tmpMfZqkR/gearbox3.mod.o
LD [M] /tmp/tmpMfZqkR/gearbox3.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
bengt@debian:~/linuxcnc/configs/sim.gmoccapy$
make[1]: Entering directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
CC [M] /tmp/tmpMfZqkR/gearbox3.o
gearbox3.comp: In function ‘_’:
gearbox3.comp:42:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
gearbox3.comp:49:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/tmpMfZqkR/gearbox3.mod.o
LD [M] /tmp/tmpMfZqkR/gearbox3.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
bengt@debian:~/linuxcnc/configs/sim.gmoccapy$
Last edit: 19 Aug 2018 09:34 by tecno.
Please Log in or Create an account to join the conversation.
19 Aug 2018 09:37 - 19 Aug 2018 09:37 #116299
by Hakan
Replied by Hakan on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
And move declarations ofto before the for loop, together with the other declarations.
inputs_sum
gearengaged
Last edit: 19 Aug 2018 09:37 by Hakan.
Please Log in or Create an account to join the conversation.
19 Aug 2018 09:52 #116300
by tecno
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Now it compiled, did move int i;
FUNCTION(_) {
int i;
FUNCTION(_) {
int i;
bengt@debian:~/linuxcnc/configs/sim.gmoccapy$ halcompile --compile gearbox3.compmake KBUILD_EXTRA_SYMBOLS=/usr/realtime-3.4-9-rtai-686-pae/modules/linuxcnc/Module.symvers -C /usr/src/linux-headers-3.4-9-rtai-686-pae SUBDIRS=`pwd` CC=gcc V=0 modules
make[1]: Entering directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
CC [M] /tmp/tmpWxGYMf/gearbox3.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/tmpWxGYMf/gearbox3.mod.o
LD [M] /tmp/tmpWxGYMf/gearbox3.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
bengt@debian:~/linuxcnc/configs/sim.gmoccapy$
Please Log in or Create an account to join the conversation.
19 Aug 2018 10:03 #116301
by rodw
Replied by rodw on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
You guys have still got a type mismatch on this lineassigning an int to an s32 which is a long. Refer my earlier post.
I've never had a problem with this style in components.IF its not compiling or its generating compiler warnings that a syntax error in your code
wantedgear = geartouse;
I've never had a problem with this style in components.
int geartouse = -1;
Please Log in or Create an account to join the conversation.
19 Aug 2018 10:08 #116302
by tecno
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
But it compiled as per last edits.
Please Log in or Create an account to join the conversation.
Moderators: cmorley
- Configuring LinuxCNC
- Configuration Tools
- PnCConf Wizard
- Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Time to create page: 0.222 seconds