One problem is that the interpreter is asynchronous to the execution. I believe 
that someone (Alex Joni, perhaps) added something to allow you to make sure 
that the output had caught up with the interpreter. Off hand, I don't remember 
what that was.

Ken
  ----- Original Message ----- 
  From: Roland Jollivet 
  To: Enhanced Machine Controller (EMC) 
  Sent: Friday, November 30, 2007 11:48 AM
  Subject: Re: [Emc-users] rs232 output


  Hi

  I've had this idea for a while, as I posted on other cnc lists.
  The proposal is to add, probably two lines of code, to echo every character, 
as the G-code file is processed, to the serial port, unconditionally. 

  Using 232, or 232>>485 multidrop, you could have as many devices as you want, 
sitting on the line, listening/waiting for their command.
  You could even embed things like 'turn on the kettle' within a comment. 
  Basically all non time-critical things could be controlled with this method, 
freeing up valuable I/O.
  You could then use a single parport line setup for all or any device to tug 
low, as an Ack, using a wait or pause command in G-code, rather than processing 
232 in. 

  It also allows one to implement any complex command that might be outside the 
scope of EMC, without affecting the G-code program.

  Of course, each function requires an embedded processor to implement it, but 
one pic could easily manage 15 solenoids/pumps/tools. 

  Roland




  On 30/11/2007, Jeff Epler <[EMAIL PROTECTED]> wrote:
    On Fri, Nov 30, 2007 at 01:27:11AM -0800, Klemen Dovrtel wrote:
    > Is it possible to send a simple command to rs232
    > within the G code using emc. I would like to control
    > the pneumatic valves and some other simple stuff and i 
    > don't want to sped parallel port pins for simple
    > things like this.

    Every "serial" device is different, so to do this you will have to write
    your own "HAL component".  If the control does not need to be real-time, 
    then it is fairly simple to do this.  One choice is to use Python and
    pyserial.

    You will have to install the pyserial package.  If your Ubuntu system is
    on the internet, this can be done through the package manager by 
    selecting the package called 'python-serial'.  It is in the "universe"
    repository, which is not enabled by default but you can find
    instructions online for how to enable it.  If you're not online, then 
    download this file onto a usb drive then install it by double-clicking:
        
http://us.archive.ubuntu.com/ubuntu/pool/universe/p/pyserial/python-serial_2.2-1_all.deb
 

    Here is an (untested!) example which should give you a general idea of
    the complexity of such a driver.  This driver controls a hypothetical
    serial-attached device which turns something on when the character "1" 
    is received, and turns it off when the character "0" is received:

    #!/usr/bin/python
    # -----------------------------------------------------------------------
    # Import the necessary modules
    import hal 
    import time
    import pyserial

    # Get the serial connection -- first port, 9600,8,N,1
    import serial
    ser = serial.Serial(0)

    # Create the HAL component and its pin.  You will use a .hal file to
    # connect whatever bit signal you want to the pin ' example.enable'.
    h = hal.component("example")
    h.newpin("enable", hal.HAL_BIT, hal.HAL_IN)
    h.ready()

    # The previous value of the 'enable' pin so that a byte is only sent on
    # the serial port when it is necessary.  This setting, which is not a
    # number, means that the first time the value will always be considered
    # "changed".
    last = None

    # (without try/except, the component will print what looks like an error 
    # when emc is shut down, and the cleanup below won't happen)
    try:
        while 1:
            # As long as the component is running, periodically check
            # whether the value has changed; if it has, send a command to 
            # set the new value
            new = h["enable"]
            if new != old:
                if new: ser.write("1")
                else: ser.write("0")
            old = new
             time.sleep(.01)
    except KeyboardInterrupt: pass

    # Shut down the connected device at exit
    ser.write("0")
    # -----------------------------------------------------------------------

    Put the above in a file named "example", make it executable (chmod +x 
    example), and put it in a directory on your $PATH.

    In your HAL file, hook it up something like this:
        loadusr -W example
        net coolant iocontrol.0.coolant-mist => example.enable

    Jeff

    -------------------------------------------------------------------------
    SF.Net email is sponsored by: The Future of Linux Business White Paper
    from Novell.  From the desktop to the data center, Linux is going
    mainstream.  Let it simplify your IT future. 
    http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
    _______________________________________________
    Emc-users mailing list
    [email protected]
    https://lists.sourceforge.net/lists/listinfo/emc-users





------------------------------------------------------------------------------


  -------------------------------------------------------------------------
  SF.Net email is sponsored by: The Future of Linux Business White Paper
  from Novell.  From the desktop to the data center, Linux is going
  mainstream.  Let it simplify your IT future.
  http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4


------------------------------------------------------------------------------


  _______________________________________________
  Emc-users mailing list
  [email protected]
  https://lists.sourceforge.net/lists/listinfo/emc-users
-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Emc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-users

Reply via email to