301 lines
18 KiB
Markdown
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.
|