Files
Tempering-Machine-Control-S…/docs/02-hardware-communication.md

301 lines
18 KiB
Markdown

# Hardware Communication Specification
## Overview
The system communicates with industrial hardware using Modbus RTU protocol over RS-485 serial communication. This document details the communication architecture, protocols, and data structures.
## Communication Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ APPLICATION LAYER │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Recipe │ │ Motor │ │ Temperature │ │
│ │ Control │ │ Control │ │ Control │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ COMMUNICATION LAYER │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Write │────▶│ Queue │────▶│ Read │ │
│ │ Queue │ │ Manager │ │ Queue │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ └───────────────────┼───────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────┐ │
│ │ Serial Thread │ │
│ │ (Queue Processor) │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ MODBUS RTU LAYER │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Message │ │ CRC │ │ Timeout │ │
│ │ Framing │ │ Validation │ │ Handling │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ PHYSICAL LAYER │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Serial Port │─────RS485────│ Hardware │ │
│ │ Driver │ │ Controller │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## Modbus RTU Implementation
### Supported Function Codes
| Function Code | Name | Purpose | Usage in System |
|---------------|------|---------|-----------------|
| 0x01 | Read Coils | Read discrete outputs | Motor status monitoring |
| 0x03 | Read Holding Registers | Read output registers | System status, setpoints |
| 0x04 | Read Input Registers | Read input registers | Temperature sensors, digital inputs |
| 0x05 | Write Single Coil | Write single output | Individual motor control |
| 0x06 | Write Single Register | Write single register | Individual setpoint updates |
| 0x0F | Write Multiple Coils | Write multiple outputs | Batch motor control |
| 0x10 | Write Multiple Registers | Write multiple registers | Configuration updates |
### Message Structure
```
Standard Modbus RTU Frame:
┌──────────┬─────────────┬──────────────┬──────────┬──────────┐
│ Slave ID │ Function │ Data │ CRC-16 │ End │
│ (1 byte) │ Code │ (N bytes) │ (2 bytes)│ Frame │
│ │ (1 byte) │ │ │ │
└──────────┴─────────────┴──────────────┴──────────┴──────────┘
Example - Read Input Registers:
┌──────────┬─────────────┬──────────┬──────────┬──────────┬──────────┐
│ 0x01 │ 0x04 │ 0x00 │ 0x00 │ 0x00 │ 0x12 │
│ Slave ID │ Read Input │ Start │ Start │ Number │ Number │
│ │ Registers │ Addr Hi │ Addr Lo │ Regs Hi │ Regs Lo │
└──────────┴─────────────┴──────────┴──────────┴──────────┴──────────┘
```
### CRC-16 Calculation
The system implements Modbus standard CRC-16 calculation:
```
Algorithm: CRC-16-IBM (polynomial 0xA001)
Initial Value: 0xFFFF
Final XOR: None
Bit Order: LSB first
```
## Register Mapping
### Holding Registers (Write/Read)
| Address | Name | Type | Range | Units | Purpose |
|---------|------|------|-------|-------|---------|
| 0 | Reset Error | uint16 | 0-65535 | Bitfield | Error reset flags |
| 1 | HV Output | uint16 | 0-65535 | Bitfield | High voltage outputs |
| 2 | LV Output | uint16 | 0-65535 | Bitfield | Low voltage outputs |
| 3 | Motor Control | uint16 | 0-65535 | Bitfield | Motor on/off states |
| 4-5 | Set Temperature 1 | int32 | -10000 to 6500 | Deciselsius | Tank bottom heater |
| 6-7 | Set Temperature 2 | int32 | -10000 to 6500 | Deciselsius | Tank wall heater |
| 8-9 | Set Temperature 3 | int32 | -10000 to 6500 | Deciselsius | Pump heater |
| 10-11 | Set Temperature 4 | int32 | -10000 to 6500 | Deciselsius | Fountain heater |
### Input Registers (Read Only)
| Address | Name | Type | Range | Units | Purpose |
|---------|------|------|-------|-------|---------|
| 0 | Board Flags | uint16 | 0-65535 | Bitfield | System status flags |
| 1 | Input States | uint16 | 0-65535 | Bitfield | Digital input states |
| 2-4 | Grid Voltages | uint16 | 0-3000 | Volts | L1, L2, L3 voltages |
| 5 | Neutral Current | uint16 | 0-1000 | Deciselsius | Neutral line current |
| 6-7 | Motor Currents | uint16 | 0-1000 | Deciselsius | Motor 1, 2 currents |
| 8-11 | Temperatures | int16 | -1400 to 650 | Deciselsius | T1, T2, T3, T4 readings |
| 12-13 | Analog Inputs | uint16 | 0-65535 | Raw ADC | General purpose analog |
| 14-15 | System Temps | uint16 | 0-1000 | Deciselsius | Heat sink, internal |
| 16 | External Power | uint16 | 0-1000 | Deciselsius | External power voltage |
| 17 | Grid Frequency | uint16 | 0-1000 | Decideciseconds | Line frequency |
## Hardware Mapping System
### Mapping Configuration
The system uses a CSV-based mapping file to associate logical names with hardware addresses:
```csv
Id,Name,Address,IsRead,BitNumbers
1,Pedal,1,1,0
2,Cover Sensor,1,1,1
3,E-Stop,1,1,2
4,Tank Bottom Temp,8,1,8
5,Tank Wall Temp,9,1,9
6,Pump Temp,10,1,10
7,Fountain Temp,11,1,11
8,Vibrator Heater,2,0,0
9,Mold Heater,2,0,1
10,Alarm,2,0,2
11,Vibrator,1,0,0
12,Mixer,3,0,0
13,Pump,3,0,1
```
### Bit Field Operations
Motor control uses bit manipulation for individual motor control:
```
Motor Control Register (Address 3):
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│15 │14 │13 │12 │11 │10 │ 9 │ 8 │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ Mixer
│ │ │ │ │ │ │ │ │ │ │ │ │ │ └───── Pump
│ │ │ │ │ │ │ │ │ │ │ │ │ └─────── Helix
│ │ │ │ │ │ │ │ │ │ │ │ └─────────── Reserved
│ │ │ │ │ │ │ │ │ │ │ └───────────────── Reserved
└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴─────────────────────── Reserved
```
### Temperature Data Format
Temperature values are transmitted as signed 16-bit integers in deciselsius:
```
Temperature Conversion:
Raw Value: -273 (deciselsius)
Actual Temperature: -27.3°C
Special Values:
-10000: Heater disabled/off
Values > 6500: Invalid/error condition
Values < -1400: Sensor error
```
## Communication Timing
### Message Scheduling
```
Communication Timeline:
┌─────────────────────────────────────────────────────────────┐
│ Message Cycle │
│ │
│ ┌─────┐ ┌──────┐ ┌─────┐ ┌──────────────────────┐ │
│ │Write│ │ 4-Char│ │Read │ │ Wait for Next │ │
│ │ Req │ │ Delay │ │Resp │ │ Cycle │ │
│ └─────┘ └──────┘ └─────┘ └──────────────────────┘ │
│ │ │ │ │ │
│ 10ms varies 50ms configurable │
│ │ │
│ Based on baud rate │
│ (4 chars * 11 bits/char) / baud │
└─────────────────────────────────────────────────────────────┘
```
### Retry Logic
```
Retry Sequence:
Attempt 1 ──┐
│ Failure
Wait 1s ──┐
Attempt 2 ─────────┘──┐
│ Failure
Wait 1s ──┐
Attempt 3 ───────────────────┘──┐
│ Failure
Set Error Flag
(Communication Timeout)
```
### Error Detection and Recovery
| Error Condition | Detection Method | Recovery Action |
|-----------------|------------------|-----------------|
| CRC Mismatch | Frame validation | Immediate retry |
| Timeout | No response in 1s | Retry up to 3 times |
| Invalid Length | Frame size check | Discard and retry |
| Communication Loss | 3+ consecutive failures | Set error flag, continue retrying |
| Port Error | Serial port exception | Reset port, retry |
## Queue Management
### Write Queue (Priority Operations)
```
Write Queue Structure:
┌─────────────────────────────────────────────────────────────┐
│ Priority: Motor Control, Temperature Setpoints, Errors │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Motor │ │ Temperature │ │ Error │ │
│ │ Commands │ │ Setpoints │ │ Reset │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ └───────────────┼─────────────────────┘ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Serial Transmit │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### Read Queue (Monitoring Operations)
```
Read Queue Structure:
┌─────────────────────────────────────────────────────────────┐
│ Regular Monitoring: Sensors, Status, Diagnostics │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Temperature │ │ Digital │ │ Analog │ │
│ │ Sensors │ │ Inputs │ │ Inputs │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ └───────────────┼─────────────────────┘ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Process Response│ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## Configuration Parameters
### Serial Port Settings
| Parameter | Default | Range | Description |
|-----------|---------|-------|-------------|
| Baud Rate | 9600 | 1200-115200 | Communication speed |
| Data Bits | 8 | 7-8 | Character size |
| Stop Bits | 1 | 1-2 | Frame termination |
| Parity | None | None/Odd/Even/Mark/Space | Error detection |
| Timeout | 1000ms | 100-5000ms | Response timeout |
| Retry Count | 3 | 1-10 | Maximum retry attempts |
| Send Interval | 100ms | 50-1000ms | Minimum time between messages |
### Modbus Parameters
| Parameter | Default | Description |
|-----------|---------|-------------|
| Slave ID | 1 | Target device address |
| Function Codes | 0x01,0x03,0x04,0x05,0x06,0x0F,0x10 | Supported operations |
| Max Register Count | 125 | Maximum registers per request |
| CRC Validation | Enabled | Frame integrity checking |
| Broadcast Support | Disabled | Multi-device communication |
This communication specification provides the complete details needed to implement a robust Modbus RTU communication system for the tempering machine hardware interface.