1 个不稳定版本

0.1.0 2022年4月15日

#641 in 硬件支持

自定义许可证

155KB
2.5K SLoC

跨平台 grbl-interface

该接口提供了对所有 grblHAL 设备的便捷访问。它自动解析和调度消息,并为用户提供 grblHAL 设备的结构化表示

用法


// first start scanning for available serial devices
// ethernet will be implemented soon
// this function might return under linux ("/dev/ttyACM0", DeviceEndpointType::Serial)
let devices = DeviceService::get_available_devices();

// this service handles all communication with the controller
let mut service = DeviceService::new();

// lets open a device
// on my machine the following device is always available
let device_desc = ("/dev/ttyACM0".to_string(), DeviceEndpointType::Serial);

// now open the serial port
service.open_device(&device_desc).unwrap();

// start with retrieving some firmware information
service.write_device_command(&device_desc.0, format!("{}\n", state::GET_INFO_EXTENDED).as_str()).unwrap();

// next load the settings from the device
// this includes the settings, groups and description for each entry
service.write_device_command(&device_desc.0, format!("{}\n", settings::GET_ALL).as_str()).unwrap();
service.write_device_command(&device_desc.0, format!("{}\n", settings::GET_DETAILS).as_str()).unwrap();
service.write_device_command(&device_desc.0, format!("{}\n", settings::GET_GROUPS).as_str()).unwrap();

// sometimes the last message gets stuck in the device
// this messages flushes the last message
service.write_device_command(&device_desc.0, format!("{}\n", SYNC).as_str()).unwrap();

// wait until the controller has processes each request
thread::sleep(Duration::from_millis(100));

// load the state of the device information after all commands have been send
// and print the whole info object
let info =  service.get_device_info(&device_desc.0).unwrap();
println!("{:#?}", info);

最后的 println 语句返回我们从最后一个 grbl 命令中收集的所有信息。这个结构将始终更新,并包含自服务上次启动以来所有已知的状态。例如,在以下行中,可以检查所有设置和固件属性

DeviceInfo {
    id: "/dev/ttyACM0",
    firmware_info: FirmwareInfo {
        startup_result: None,
        version: Some(
            FirmwareVersion {
                version: "1.1f.20210715",
                name: "",
            },
        ),
        compile_options: Some(
            CompileOptions {
                options: [
                    VariableSpindleEnabled,
                    LineNumbersEnabled,
                    MistCoolantEnabled,
                    SoftwareDebounce,
                    AlarmStateOnPowerUpWhenHomingInitLock,
                ],
                unknown_options: [],
                block_buffer_size: 35,
                rx_buffer_size: 1024,
                axes_count: Some(
                    3,
                ),
                tool_table_entries_count: Some(
                    0,
                ),
            },
        ),
        extended_compile_options: Some(
            [
                CodeEnumerations,
                LegacyRealtimeCommands,
                EStopSignal,
                ManualToolChange,
                EthernetStreaming,
            ],
        ),
        driver_info: DriverInfo {
            name: Some(
                "iMXRT1062",
            ),
            version: Some(
                "210725",
            ),
            options: Some(
                [
                    "USB.2",
                ],
            ),
        },
        board_info: BoardInfo {
            name: Some(
                "T41U5XBB",
            ),
            storage: Some(
                Storage {
                    emulated: true,
                    storage_type: Flash,
                },
            ),
            aux: Some(
                AuxPorts {
                    digital_in: 1,
                    digital_out: 3,
                    analog_in: 0,
                    analog_out: 0,
                },
            ),
        },
    },
    machine_info: None,
    gcode_state: None,
    last_message: Some(
        Message {
            message: "Emergency stop",
        },
    ),
    last_echo_message: None,
    settings: DeviceSettings {
        settings: {
            44: DeviceSetting [44,4],
            342: DeviceSetting [342,30.0],
            160: DeviceSetting [160,0.000],
            35: DeviceSetting [35,0.0],
            82: DeviceSetting [82,0.000],
            344: DeviceSetting [344,200.0],
            132: DeviceSetting [132,200.000],
            2: DeviceSetting [2,0],
            14: DeviceSetting [14,0],
            120: DeviceSetting [120,10.000],
            18: DeviceSetting [18,0],
            347: DeviceSetting [347,5.0],
            348: DeviceSetting [348,2.500],
            5: DeviceSetting [5,0],
            370: DeviceSetting [370,0],
            400: DeviceSetting [400,0],
            402: DeviceSetting [402,4],
            4: DeviceSetting [4,0],
            12: DeviceSetting [12,0.002],
            34: DeviceSetting [34,0.0],
            305: DeviceSetting [305,23],
            349: DeviceSetting [349,25.000],
            7: DeviceSetting [7,0],
            27: DeviceSetting [27,1.000],
            341: DeviceSetting [341,0],
            24: DeviceSetting [24,25.0],
            19: DeviceSetting [19,0],
            101: DeviceSetting [101,250.000],
            121: DeviceSetting [121,10.000],
            307: DeviceSetting [307,80],
            16: DeviceSetting [16,0],
            15: DeviceSetting [15,0],
            112: DeviceSetting [112,500.000],
            300: DeviceSetting [300,GRBL],
            401: DeviceSetting [401,400],
            131: DeviceSetting [131,200.000],
            0: DeviceSetting [0,10.0],
            304: DeviceSetting [304,255.255.255.0],
            21: DeviceSetting [21,0],
            122: DeviceSetting [122,10.000],
            372: DeviceSetting [372,0],
            92: DeviceSetting [92,0.000],
            90: DeviceSetting [90,0.000],
            62: DeviceSetting [62,0],
            102: DeviceSetting [102,250.000],
            110: DeviceSetting [110,500.000],
            111: DeviceSetting [111,500.000],
            301: DeviceSetting [301,1],
            17: DeviceSetting [17,0],
            70: DeviceSetting [70,3],
            403: DeviceSetting [403,500],
            28: DeviceSetting [28,0.100],
            345: DeviceSetting [345,100.0],
            37: DeviceSetting [37,0],
            25: DeviceSetting [25,500.0],
            29: DeviceSetting [29,0.0],
            23: DeviceSetting [23,0],
            39: DeviceSetting [39,1],
            161: DeviceSetting [161,0.000],
            302: DeviceSetting [302,192.168.5.1],
            80: DeviceSetting [80,1.000],
            20: DeviceSetting [20,0],
            45: DeviceSetting [45,3],
            33: DeviceSetting [33,5000.0],
            31: DeviceSetting [31,0.000],
            100: DeviceSetting [100,250.000],
            91: DeviceSetting [91,0.000],
            11: DeviceSetting [11,0.010],
            64: DeviceSetting [64,0],
            32: DeviceSetting [32,0],
            6: DeviceSetting [6,0],
            130: DeviceSetting [130,200.000],
            22: DeviceSetting [22,0],
            43: DeviceSetting [43,1],
            3: DeviceSetting [3,0],
            84: DeviceSetting [84,0.000],
            85: DeviceSetting [85,10.000],
            26: DeviceSetting [26,250],
            162: DeviceSetting [162,0.000],
            10: DeviceSetting [10,511],
            81: DeviceSetting [81,0.010],
            95: DeviceSetting [95,0.000],
            46: DeviceSetting [46,0],
            303: DeviceSetting [303,192.168.5.1],
            1: DeviceSetting [1,25],
            343: DeviceSetting [343,25.0],
            13: DeviceSetting [13,0],
            65: DeviceSetting [65,0],
            30: DeviceSetting [30,1000.000],
            63: DeviceSetting [63,2],
            36: DeviceSetting [36,100.0],
            40: DeviceSetting [40,0],
        },
        setting_groups: {
            27: DeviceSettingGroup [27,0,Stepper],
            5: DeviceSettingGroup [5,0,Coolant],
            6: DeviceSettingGroup [6,0,Spindle],
            32: DeviceSettingGroup [32,29,Z-axis],
            31: DeviceSettingGroup [31,29,Y-axis],
            1: DeviceSettingGroup [1,0,General],
            9: DeviceSettingGroup [9,0,Tool change],
            18: DeviceSettingGroup [18,0,Aux ports],
            30: DeviceSettingGroup [30,29,X-axis],
            20: DeviceSettingGroup [20,0,Encoders],
            29: DeviceSettingGroup [29,0,Axis],
            15: DeviceSettingGroup [15,0,Networking],
            2: DeviceSettingGroup [2,0,Control signals],
            11: DeviceSettingGroup [11,0,Homing],
            12: DeviceSettingGroup [12,0,Probing],
            14: DeviceSettingGroup [14,0,Jogging],
            3: DeviceSettingGroup [3,0,Limits],
            21: DeviceSettingGroup [21,20,Encoder 0],
        },
        setting_descriptions: {
            80: DeviceSettingDescription [80,8,Spindle P-gain,-,6,###0.000,-,-],
            62: DeviceSettingDescription [62,1,Sleep enable,-,0,-,-,-],
            370: DeviceSettingDescription [370,18,Invert I/O Port inputs,-,1,Port 0,-,-],
            1: DeviceSettingDescription [1,27,Step idle delay,milliseconds,5,####0,-,65535],
            82: DeviceSettingDescription [82,8,Spindle D-gain,-,6,###0.000,-,-],
            2: DeviceSettingDescription [2,27,Step pulse invert,-,4,-,-,-],
            26: DeviceSettingDescription [26,11,Homing switch debounce delay,milliseconds,5,##0,-,-],
            24: DeviceSettingDescription [24,11,Homing locate feed rate,mm/min,6,#####0.0,-,-],
            25: DeviceSettingDescription [25,11,Homing search seek rate,mm/min,6,#####0.0,-,-],
            84: DeviceSettingDescription [84,8,Spindle PID max error,-,6,###0.000,-,-],
            132: DeviceSettingDescription [132,32,Z-axis maximum travel,mm,6,#####0.000,-,-],
            301: DeviceSettingDescription [301,15,IP Mode,-,3,Static,DHCP,AutoIP,-,-],
            27: DeviceSettingDescription [27,11,Homing switch pull-off distance,mm,6,#####0.000,-,-],
            305: DeviceSettingDescription [305,15,Telnet port,-,5,####0,1,65535],
            303: DeviceSettingDescription [303,15,Gateway,-,9,-,-,-],
            341: DeviceSettingDescription [341,9,Tool change mode,-,3,Normal,Manual touch off,Manual touch off @ G59.3,Automatic touch off @ G59.3,Ignore M6,-,-],
            345: DeviceSettingDescription [345,9,Tool change probe pull-off rate,mm/min,6,#####0.0,-,-],
            110: DeviceSettingDescription [110,30,X-axis maximum rate,mm/min,6,#####0.000,-,-],
            307: DeviceSettingDescription [307,15,Websocket port,-,5,####0,1,65535],
            64: DeviceSettingDescription [64,1,Force init alarm,-,0,-,-,-],
            112: DeviceSettingDescription [112,32,Z-axis maximum rate,mm/min,6,#####0.000,-,-],
            348: DeviceSettingDescription [348,4,Dual axis length fail min,mm,6,#####0.000,-,-],
            349: DeviceSettingDescription [349,4,Dual axis length fail max,mm,6,#####0.000,-,-],
            29: DeviceSettingDescription [29,27,Pulse delay,microseconds,6,#0.0,-,10],
            36: DeviceSettingDescription [36,6,Spindle PWM max value,percent,6,##0.0,-,100],
            122: DeviceSettingDescription [122,32,Z-axis acceleration,mm/sec^2,6,#####0.000,-,-],
            10: DeviceSettingDescription [10,1,Status report options,-,1,Position in machine coordinate,Buffer state,Line numbers,Feed & speed,Pin state,Work coordinate offset,Overrides,Probe coordinates,Buffer sync on WCO change,Parser state,Alarm substatus,Run substatus,-,-],
            347: DeviceSettingDescription [347,4,Dual axis length fail,percent,6,##0.0,0,100],
            400: DeviceSettingDescription [400,21,Encoder mode,-,3,Universal,Feed rate override,Rapid rate override,Spindle RPM override,-,-],
            304: DeviceSettingDescription [304,15,Netmask,-,9,-,-,-],
            23: DeviceSettingDescription [23,11,Homing direction invert,-,4,-,-,-],
            33: DeviceSettingDescription [33,6,Spindle PWM frequency,Hz,6,#####0,-,-],
            43: DeviceSettingDescription [43,11,Homing passes,-,5,##0,1,128],
            65: DeviceSettingDescription [65,12,Probing feed override,-,0,-,-,-],
            95: DeviceSettingDescription [95,7,Spindle sync PID max I error,-,6,###0.000,-,-],
            46: DeviceSettingDescription [46,11,Axes homing, third pass,-,4,-,-,-],
            121: DeviceSettingDescription [121,31,Y-axis acceleration,mm/sec^2,6,#####0.000,-,-],
            161: DeviceSettingDescription [161,31,Y-axis backlash compensation,mm,6,#####0.000,-,-],
            32: DeviceSettingDescription [32,1,Mode of operation,-,3,Normal,Laser mode,Lathe mode,-,-],
            45: DeviceSettingDescription [45,11,Axes homing, second pass,-,4,-,-,-],
            40: DeviceSettingDescription [40,14,Limit jog commands,-,0,-,-,-],
            28: DeviceSettingDescription [28,1,G73 Retract distance,mm,6,#####0.000,-,-],
            34: DeviceSettingDescription [34,6,Spindle PWM off value,percent,6,##0.0,-,100],
            7: DeviceSettingDescription [7,6,Disable spindle with zero speed,-,0,-,-,-],
            63: DeviceSettingDescription [63,1,Feed hold actions,-,1,Disable laser during hold,Restore spindle and coolant state on resume,-,-],
            100: DeviceSettingDescription [100,30,X-axis travel resolution,step/mm,6,#####0.000,-,-],
            302: DeviceSettingDescription [302,15,IP Address,-,9,-,-,-],
            401: DeviceSettingDescription [401,21,Encoder counts per revolution,-,5,###0,1,-],
            130: DeviceSettingDescription [130,30,X-axis maximum travel,mm,6,#####0.000,-,-],
            91: DeviceSettingDescription [91,7,Spindle sync I-gain,-,6,###0.000,-,-],
            14: DeviceSettingDescription [14,2,Invert control pins,-,1,N/A,Feed hold,Cycle start,N/A,N/A,N/A,EStop,-,-],
            85: DeviceSettingDescription [85,8,Spindle PID max I error,-,6,###0.000,-,-],
            17: DeviceSettingDescription [17,2,Pullup disable control pins,-,1,N/A,Feed hold,Cycle start,N/A,N/A,N/A,EStop,-,-],
            21: DeviceSettingDescription [21,3,Hard limits enable,-,2,Enable,Strict mode,-,-],
            6: DeviceSettingDescription [6,12,Invert probe pin,-,0,-,-,-],
            131: DeviceSettingDescription [131,31,Y-axis maximum travel,mm,6,#####0.000,-,-],
            13: DeviceSettingDescription [13,1,Report in inches,-,0,-,-,-],
            3: DeviceSettingDescription [3,27,Step direction invert,-,4,-,-,-],
            162: DeviceSettingDescription [162,32,Z-axis backlash compensation,mm,6,#####0.000,-,-],
            343: DeviceSettingDescription [343,9,Tool change locate feed rate,mm/min,6,#####0.0,-,-],
            344: DeviceSettingDescription [344,9,Tool change search seek rate,mm/min,6,#####0.0,-,-],
            37: DeviceSettingDescription [37,27,Steppers deenergize,-,4,-,-,-],
            18: DeviceSettingDescription [18,3,Pullup disable limit pins,-,4,-,-,-],
            31: DeviceSettingDescription [31,6,Minimum spindle speed,RPM,6,#####0.000,-,-],
            70: DeviceSettingDescription [70,15,Network Services,-,1,Telnet,Websocket,-,-],
            372: DeviceSettingDescription [372,18,Invert I/O Port outputs,-,1,Port 0,Port 1,Port 2,-,-],
            0: DeviceSettingDescription [0,27,Step pulse time,microseconds,6,#0.0,2.0,-],
            44: DeviceSettingDescription [44,11,Axes homing, first pass,-,4,-,-,-],
            12: DeviceSettingDescription [12,1,Arc tolerance,mm,6,#####0.000,-,-],
            39: DeviceSettingDescription [39,1,Enable legacy RT commands,-,0,-,-,-],
            101: DeviceSettingDescription [101,31,Y-axis travel resolution,step/mm,6,#####0.000,-,-],
            30: DeviceSettingDescription [30,6,Maximum spindle speed,RPM,6,#####0.000,-,-],
            16: DeviceSettingDescription [16,6,Invert spindle signals,-,1,Spindle enable,Spindle direction,-,-],
            35: DeviceSettingDescription [35,6,Spindle PWM min value,percent,6,##0.0,-,100],
            81: DeviceSettingDescription [81,8,Spindle I-gain,-,6,###0.000,-,-],
            403: DeviceSettingDescription [403,21,Encoder double click sensitivity,ms,5,##0,100,900],
            11: DeviceSettingDescription [11,1,Junction deviation,mm,6,#####0.000,-,-],
            22: DeviceSettingDescription [22,11,Homing cycle,-,2,Enable,Enable single axis commands,Homing on startup required,Set machine origin to 0,Two switches shares one input pin,Allow manual,Override locks,Keep homed status on reset,-,-],
            402: DeviceSettingDescription [402,21,Encoder counts per detent,-,5,#0,1,-],
            4: DeviceSettingDescription [4,27,Invert step enable pin(s),-,4,-,-,-],
            90: DeviceSettingDescription [90,7,Spindle sync P-gain,-,6,###0.000,-,-],
            15: DeviceSettingDescription [15,5,Invert coolant pins,-,1,Flood,Mist,-,-],
            102: DeviceSettingDescription [102,32,Z-axis travel resolution,step/mm,6,#####0.000,-,-],
            19: DeviceSettingDescription [19,12,Pullup disable probe pin,-,0,-,-,-],
            20: DeviceSettingDescription [20,3,Soft limits enable,-,0,-,-,-],
            92: DeviceSettingDescription [92,7,Spindle sync D-gain,-,6,###0.000,-,-],
            300: DeviceSettingDescription [300,15,Hostname,-,7,x(64),-,64],
            342: DeviceSettingDescription [342,9,Tool change probing distance,mm,6,#####0.0,-,-],
            120: DeviceSettingDescription [120,30,X-axis acceleration,mm/sec^2,6,#####0.000,-,-],
            5: DeviceSettingDescription [5,3,Invert limit pins,-,4,-,-,-],
            160: DeviceSettingDescription [160,30,X-axis backlash compensation,mm,6,#####0.000,-,-],
            111: DeviceSettingDescription [111,31,Y-axis maximum rate,mm/min,6,#####0.000,-,-],
        },
    },
}

依赖关系

~1.7–2.7MB
~52K SLoC