Libreria PLC – Fulmatic Core – Firmware PLC

Il nostro obiettivo: Questa biblioteca stessa PLCÈ progettato per permetterti di produrre i tuoi prodotti. Ti offre il massimo livello di controllo sull'hardware. Fulmatic SOFT L'obiettivo è costruire un ecosistema di dispositivi programmabili con questa ampia libreria. È possibile utilizzare questa libreria con qualsiasi chip e IDE. È possibile definire autonomamente lo schema elettrico e tutte le altre specifiche hardware.

Fulmatic SOFT: Aggiungete la libreria Fulmatic Core al codice del vostro chip seguendo le istruzioni e potrete quindi eseguire i vostri sistemi embedded. Fulmatic SOFT s scala (IEC 61131-3Programma nel linguaggio ( ). Fulmatic SOFT Oltre a tutte le funzionalità dei moderni PLC, offre molto di più di un semplice PLC grazie ai comandi TCP, UDP, Motion e SD Card. Con 771 blocchi (255 DB, 256 PB, 256 FB e 4 OB) e 16384 I/O, Fulmatic SOFT offre un'enorme quantità di spazio.

Firmware PLC gratuito: PLC È possibile utilizzare la libreria gratuitamente fino a 2048 byte (1026 byte sono utilizzati da DB0). Se è necessaria una quantità di memoria maggiore, sarà necessario stipulare una licenza. (10 dollari USA) È necessario acquistare una licenza. Senza licenza, il PLC funzionerà per 60 minuti. Il nostro modello di licenza trasparente non prevede contratti o procedure complicate. È necessario aggiungere un chip TSHA204A-SSHDA al circuito. La chiave verrà fornita al momento dell'acquisto della licenza. Richiesta di licenza Questa chiave si connetterà al nostro server e caricherà il codice di licenza sul chip tramite porta seriale o Ethernet. Il numero di licenze presenti sul server diminuirà simultaneamente.

Github: PLC Per testare la libreria, è possibile scaricare da GitHub il nostro progetto di esempio, predisposto per STM32F407VGTx con VS Code. https://github.com/FultekPLC/Plc-Firmware

In questo progetto, vedrete il firmware completo del PLC, che utilizza quasi tutte le funzionalità del chip, disponibile come open source. Cube MX È possibile modificare le specifiche hardware del chip tramite software e continuare a lavorare sullo stesso progetto. È possibile modificare le specifiche hardware e software con VS Code. È possibile aggiungere funzioni personalizzate al firmware del PLC e... PLC È possibile eseguire il codice dall'interno. È possibile utilizzare qualsiasi marca e modello di chip ARM e specificare il numero e i tipi di I/O. In breve, è possibile utilizzare la libreria Fulmatic Core senza alcuna restrizione, in conformità con i termini della licenza.

Aggiornamento del firmware: I tuoi clienti che utilizzano il tuo prodotto PLC Gli aggiornamenti del firmware possono essere eseguiti tramite Fulmatic SOFT. Il codice per l'aggiornamento del firmware del PLC è completamente open source ed è possibile visualizzare e modificare il codice del bootloader nel progetto di esempio. Oltre al codice che suggeriamo, è possibile scrivere il proprio codice bootloader.

Guida al codice

256 KB Stiamo lavorando per rendere il progetto di esempio il più semplice possibile da utilizzare. 256 KB di codice per un chip rappresentano un progetto piuttosto corposo. Comprendere, modificare e implementare un progetto di queste dimensioni non sarà facile. Abbiamo cercato di spiegare le funzioni in questa pagina e nel codice. Stiamo inoltre lavorando per migliorarne ulteriormente la spiegazione. Cercheremo di rispondere al maggior numero possibile di domande nella sezione discussioni del nostro repository GitHub. Purtroppo, non forniamo assistenza gratuita per Fulmatic Core. Potete richiederci un preventivo per gestire per vostro conto tutte le fasi del processo, inclusa la progettazione dei circuiti stampati.

È possibile scaricare il progetto di esempio dal nostro link GitHub: https://github.com/FultekPLC/Plc-Firmware Nel progetto di esempio, è possibile visualizzare e modificare tutte le funzionalità del PLC utilizzando codice open-source. È possibile rimuovere le funzioni non necessarie e aggiungerne di nuove.

Tutte le informazioni sugli IDE e sugli strumenti di compilazione sono disponibili nel nostro repository GitHub. In questa pagina, spiegheremo le funzioni utilizzate per l'integrazione delle librerie con il codice del microcontrollore.

FulmaticConfig.h

In questo file vengono definite la versione del firmware e la dimensione della stringa.

FulmaticCore.h

Questo file contiene le intestazioni delle funzioni della libreria che verranno richiamate dal codice del microcontrollore. In questo file sono presenti le descrizioni di tutte le funzioni. La libreria lavora con numerose variabili e stringhe. È necessario creare queste stringhe e variabili nel codice del microcontrollore. La struttura `variables_TypeDef` viene utilizzata per passare le variabili create alla libreria. Non è possibile modificare questa struttura.

FulmaticInitIl chip deve essere attivato una sola volta, alla prima accensione. Quando il valore restituito è 1, significa che il chip di licenza è stato letto correttamente e che il sistema sta funzionando sotto licenza.

FulmaticExecute: all'interno di main.c Scala PLC Questa è la funzione chiamata per eseguire il codice. Viene chiamata durante il blocco Startup (quando il PLC si avvia), il blocco Main (ad ogni ciclo), il blocco Shutdown (quando il PLC si arresta) e quando si verifica un interrupt di ingresso digitale all'interno di Interrput.c, nonché con un interrupt basato sul tempo (Timer) all'interno di Fulmatic.c.

Fulmatic.c

Tutte le funzioni necessarie per utilizzare la libreria nel tuo codice sono raccolte nel file Fulmatic.c. Questo file si ramifica in altri file. Abbiamo raggruppato le funzioni in quattro categorie. Le descrizioni delle funzioni sono scritte nel file in cui si trova il corpo della funzione.

  • Funzioni necessarie per il progetto di esempio che non vengono utilizzate dalla libreria.
  • Funzioni utilizzate dalla libreria che devono essere incluse nel codice.
  • Funzioni utilizzate dalla libreria ai fini della concessione di licenze. Funzioni non necessarie per l'utilizzo senza licenza.
  • Le funzionalità della libreria dipendono dai comandi PLC utilizzati. Ad esempio, se nel PLC non vengono utilizzate operazioni come TCP, UDP, SPI, porta seriale e scheda SD, la libreria funzionerà anche senza queste funzioni.

_DefaultEprom: Le impostazioni hardware selezionabili con Fulmatic SOFT includono PlcSetupEprom[STPMEMORYSIZE] e scala Il codice è memorizzato negli array PlcEprom[PRGMEMORYSIZE]. La funzione _DefaultEprom in questo file contiene le impostazioni predefinite del PLC. È possibile personalizzare la configurazione entro certi limiti utilizzando questi array nel proprio codice.

Ogni millisecondo: Questa funzione, che viene eseguita ogni millisecondo, è presente sia nel file principale che nella libreria. Nel progetto di esempio, i flag vengono impostati tramite TIM7_IRQHandler in Interrupt.c, e non eseguiti direttamente. Inoltre, il valore TIM7->ARR viene calibrato con l'RTC. Si prega di esaminare la funzione _RtcCalibration in Fulmatic.c. Una calibrazione errata causerà l'esecuzione di tutte le operazioni temporizzate nel PLC con errori minori.

_DelayUs: Potrebbe essere necessario modificare il codice per garantire una calibrazione precisa rispetto alla frequenza del chip. Si consiglia di testarlo e calibrarlo per un periodo prolungato. È calibrato per 168 MHz.

_SetOutputs: Normalmente, gli input vengono letti e gli output scritti all'interno di main.c. Tuttavia, quando si verificano interruzioni di input temporizzate o digitali, viene attivato il blocco di interruzione OB2. Questa interruzione viene quindi richiamata dalla libreria per impostare gli output senza ritardo.

_GetMsTimerCount: Viene utilizzato per misurare il tempo in molti processi. Deve essere incluso nel codice. È necessario abilitare la lettura di un valore del timer di un millisecondo.

_CrcCalculate: Viene utilizzato per calcolare i checksum tramite hardware. È necessario assicurarsi che funzioni correttamente a seconda del chip utilizzato.

Comunicazione.c

Questo file contiene il codice necessario per utilizzare Ethernet, la porta seriale e SPI all'interno del PLC. Le chiamate da Modbus e Fulmatic SOFT vengono ricevute in questo file. La coerenza dei dati è garantita dall'avvio della risposta con un ritardo da main.c. Inoltre, il codice per l'aggiornamento del firmware e per le operazioni sulla scheda SD è scritto esplicitamente in questo file. Fulmatic SOFT esegue gli aggiornamenti del firmware e le operazioni sulla scheda SD utilizzando questo codice. È possibile modificare questo codice per eseguire operazioni simili con il proprio software anziché con Fulmatic SOFT. Altre operazioni di Fulmatic SOFT e operazioni Modbus vengono inviate alla libreria e da questa ricevono risposta tramite questo codice. Modificando il codice, è anche possibile rispondere alle chiamate Modbus senza inviarle alla libreria.

Flash.c

Il codice PLC e le informazioni persistenti del timer-contatore vengono salvate nella memoria flash quando il PLC viene spento. Quando il PLC viene riacceso, l'ultimo codice salvato viene letto dal file flash.h. Ricordarsi di impostare le informazioni di settore del chip in uso. È possibile utilizzare il seguente circuito per rilevare quando il PLC è spento.

Questo circuito imposta il pin Shutdown Detect a livello basso quando la tensione scende da 24 volt a circa 19 volt. Il condensatore C1 permette al chip di continuare a funzionare per un breve periodo. Durante questo periodo prolungato, cancellare e riscrivere la memoria flash è rischioso. Pertanto, è necessario seguire i passaggi seguenti.

  • Quando il PLC viene acceso per la prima volta, copiamo il settore 10 nel settore 11. Se l'alimentazione viene interrotta durante l'avvio, i dati integri vengono memorizzati nel settore 11.
  • Per salvare nuovi dati nella memoria Flash, è necessario prima eliminarli. L'eliminazione richiede molto più tempo del salvataggio. Pertanto, eliminiamo il settore 10 all'avvio e attendiamo lo spegnimento.
  • Il circuito di rilevamento dello spegnimento ci fornisce poco più di 1 secondo di tempo. Quando viene rilevato lo spegnimento, i dati vengono salvati nel settore 10 entro 100-200 ms. Poiché il blocco di spegnimento OB 1 verrà eseguito prima dello spegnimento e potrebbe esserci un codice ladder di grandi dimensioni nel PLC, il condensatore C1 dovrebbe essere di almeno 2200 µF. Viene utilizzata una resistenza limitatrice di corrente da 100 ohm per evitare un'eventuale sovratensione nel circuito dovuta all'elevata capacità.
  • All'avvio, il PLC legge tutti i dati presenti nel settore 10 ed esegue un controllo di checksum. Se l'alimentazione viene interrotta durante l'avvio del PLC, il controllo di checksum fallirà. Non preoccupatevi, i dati affidabili sono sempre disponibili nel settore 11. L'avvio avviene automaticamente a partire dal settore 11.

Interruzione.c

In questo file sono presenti gli interrupt per l'ingresso digitale, l'ADC, il timer e la UART. Vengono abilitati e disabilitati in base alla modalità operativa del PLC nella funzione _INTSetup all'interno di Fulmatic.c. Ricorda di adattare il codice di _INTSetup al tuo hardware. Le funzioni in questo file devono essere eseguite rapidamente. Nel nostro codice di esempio, abbiamo utilizzato il comando switch per migliorare la leggibilità del codice. Tuttavia, esistono modi per velocizzarne l'esecuzione. Ad esempio, le operazioni all'interno del comando switch possono essere scritte come funzioni separate.

  • void Handle_Encoder(void)
  • void (*EXTI0_Handler_Ptr)(void);
  • A seconda della selezione effettuata con Fulmatic SOFT in INTSetup: EXTI0_Handler_Ptr = Handle_Encoder;
  • Quando si verifica un interrupt: esegui EXTI0_Handler_Ptr(); all'interno di EXTI0_IRQHandler.

Un altro metodo di accelerazione è la conversione da byte a 32 bit. È possibile utilizzare questo codice per la serie STM: *(int32_t *)&PlcIO[EncIAdr[0]] = __rev(ValueS32);

Non dovremmo usare la libreria HAL per cancellare i flag di interruzione. Dovremmo invece preferire il metodo più veloce di modificare direttamente il valore del registro. TIM3->SR = 0; //__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);

Interruzioni di ingresso digitale: Viene utilizzato per contatori ad alta velocità, encoder e applicazioni simili.

ADC: Non utilizziamo il DMA; eseguiamo le operazioni di lettura ADC all'interno dell'interrupt. Questo ci consente di eseguire operazioni di filtraggio.

Timer: Lo utilizziamo per un timer in millisecondi e per le uscite PTO. Non è sufficiente che il timer si limiti a interrompersi ogni millisecondo; deve anche contare da 0 a 999.

USART: Gli interrupt della porta seriale vengono utilizzati per la trasmissione e la ricezione dei dati. Inoltre, Fulmatic.c -> _EachMilliSecond contiene le operazioni del pin di abilitazione RS485.

SdCard.c

Le operazioni sulla scheda SD vengono eseguite in questo file. È possibile procedere in modo diverso rispetto al progetto di esempio. Il codice di comunicazione per il caricamento e il download dei file sul PLC è scritto in open source all'interno del file Communication.c. È possibile caricare e scaricare i file utilizzando Fulmatic SOFT. Se il progetto non prevede una scheda SD, è possibile eliminare tutte le funzioni.

principale.c

Questo file cambierà ogni volta che salvi il progetto con Cube MX. Per assicurarti che i tuoi comandi rimangano invariati, devi scrivere il tuo codice nelle aree riservate al codice in Cube MX. /* USER CODE BEGIN 2 */ Scrivi qui il tuo codice. /* USER CODE END 2 */

In questo file è possibile creare tutte le variabili necessarie per la libreria. Potrebbe essere necessario creare array di grandi dimensioni a un indirizzo specifico. `uint8_t PlcEprom[PRGMEMORYSIZE] __attribute__((section(“.ccmram”))));`

Esamina attentamente le operazioni all'interno del ciclo while. Qualsiasi modifica apportata non deve compromettere la struttura complessiva. Il codice scritto in altre parti del programma non deve rallentare questo ciclo.