Switched from CAN connection to UART for correctly fetch the datas.
This commit is contained in:
@@ -1,12 +1,10 @@
|
||||
/*
|
||||
Costanti del protocollo Poweren MPPT Boost.
|
||||
Riferimento: Manuale Doc. 40.0000.206, Hw v1.2 Rev 01.
|
||||
|
||||
Il microcontrollore degli MPPT (PIC24/dsPIC33 a virgola fissa) trasmette interi a 16 bit.
|
||||
Per ottenere il valore fisico bisogna dividere il raw per il fattore di conversione.
|
||||
Il microcontrollore degli MPPT (PIC24/dsPIC33 a virgola fissa) trasmette interi a 16 bit. Per
|
||||
inviare dati decimali piu precisi, il dato viene moltiplicato per un valore definito.
|
||||
conversionFactors mappa i valori di conversione usati, in modo tale che il codice riceve i dati e li divide il fattore di conversione.
|
||||
|
||||
*/
|
||||
|
||||
// Fattori di conversione (valore_fisico = raw / factor)
|
||||
const conversionsFactors = {
|
||||
voltageInput: 10, // tensione ingresso [V] es: 296 -> 29.6 V
|
||||
currentInput: 100, // corrente ingresso [A] es: 1100 -> 11.00 A
|
||||
@@ -50,25 +48,87 @@ const errorsFlags = {
|
||||
10: 'memory_flash_read_error',
|
||||
};
|
||||
|
||||
// Indirizzi dei registri richiesti via polling attivo
|
||||
/*
|
||||
Indirizzi dei registri Poweren da leggere via UART (comando READ singolo registro).
|
||||
|
||||
ATTENZIONE: i valori marcati con "(da verificare)" sono dedotti dalla struttura del
|
||||
protocollo e NON sono confermati dal manuale fornito. Per ottenere la mappa completa e
|
||||
certa, interrogare l'MPPT con i comandi GET_REG_NAMES (102) / GET_REG_VALUES (101) tramite
|
||||
DataCOM, oppure consultare la tabella registri del manuale (Doc. 40.0000.206) e correggere
|
||||
qui i numeri. I valori confermati dalla documentazione sono indicati come "(confermato)".
|
||||
*/
|
||||
const registerAddresses = {
|
||||
powerInput: 20,
|
||||
powerOutput: 21,
|
||||
temperature1: 35,
|
||||
temperature2: 36,
|
||||
status1: 4, // St1 - flag di stato (confermato: "registro 4")
|
||||
warning: 6, // Warn - flag di warning/errore (confermato: "registro 6")
|
||||
chargeCapacity: 7, // Chg_Cap - Ah caricati (da verificare)
|
||||
voltageInput: 16, // Vi - tensione ingresso (da verificare)
|
||||
currentInput: 17, // Ii - corrente ingresso (da verificare)
|
||||
voltageOutput: 18, // Vo - tensione uscita (da verificare)
|
||||
currentOutput: 19, // Io - corrente uscita (da verificare)
|
||||
powerInput: 20, // Pi - potenza ingresso (confermato)
|
||||
powerOutput: 21, // Po - potenza uscita (confermato)
|
||||
temperature1: 35, // T1 - temperatura fase 1 (confermato)
|
||||
temperature2: 36, // T2 - temperatura fase 2 (confermato)
|
||||
};
|
||||
|
||||
// Mapping dei bitrate CAN al comando slcan corrispondente (Lawicel CAN232/CANUSB)
|
||||
const slcanBitrateCommands = {
|
||||
10000: 'S0',
|
||||
20000: 'S1',
|
||||
50000: 'S2',
|
||||
100000: 'S3',
|
||||
125000: 'S4',
|
||||
250000: 'S5',
|
||||
500000: 'S6',
|
||||
800000: 'S7',
|
||||
1000000: 'S8',
|
||||
/*
|
||||
Elenco ordinato dei registri da interrogare ad ogni ciclo di polling per ciascun MPPT.
|
||||
Si leggono solo i registri che alimentano i path SignalK; Pi/Po non sono inclusi perche'
|
||||
la potenza viene calcolata come Vi*Ii e Vo*Io (come nella versione CAN).
|
||||
*/
|
||||
const pollRegisters = [
|
||||
registerAddresses.status1,
|
||||
registerAddresses.warning,
|
||||
registerAddresses.voltageInput,
|
||||
registerAddresses.currentInput,
|
||||
registerAddresses.voltageOutput,
|
||||
registerAddresses.currentOutput,
|
||||
registerAddresses.chargeCapacity,
|
||||
registerAddresses.temperature1,
|
||||
registerAddresses.temperature2,
|
||||
];
|
||||
|
||||
/*
|
||||
Costanti del frame del protocollo seriale Poweren (UART).
|
||||
Struttura pacchetto:
|
||||
[SOF][DST][SRC][0x00][DLEN][DATA...][CHK_HI][CHK_LO][EOF]
|
||||
- SOF = 0x42 ('B')
|
||||
- SRC della GUI/host = 0xFF
|
||||
- DST = indirizzo MPPT (0x00 = qualsiasi, es. 50 = MPPT di default)
|
||||
- CHK = sum(DATA) & 0xFFFF in big-endian
|
||||
- EOF = 0x0D
|
||||
*/
|
||||
const serialProtocol = {
|
||||
startOfFrame: 0x42, // SOF
|
||||
sourceHost: 0xFF, // SRC host/GUI
|
||||
endOfFrame: 0x0D, // EOF
|
||||
headerLength: 5, // SOF + DST + SRC + 0x00 + DLEN
|
||||
tailLength: 3, // CHK_HI + CHK_LO + EOF
|
||||
// Comandi (scritti nel registro 2)
|
||||
commands: {
|
||||
reset: 99,
|
||||
defaultValues: 100,
|
||||
getRegValues: 101,
|
||||
getRegNames: 102,
|
||||
getRegUnits: 103,
|
||||
getRegTypes: 104,
|
||||
getFirmwareVersion: 120,
|
||||
},
|
||||
};
|
||||
|
||||
// Parametri di default della porta seriale (Waveshare USB-UART, 8N1)
|
||||
const serialDefaults = {
|
||||
baudRate: 115200,
|
||||
dataBits: 8,
|
||||
parity: 'none',
|
||||
stopBits: 1,
|
||||
};
|
||||
|
||||
// Timeout e retry per le transazioni sincrone (richiesta -> risposta)
|
||||
const transactionTiming = {
|
||||
timeoutMs: 500,
|
||||
retries: 5,
|
||||
retryDelayMs: 100,
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
@@ -76,5 +136,8 @@ module.exports = {
|
||||
status1Flags,
|
||||
errorsFlags,
|
||||
registerAddresses,
|
||||
slcanBitrateCommands,
|
||||
pollRegisters,
|
||||
serialProtocol,
|
||||
serialDefaults,
|
||||
transactionTiming,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user