when'd i last commit this pos?

This commit is contained in:
Thomas Ales [M S E]
2026-02-09 14:40:34 -06:00
parent fc43fbe4b0
commit 23f6331ba2
94 changed files with 14427 additions and 12178 deletions
+161
View File
@@ -0,0 +1,161 @@
# Genesis SLM MX 532 Laser Control Application
## Overview
This application provides comprehensive control of the Genesis SLM MX 532 laser over serial port using the NXP I2C-over-serial protocol. It features a professional PyQt6 GUI with multiple tabs for basic controls, monitoring, advanced operations, and configuration.
## Features
### Tab 1: Basic Controls
- **Current Control**: Slider and numeric input for laser current (0-1023) with percentage display
- **Power Control**: Slider for power command setting
- **Digital Controls**: Toggle buttons for:
- Shutter (Open/Closed)
- Keyswitch (On/Off)
- Remote Enable (On/Off)
- Analog Input Enable (On/Off)
- Current Mode (On/Off)
- **Emergency Stop**: Red button that immediately closes shutter, sets current to 0, and disables keyswitch
### Tab 2: Monitoring
- Real-time sensor readings with auto-refresh capability (configurable interval)
- Displays:
- Actual current reading from ADC
- Interlock status (visual color-coded indicator)
- LDD (Laser Diode Driver) enable status
- Power supply glue input/output status
- Head DIO status
- Laser information display (model and wavelength)
### Tab 3: Advanced
- **Raw I2C Packet Sender**: Send custom I2C commands with hex input
- **Packet Capture Log**: Real-time log of all transmitted and received packets with timestamps
- Useful for debugging and development
### Tab 4: Configuration
- Serial port selection with auto-detection
- Baud rate configuration (default: 9600)
- Connect/Disconnect control
- DTR/RTS control line settings
- About section with protocol information
## Safety Features
1. **All controls disabled until connected** - Prevents accidental commands
2. **Shutter confirmation dialog** - Warns if opening shutter with current > 0
3. **Emergency stop** - Always enabled, immediately enters safe state
4. **Auto-safe state on disconnect** - Laser enters safe state when disconnecting
5. **Settings persistence** - Window geometry and last settings are saved
## Protocol Details
The application uses the NXP I2C-over-serial protocol with this packet format:
**Write packet:**
```
[0x53] [I2C_ADDR] [LENGTH] [COMMAND_BYTES] [DATA_BYTES] [0x50]
```
**Read packet:**
```
[0x53] [ADDR_WRITE] [CMD_LEN] [CMD] [0x53] [ADDR_READ] [DATA_LEN] [0x50]
```
### I2C Devices
- **X9119** (0x52/0x53) - Digital potentiometer for current control
- **PCA9555** (various addresses) - I/O expanders for digital control
- **ADS7828** (0x90/0x91) - ADC for sensor readings
- **AD5254** (0x58) - Digital potentiometer for limits
- **M24C64** (0xa4/0xa5) - EEPROM for configuration storage
## Installation
1. Ensure dependencies are installed:
```bash
pip install -r requirements.txt
```
2. Connect the laser to your computer via serial port (typically /dev/ttyUSB0 on Linux)
3. Run the application:
```bash
python genesis_laser_control.py
```
## Usage
1. **Launch the application**
```bash
python genesis_laser_control.py
```
2. **Connect to the laser:**
- Go to the "Configuration" tab
- Select the correct serial port from the dropdown
- Verify baud rate is set to 9600 (default)
- Click "Connect"
3. **Basic operation:**
- Enable remote control using the "Remote: DISABLED" button
- Enable keyswitch if required
- Adjust current using the slider
- Open shutter when ready (confirmation dialog will appear if current > 0)
4. **Monitoring:**
- Go to the "Monitoring" tab
- Enable "Auto-refresh" to continuously update readings
- Adjust refresh interval as needed (default: 500ms)
5. **Emergency stop:**
- Click the red "EMERGENCY STOP" button on any tab
- This immediately closes shutter, sets current to 0, and disables keyswitch
6. **Disconnecting:**
- Click "Disconnect" in the Configuration tab
- Laser will automatically enter safe state before disconnecting
## Troubleshooting
### Connection Issues
- Verify serial port permissions: `sudo usermod -a -G dialout $USER` (logout and login)
- Check cable connection and power
- Verify correct port in Configuration tab
- Try refreshing ports list
### Communication Errors
- Check packet log in Advanced tab for detailed TX/RX
- Verify baud rate is 9600
- Ensure no other programs are using the serial port
- Try power cycling the laser
### Interlock Faults
- Check physical interlock connections
- Verify interlock status in Monitoring tab
- Ensure all safety covers are in place
## Code Structure
The application is organized into several classes:
- **SerialComm**: Low-level serial port communication
- **I2CProtocol**: NXP packet construction and parsing
- **I2CDevices**: I2C device-specific functions (PCA9555, X9119, ADS7828)
- **LaserControl**: High-level laser control operations
- **MainWindow**: PyQt6 GUI and user interaction
## Development
To modify the application:
1. **Adding new I2C devices**: Extend the `I2CDevices` class
2. **Adding new controls**: Add methods to `LaserControl` and corresponding UI elements
3. **Custom commands**: Use the Raw I2C Packet Sender in the Advanced tab for testing
## License
See LICENSE file for details.
## Support
For issues or questions, please refer to the main project documentation.