Re: [Emc-users] Controlling LinuxCNC externally with C++ program

2013-11-04 Thread Jeff Epler
On Sun, Nov 03, 2013 at 09:12:06AM -0700, Sebastian Kuzminsky wrote:
 Then in linuxcncrsh you can read HAL pins  signals like this:
 
 set mdi (debug, #_hal[axis.1.f-error-lim])
 get operator_display
 OPERATOR_DISPLAY  0.01

Personally, I discourage use of this feature, because it ignores one of
the main points of linuxcnc's hal: the relationship between pins is
created not by hardcoding the name of the pin whose value you are
interested in in your program, but by allowing the user/integrator to
connect pins to other pins via signals.

As a concrete example: suppose you have some kind of signal you want to
wait on from gcode.  If you have a O-while loop on
#_hal[parport.0.pin-10-in then your part programs are not portable to
a machine which uses mesa hardware instead.

gcode provides proper access to digital and analog inputs and outputs
via M62 through M67.  These correspond to pins on the motion controller
that you can properly connect via hal 'net' commands.

Jeff

--
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951iu=/4140/ostg.clktrk
___
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users


Re: [Emc-users] Controlling LinuxCNC externally with C++ program

2013-11-04 Thread andy pugh
On 4 November 2013 13:33, Jeff Epler jep...@unpythonic.net wrote:

 set mdi (debug, #_hal[axis.1.f-error-lim])
 get operator_display
 OPERATOR_DISPLAY  0.01

 Personally, I discourage use of this feature, because it ignores one of
 the main points of linuxcnc's hal:
...
 As a concrete example: suppose you have some kind of signal you want to
 wait on from gcode.  If you have a O-while loop on
 #_hal[parport.0.pin-10-in then your part programs are not portable to
 a machine which uses mesa hardware instead.

I am not sure if the feature can read signals as well as pins.
Using a signal would address the portability problem.

I see your point, but also suspect that any setup using this system
with this degree G-code-to-HAL linkage is likely to be rather
importable anyway.

I used this for my lathe macros as an easy way to get values from a
GladeVCP GUI into G-code. Reading the spinbox values into G-code
without any hal-coding being needed suited my laziness, while
admittedly undermining the whole point of HAL being the mediator of
data transactions. I guess I should at the very least have had the
G-code reading signal values so that there was the option of
re-directing them.

-- 
atp
If you can't fix it, you don't own it.
http://www.ifixit.com/Manifesto

--
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951iu=/4140/ostg.clktrk
___
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users


Re: [Emc-users] Controlling LinuxCNC externally with C++ program

2013-11-03 Thread Walter Cigana
Hi again,

So, I have played with the xemc.cc code to uncover some C++ interfaces and
I have also played with using linuxcncrsh to control remotely, which is
obviously simpler.

In my situation, I also need to monitor an analog input which will return a
voltage.

I have an example of doing something similar in Axis, with signals defined
in the HAL file and the appropriate overlay file definition.

Is there a way of accessing this same type of data through linuxcncrsh, or
will I need to code this specific access myself?

thanks again,
Walter


On Mon, Oct 21, 2013 at 5:45 PM, Frank Tkalcevic 
fr...@franksworkshop.com.au wrote:

 As has been mentioned before, using linuxcncrsh may do all that you need.
 It can open files, start/stop runs, return status etc.

 It is a simple telnet interface, so you just need a socket connection and
 then send text commands down the line.  There is a Java example in the
 forum



 http://www.linuxcnc.org/index.php/english/forum/21-axis/21678-controlling-li
 nuxcncrsh-from-a-java-program

 Or, you can look at the linuxcncrsh source to see an example of remote
 control.

 Be careful though, the linuxcncrsh code has been changed so that it must be
 the only GUI.  If you try to run it with axis at the same time, linuxcnc
 will eventually fail.  The documentation still says that you can run it
 with
 axis.


 -Original Message-
 From: Walter Cigana [mailto:walter.cig...@gmail.com]
 Sent: Monday, 21 October 2013 5:22 PM
 To: Enhanced Machine Controller (EMC)
 Subject: [Emc-users] Controlling LinuxCNC externally with C++ program

 Hi all,

 I am still Learning LinuxCNC and I again have a few questions.

 I am trying to figure out the best way to drive LinuxCNC from a C++
 program.

 This program would receive general commands from the user, something
 like: execute procedure 1 and translate this into telling LinuxCNC to
 open
 a specific file and run the G-code therein.

 I saw that there is a Python interface:

 http://www.linuxcnc.org/docs/html/common/python-interface.html#_the_linuxcnc
 _python_module

 The doc states that Programmatic access to NML is through a C++ API;
 however, the most important parts of the NML interface to Linuxcnc are also
 available to Python programs through the linxuxcnc module.

 I do not really feel like learning Python, but I cannot find the C++ way to
 do this.  I have seen some documentation, but nothing specific and I cannot
 find any examples.

 Ideally, I could just use an API from my program.  Can someone point me in
 the right direction???

 thanks,
 Walter

 
 --
 October Webinars: Code for Performance
 Free Intel webinars can help you accelerate application performance.
 Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most
 from the latest Intel processors and coprocessors. See abstracts and
 register 
 http://pubads.g.doubleclick.net/gampad/clk?id=60135031iu=/4140/ostg.clktrk
 ___
 Emc-users mailing list
 Emc-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/emc-users



 --
 October Webinars: Code for Performance
 Free Intel webinars can help you accelerate application performance.
 Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most
 from
 the latest Intel processors and coprocessors. See abstracts and register 
 http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk
 ___
 Emc-users mailing list
 Emc-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/emc-users

--
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951iu=/4140/ostg.clktrk
___
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users


Re: [Emc-users] Controlling LinuxCNC externally with C++ program

2013-11-03 Thread Sebastian Kuzminsky
On 11/03/2013 08:04 AM, Walter Cigana wrote:
 So, I have played with the xemc.cc code to uncover some C++ interfaces and
 I have also played with using linuxcncrsh to control remotely, which is
 obviously simpler.

 In my situation, I also need to monitor an analog input which will return a
 voltage.

 I have an example of doing something similar in Axis, with signals defined
 in the HAL file and the appropriate overlay file definition.

 Is there a way of accessing this same type of data through linuxcncrsh, or
 will I need to code this specific access myself?

If you're on the master branch (not 2.5) you can do this.

In you .ini file, add this:
[RS274NGC]
FEATURES=8

Then in linuxcncrsh you can read HAL pins  signals like this:

set mdi (debug, #_hal[axis.1.f-error-lim])
get operator_display
OPERATOR_DISPLAY  0.01

Partial docs for this feature are here:

http://www.linuxcnc.org/docs/devel/html/remap/structure.html#_named_parameters_and_hal_items_a_id_remap_referto_hal_items_a
 



-- 
Sebastian Kuzminsky

--
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951iu=/4140/ostg.clktrk
___
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users


Re: [Emc-users] Controlling LinuxCNC externally with C++ program

2013-10-21 Thread Schooner
 I am trying to figure out the best way to drive LinuxCNC from a C++
 program.

 This program would receive general commands from the user, something
 like: execute procedure 1 and translate this into telling LinuxCNC to
 open a specific file and run the G-code therein.


If you are using Linuxcnc to control a CNC machine in the normal manner, 
but just want to be able to make it run a program from another 
application, axis-remote could be the simplest method from a system() call

There is even an Axis hack and modified axis-remote here
http://www.linuxcnc.org/index.php/english/forum/38-general-linuxcnc-questions/26061-automated-change-nc-program-possible#28920
 

which I wrote to allow a program to be loaded and then run remotely.

This was for someone who wanted to be able to script the generation of G 
Code to engrave incrementing serial numbers and then output it to Axis 
and automatically run the program.

You can write programs in C++ which directly control everything, I wrote 
Qt libraries which do that, but it is non trivial and depending upon 
what you wish to achieve, perhaps not necessary

If you want to dig into it, look at the sources for xemc, halui  
halcmd.  They will uncover most of the calls and show how they are used

regards

--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135031iu=/4140/ostg.clktrk
___
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users


Re: [Emc-users] Controlling LinuxCNC externally with C++ program

2013-10-21 Thread Jeff Epler
xemc.cc is a C++ program that uses the relevant APIs.  It is far from
being tutorial documentation, but at present we don't *have* any
tutorial documentation about using these APIs.

(such documentation would be a great contribution to LinuxCNC.  You
could start with a new page on the wiki and later work with someone like
John Thornton to get it integrated into the offical documentation.  if
you are so inclined)

Anyway, here's a complete program that uses the C++ interface to log the
position at about 10Hz:

#include emc.hh
#include emc_nml.hh
#include unistd.h
#include iostream
#include cstdlib

int main(int argc, char **argv) {
if(argc  2) { std::cerr  Usage:   argv[0]   NMLFILE\n; abort(); }
const char *nmlfile = argv[1];
RCS_STAT_CHANNEL *stat = new RCS_STAT_CHANNEL(emcFormat, emcStatus, 
xemc, nmlfile);
while(1) {
usleep(100*1000);
if(!stat-valid()) continue;
if(stat-peek() != EMC_STAT_TYPE) continue;
EMC_STAT *emcStatus = static_castEMC_STAT*(stat-get_address());
std::cout  emcStatus-motion.traj.position.tran.x   
 emcStatus-motion.traj.position.tran.y   
 emcStatus-motion.traj.position.tran.z  \n;
}
return 0;
}

In a run-in-place version of v2.5_branch it builds with this commandline:
g++ -o nml-position-logger nml-position-logger.cc -Iinclude -Llib -lnml 
-llinuxcnc
(and probably it will build from the package version if you have the -dev
package installed, but I didn't test this)

in master branch it looks like we have a regression so the commandline required 
is:
g++ -o nml-position-logger nml-position-logger.cc -Iinclude 
-Isrc/emc/rs274ngc  -Llib -lnml -llinuxcnc
and a -dev package will not include at least one of the required headers.

To use this program you would start linuxcnc with a traditional UI and
then execute the program with the path to linuxcnc.nml.  For example
if you're at the top dirctory of a run-in-place linuxcnc:
./nml-position-logger configs/common/linuxcnc.nml
.. press ctrl-c to exit.

To send commands you will use an RCS_CMD_CHANNEL:
// command channel
RCS_CMD_CHANNEL *cmd =
 new RCS_CMD_CHANNEL(emcFormat, emcCommand, xemc, file);
int emcCommandSerialNumber = 0;
and sending a command consists of something like
EMC_TASK_ABORT m;
m.serial_number = ++emcCommandSerialNumber;
// most commands have other fields that must be initialized
// such as EMC_TASK_SET_MODE::mode
cmd-write(m);
// at this point, many UIs have logic to wait for task to receive
// the command, though xemc does not

To recieve error notices create an error connection
// error channel
NML *error = new NML(emcFormat, emcError, xemc, file);
and poll it like yo usee in xemc.cc:updateError().  Note that when
multiple UIs exist which poll for errors, only one of them will receive
the error.

The string xemc which occurs in several places is a magic string; you
will just want to leave it unchanged.

Jeff

--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135031iu=/4140/ostg.clktrk
___
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users


Re: [Emc-users] Controlling LinuxCNC externally with C++ program

2013-10-21 Thread Frank Tkalcevic
As has been mentioned before, using linuxcncrsh may do all that you need.
It can open files, start/stop runs, return status etc.

It is a simple telnet interface, so you just need a socket connection and
then send text commands down the line.  There is a Java example in the forum


http://www.linuxcnc.org/index.php/english/forum/21-axis/21678-controlling-li
nuxcncrsh-from-a-java-program

Or, you can look at the linuxcncrsh source to see an example of remote
control.

Be careful though, the linuxcncrsh code has been changed so that it must be
the only GUI.  If you try to run it with axis at the same time, linuxcnc
will eventually fail.  The documentation still says that you can run it with
axis.


-Original Message-
From: Walter Cigana [mailto:walter.cig...@gmail.com] 
Sent: Monday, 21 October 2013 5:22 PM
To: Enhanced Machine Controller (EMC)
Subject: [Emc-users] Controlling LinuxCNC externally with C++ program

Hi all,

I am still Learning LinuxCNC and I again have a few questions.

I am trying to figure out the best way to drive LinuxCNC from a C++
program.

This program would receive general commands from the user, something
like: execute procedure 1 and translate this into telling LinuxCNC to open
a specific file and run the G-code therein.

I saw that there is a Python interface:
http://www.linuxcnc.org/docs/html/common/python-interface.html#_the_linuxcnc
_python_module

The doc states that Programmatic access to NML is through a C++ API;
however, the most important parts of the NML interface to Linuxcnc are also
available to Python programs through the linxuxcnc module.

I do not really feel like learning Python, but I cannot find the C++ way to
do this.  I have seen some documentation, but nothing specific and I cannot
find any examples.

Ideally, I could just use an API from my program.  Can someone point me in
the right direction???

thanks,
Walter

--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most
from the latest Intel processors and coprocessors. See abstracts and
register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135031iu=/4140/ostg.clktrk
___
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users


--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk
___
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users