Welcome to Our Community

Some features disabled for guests. Register Today.

Alarm on every connection to serial port but not in OB CONTROL GUI

Discussion in 'Controller Boards' started by alexeicolin, Sep 11, 2023.

  1. alexeicolin

    Builder

    Joined:
    Sep 11, 2023
    Messages:
    2
    Likes Received:
    0
    OpenBUILDS GRBL 1.1, OpenBuilds CONTROL v1.0.370 on Windows

    Every time I connect to the serial port (via pyserial), the controller is in Alarm state. I read that this is by design, because the microcontroller resets on every serial connection (by means of the flow control signals of serial port).

    But, if that is true, then how does the OpenBuilds CONTROL GUI not have this issue? I can connect then reconnect and not get the Alarm state on the subsequent connections!

    I tried sniffing the port, to see all the traffic, using com0com + a python script that reads prints and forwards in both directions. But the issue is that if I connect via the sniffer, then the Alarm is set, as seen from the MSG read from the port, even before I connect the OB GUI. So, what magic configuration does the GUI do when it opens the port?

    The one thing I noticed is that when OB GUI connects a second time (no alarm case), then the "Autoreset" method had an 'ok' response:

    [20:12:11] [ connect ] PORT INFO: Port is now open: COM5 - Attempting to detect Firmware
    [20:12:11] [ connect ] Checking for firmware on COM5
    [20:12:11] [ connect ] Detecting Firmware: Method 1 (Autoreset)
    [20:12:11] [ ] ok
    [20:12:11] [ connect ] Detecting Firmware: Method 2 (Ctrl+X)
    [20:12:11] [ ] Grbl 1.1g ['$' for help]

    In the case when alarm is raised, the "Autoreset" method has no response printed.

    Any details on this "Autoreset" method?

    I tried passing ctsrts=False and dsrdtr=False to pyserial -- no difference.
     
    #1 alexeicolin, Sep 11, 2023
    Last edited: Sep 11, 2023
  2. alexeicolin

    Builder

    Joined:
    Sep 11, 2023
    Messages:
    2
    Likes Received:
    0
    Solved.

    s = serial.Serial()
    s.port = ....
    s.dsrdtr = False # this is not enough!
    s.setDTR(False) # this prevents the reset
    s.open()

    pyserial 3.5 on Windows, with Python 3.11.5

    Credit: Disable DTR in pyserial from code
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice