This shows you the differences between two versions of the page.
pm:prj2023:ibradu:programmableplc [2023/05/19 19:39] mihai.costin [Hardware Design] |
pm:prj2023:ibradu:programmableplc [2023/05/31 12:53] (current) mihai.costin [Bibliografie/Resurse] |
||
---|---|---|---|
Line 11: | Line 11: | ||
Interpretarea programelor în Structured Text se va desfășura în felul următor: programatorul va scrie codul conform standardului (la care am adăugat mici modificări pentru a ne permite scrierea și citirea pe pinii plăcuței), după care acesta va fi trecut printr-un parser care va scrie cod echivalent in Web Assembly. După aceea, codul nou obținut va fi compilat, iar rezultatul compilării va fi încărcat în memoria plăcuței și interpretat. | Interpretarea programelor în Structured Text se va desfășura în felul următor: programatorul va scrie codul conform standardului (la care am adăugat mici modificări pentru a ne permite scrierea și citirea pe pinii plăcuței), după care acesta va fi trecut printr-un parser care va scrie cod echivalent in Web Assembly. După aceea, codul nou obținut va fi compilat, iar rezultatul compilării va fi încărcat în memoria plăcuței și interpretat. | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | |||
+ | Componente Hardware: | ||
+ | >1x ESP32 | ||
+ | >1x eeprom | ||
+ | >1x RTC | ||
+ | >2x I2C I/O extender | ||
+ | >32x relee solid-state | ||
+ | >12x amplificatoare operationale | ||
+ | >Rezistori si condensatori de decuplare | ||
Pentru a avea acelasi numar de intrari si iesiri ca un PLC normal, am folosit block-uri de extendere de I/O. | Pentru a avea acelasi numar de intrari si iesiri ca un PLC normal, am folosit block-uri de extendere de I/O. | ||
Line 21: | Line 30: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Mediu de dezvoltare: | ||
+ | -IntelliJ, cu plugin-ul de ANTLR \\ | ||
+ | -Visual Studio Code \\ | ||
+ | -Wasm3 \\ | ||
+ | -FreeRTOS \\ | ||
- | <note tip> | + | Interpretor de Structured Text |
- | Descrierea codului aplicaţiei (firmware): | + | > Structured Text este unul din limbajele acceptate pentru programarea PLC-urilor. Pentru a ramane fideli conceptului de PLC, am ales sa il folosim si noi in scrierea de programe pentru PLC-ul nostru. Pentru ca microprocesorul de pe ESP32 sa il inteleaga, am creat, prin intermediul ANTLR, un parser pentru acest limbaj, care imi transfera codul in Web Assembly. Dupa aceasta transformare, este usor sa ii verific corectitudinea si sa il compilez. Pentru a incarca codul astfel obtinut pe placuta, ma voi folosi de modulul de WiFi al acesteia pentru a incarca fisierul si de wasm3 pentru a il interpreta. Aceasta este o solutie mult mai simpla decat dacda as fi incercat sa fac de la 0 un compilator pentru structured text. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
+ | In urma realizarii proiectului, parser-ul de Structured Text reuseste sa genereze cod de WebAssembly | ||
+ | {{:pm:prj2023:ibradu:demowasm.png?400|}} | ||
+ | {{:pm:prj2023:ibradu:wasmdemo.png?600|}} | ||
+ | Incarcarea programului pe placuta ESP conduce la un boot loop, ramane sa investighez motivul. | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | In urma acestui proiect, am inceput sa stapandesc mai bine Web Assembly si partea de gramatica a unui limbaj de programare. In acelasi timp, m-am familiarizat cu Structured Text si standardul IEC 61131, utilizat in programarea PLC-urilor. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | ||
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | Repo de git pentru parserul de Structured Text: https://github.com/mihaicostin34/ST_Parser |
- | </note> | + | |
- | + | ||
- | ===== Jurnal ===== | + | |
- | + | ||
- | <note tip> | + | |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
- | </note> | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||
+ | |||
+ | Documentatie pentru Web Assembly Text: https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format \\ | ||
+ | Standardul IEC 61131: https://en.wikipedia.org/wiki/IEC_61131 \\ | ||
+ | Datasheet ESP: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf | ||