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