Ang aming layunin: Ang mismong aklatang ito PLCIto ay dinisenyo para sa iyo upang makagawa ng sarili mo. Nagbibigay ito sa iyo ng pinakamataas na antas ng kontrol sa hardware. Fulmatic SOFT Ang layunin ay bumuo ng isang ecosystem ng mga device na maaaring i-program gamit ang malaking library na ito. Maaari mong gamitin ang library na ito sa anumang chip at IDE na gusto mo. Maaari mong tukuyin ang circuit diagram at lahat ng iba pang mga detalye ng hardware nang mag-isa.
Fulmatic SOFT: Idagdag ang Fulmatic Core library sa iyong chip code ayon sa mga tagubilin, at maaari mo na ngayong patakbuhin ang iyong mga embedded system. Fulmatic SOFT gaano karami hagdan (IEC 61131-3Programa sa wikang ( ). Fulmatic SOFT Bukod sa lahat ng katangian ng mga modernong PLC, mag-aalok ito sa iyo ng higit pa sa isang PLC na may mga utos na TCP, UDP, Motion, at SD Card. May 771 na bloke (255 DB, 256 PB, 256 FB, at 4 OB) at 16384 IO, ang Fulmatic SOFT ay nag-aalok sa iyo ng napakalaking espasyo.
Libreng Firmware ng PLC: PLC Maaari mong gamitin ang library nang libre hanggang 2048 bytes (1026 bytes ang ginagamit ng DB0). Magkakaroon ng lisensya kung kinakailangan ang mas malaking memorya. (10 USD) Kailangan mong bumili ng lisensya. Kung walang lisensya, ang PLC ay tatakbo nang 60 minuto. Ang aming transparent na modelo ng paglilisensya ay walang kasamang mga kontrata o kumplikadong proseso. Dapat kang magdagdag ng TSHA204A-SSHDA chip sa iyong circuit. Isang susi ang ibibigay sa iyo sa pagbili ng lisensya. Aplikasyon sa paglilisensya Ang key na ito ay kokonekta sa ating server at ia-upload ang license code sa chip sa pamamagitan ng serial port o Ethernet. Ang bilang ng mga lisensya sa server ay sabay na mababawasan.
Github: PLC Para subukan ang library, maaari mong i-download ang aming sample project na inihanda para sa STM32F407VGTx gamit ang VS Code mula sa GitHub. https://github.com/FultekPLC/Plc-Firmware
Sa proyektong ito, makikita mo ang buong firmware ng PLC, na ginagamit ang halos lahat ng feature ng chip, at available bilang open source. Kubo MX Maaari mong baguhin ang mga detalye ng hardware ng chip gamit ang software at ipagpatuloy ang paggawa sa parehong proyekto. Maaari mong baguhin ang mga detalye ng hardware at software gamit ang VS Code. Maaari kang magdagdag ng mga custom na function sa firmware ng PLC at... PLC Maaari mong patakbuhin ang code mula sa loob. Maaari mong gamitin ang anumang tatak at modelo ng ARM chip na gusto mo, at tukuyin ang bilang at mga uri ng I/O. Sa madaling salita, maaari mong gamitin ang Fulmatic Core library nang walang anumang mga paghihigpit, alinsunod sa mga tuntunin ng lisensya.
Pag-update ng Firmware: Ang iyong mga customer na gumagamit ng iyong produkto PLC Maaaring isagawa ang mga pag-update ng firmware gamit ang Fulmatic SOFT. Ang PLC firmware update code ay ganap na open source, at maaari mong makita at baguhin ang bootloader code sa halimbawang proyekto. Bukod sa code na aming iminumungkahi, maaari ka ring sumulat ng sarili mong bootloader code.



Gabay sa Kodigo
256 KB Nagsusumikap kaming gawing madali para sa iyo ang paggamit ng halimbawang proyekto. Ang 256 KB ng code para sa isang chip ay isang malaking proyekto. Ang pag-unawa, pagbabago, at pagpapatupad ng isang proyektong ganito kalaki ay hindi magiging madali. Sinubukan naming ipaliwanag ang mga function sa pahinang ito at sa code. Nagsusumikap din kaming ipaliwanag ang mga ito nang mas mahusay. Susubukan naming sagutin ang iyong mga tanong hangga't maaari sa seksyon ng mga talakayan ng aming Github repository. Sa kasamaang palad, hindi kami nagbibigay ng libreng suporta para sa Fulmatic Core. Maaari kang humingi ng sipi mula sa amin upang pangasiwaan ang lahat ng proseso para sa iyo, kabilang ang disenyo ng circuit board.
Maaari mong i-download ang halimbawang proyekto mula sa aming link sa Github: https://github.com/FultekPLC/Plc-Firmware Sa halimbawang proyekto, maaari mong tingnan at baguhin ang lahat ng mga tampok ng PLC gamit ang open-source code. Maaari mong alisin ang mga function na hindi mo kailangan at magdagdag ng mga bagong function.
Makikita mo ang lahat ng impormasyon tungkol sa mga IDE at mga build tool sa aming GitHub repository. Sa pahinang ito, ipapaliwanag namin ang mga function na ginagamit para sa pagsasama ng library sa iyong MCU code.
FulmaticConfig.h
Ang bersyon ng firmware at mga kahulugan ng laki ng string ay ginawa sa file na ito.
FulmaticCore.h
Ang file na ito ay naglalaman ng mga header ng mga function sa loob ng library na tatawagin mo mula sa iyong MCU code. Makikita mo ang mga paglalarawan ng lahat ng function sa file na ito. Gumagana ang library sa maraming variable at string. Dapat mong likhain ang mga string at variable na ito sa iyong MCU code. Ang istrukturang `variables_TypeDef` ay ginagamit upang ipasa ang mga variable na iyong nilikha sa library. Hindi mo maaaring baguhin ang istrukturang ito.
FulmaticInitKailangan lang i-activate ang chip nang isang beses kapag unang naka-on. Kapag ang return ay 1, nangangahulugan ito na nabasa nang tama ang license chip at gumagana ito sa ilalim ng lisensya.
FulmaticExecute: sa loob ng main.c Hagdan ng PLC Ito ang tungkuling tinatawag upang isagawa ang code. Tinatawag ito sa panahon ng Startup block (kapag nagsisimula ang PLC), sa Main block (sa bawat cycle), sa Shutdown block (kapag huminto ang PLC), at kapag may nangyayaring digital input interrupt sa loob ng Interrput.c, at gayundin sa isang time-based (Timer) interrupt sa loob ng Fulmatic.c.
Fulmatic.c
Ang lahat ng mga function na kinakailangan para magamit ang library sa iyong code ay nakalap sa Fulmatic.c file. Ang file na ito ay sumasangayon sa iba pang mga file. Pinagsasama-sama namin ang mga function sa ilalim ng apat na heading. Ang mga paglalarawan ng mga function ay nakasulat sa file kung saan matatagpuan ang katawan ng function.
- Mga function na kinakailangan para sa halimbawang proyekto na hindi ginagamit ng library.
- Mga function na ginagamit ng library na dapat kasama sa iyong code.
- Mga tungkuling ginagamit ng aklatan para sa mga layunin ng paglilisensya. Mga tungkuling hindi kinakailangan para sa walang lisensyang paggamit.
- Ang mga tungkulin ng library ay nakadepende sa mga utos ng PLC na ginagamit. Halimbawa, kung ang mga operasyon tulad ng TCP, UDP, SPI, serial port, at SD card ay hindi ginagamit sa iyong PLC, gagana ang library nang wala ang mga tungkuling ito.
_DefaultEprom: Kasama sa mga setting ng hardware na mapipili gamit ang Fulmatic SOFT ang PlcSetupEprom[STPMEMORYSIZE] at hagdan Ang code ay nakaimbak sa mga array ng PlcEprom[PRGMEMORYSIZE]. Ang function na _DefaultEprom sa file na ito ay naglalaman ng mga default na setting ng PLC. Maaari mong i-customize ang configuration sa isang tiyak na lawak gamit ang mga array na ito sa iyong code.
Bawat Mili Segundo: Ang function na ito, na tumatakbo bawat millisecond, ay isinasagawa mula sa loob ng pangunahing file at ng library. Sa halimbawang proyekto, ang mga flag ay itinatakda gamit ang TIM7_IRQHandler sa Interrupt.c, hindi direktang isinasagawa. Bukod pa rito, ang halaga ng TIM7->ARR ay naka-calibrate gamit ang RTC. Pakisuri ang function na _RtcCalibration sa Fulmatic.c. Ang maling pagkakalibrate ay magiging sanhi ng pagtakbo ng lahat ng operasyon na nakabatay sa oras sa PLC na may maliliit na error.
_Pag-antalaUs: Maaaring kailanganin mong baguhin ang code upang matiyak na tumpak itong naka-calibrate sa frequency ng chip. Dapat mo itong subukan at i-calibrate sa loob ng mahabang panahon. Naka-calibrate ito para sa 168 MHz.
Mga Output ng Set: Karaniwan, ang mga input ay binabasa at ang mga output ay isinusulat sa loob ng main.c. Gayunpaman, kapag may mga time-based o digital input interrupt, ang OB2 interrupt block ay nati-trigger. Ang interrupt na ito ay tinatawag mula sa loob ng library upang itakda ang mga output nang walang pagkaantala.
_Kunin ang Bilang ng MsTimer: Ginagamit ito para sa pagsukat ng oras sa maraming proseso. Dapat itong kasama sa iyong code. Dapat mong paganahin ang pagbabasa ng isang halaga ng timer na may isang milisegundo.
_CrcKalkulahin: Ginagamit ito upang kalkulahin ang mga checksum gamit ang hardware. Dapat mong tiyakin na gumagana ito nang tama depende sa chip na iyong ginagamit.
Komunikasyon.c
Ang file na ito ay naglalaman ng kinakailangang code para sa paggamit ng Ethernet, serial port, at SPI sa loob ng PLC. Ang mga tawag mula sa Modbus at Fulmatic SOFT ay natatanggap sa file na ito. Tinitiyak ang pagkakapare-pareho ng data sa pamamagitan ng pagsisimula ng tugon na may pagkaantala mula sa main.c. Bukod pa rito, ang firmware update at SD card code ay tahasang nakasulat sa file na ito. Ang Fulmatic SOFT ay nagsasagawa ng mga firmware update at mga operasyon ng SD card gamit ang code na ito. Maaari mong baguhin ang code na ito upang magsagawa ng mga katulad na operasyon gamit ang iyong sariling software sa halip na Fulmatic SOFT. Ang iba pang mga operasyon ng Fulmatic SOFT at mga operasyon ng Modbus ay ipinapadala at tinutugunan ng library sa pamamagitan ng code na ito. Sa pamamagitan ng pagbabago ng code, maaari ka ring tumugon sa mga tawag ng Modbus nang hindi ipinapadala ang mga ito sa library.
Flash.c
Ang PLC code at ang impormasyon ng persistent timer-counter ay ini-save para mag-flash kapag naka-off ang PLC. Kapag muling naka-on ang PLC, ang huling naka-save na code ay binabasa mula sa flash.h file. Tandaang itakda ang impormasyon ng sektor ng chip na iyong ginagamit. Maaari mong gamitin ang sumusunod na circuit upang matukoy kung kailan naka-off ang PLC.

Itatakda ng circuit na ito ang Shutdown Detect pin na mababa kapag bumaba ang boltahe mula 24 volts hanggang humigit-kumulang 19 volts. Ang C1 capacitor ay nagpapahintulot sa chip na patuloy na gumana sa loob ng maikling panahon. Sa mahabang panahong ito, mapanganib ang pagbura at muling pagsusulat ng flash. Samakatuwid, dapat sundin ang mga sumusunod na hakbang.
- Kapag unang pinaandar ang PLC, kinokopya natin ang sector 10 papunta sa sector 11. Kung maputol ang kuryente habang nagsisimula, ang buong datos ay nakaimbak sa sector 11.
- Para makapag-save ng bagong data sa Flash, kailangan mo muna itong burahin. Mas matagal ang pagbura kaysa sa pag-save. Kaya naman, binubura natin ang sector 10 sa startup at hinihintay ang pag-shutdown.
- Ang shutdown detection circuit ay nagbibigay sa atin ng mahigit isang segundong oras. Kapag natukoy ang shutdown, ang data ay sine-save sa sector 10 sa loob ng 100-200 ms. Dahil ang OB 1 shutdown block ay tatakbo bago ang shutdown at maaaring mayroong malaking ladder code sa PLC, ang C1 capacitor ay dapat na hindi bababa sa 2200 µF. Isang 100-ohm current limiting resistor ang ginagamit upang maiwasan ang shock sa circuit mula sa malaking capacitance.
- Kapag nagsimula ang PLC, binabasa nito ang lahat ng datos sa sektor 10 at nagsasagawa ng checksum check. Kung maputol ang kuryente habang nagsisimula ang PLC, mabibigo ang checksum check. Huwag mag-panic, laging may maaasahang datos na makukuha sa sektor 11. Awtomatikong ginagawa ang startup mula sa sektor 11.
Interrupt.c
Ang mga digital input, ADC, Timer, at UART interrupt ay matatagpuan sa file na ito. Ang mga ito ay pinagana at hindi pinagana ayon sa PLC operating mode sa _INTSetup function sa loob ng Fulmatic.c. Tandaan na iakma ang _INTSetup code sa iyong hardware. Ang mga function sa file na ito ay kailangang tumakbo nang mabilis. Sa aming halimbawang code, ginamit namin ang switch command upang mapabuti ang pagiging madaling mabasa ng code. Gayunpaman, may mga paraan upang mapabilis ito. Halimbawa, ang mga operasyon sa loob ng switch command ay maaaring isulat bilang magkakahiwalay na mga function.
- walang bisa Handle_Encoder(walang bisa)
- walang bisa (*EXTI0_Handler_Ptr)(walang bisa);
- Depende sa pagpili na ginawa gamit ang Fulmatic SOFT sa INTSetup: EXTI0_Handler_Ptr = Handle_Encoder;
- Kapag nagkaroon ng interrupt: Patakbuhin ang EXTI0_Handler_Ptr(); sa loob ng EXTI0_IRQHandler.
Ang isa pang paraan ng pagpapabilis ay ang byte-to-32 bit conversion. Maaari mong gamitin ang code na ito para sa seryeng STM: *(int32_t *)&PlcIO[EncIAdr[0]] = __rev(ValueS32);
Hindi natin dapat gamitin ang HAL library para i-clear ang mga interrupt flag. Sa halip, dapat nating piliin ang mas mabilis na paraan ng direktang pagbabago sa halaga ng register. TIM3->SR = 0; //__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
Mga digital input interrupt: Ginagamit ito para sa mga high-speed counter, encoder, at mga katulad na aplikasyon.
ADC: Hindi tayo gumagamit ng DMA; nagsasagawa tayo ng mga operasyon sa pagbasa ng ADC sa loob ng interrupt. Ito ay nagbibigay-daan sa atin na magsagawa ng mga operasyon sa pagsala.
timer: Ginagamit natin ito para sa isang millisecond timer at mga PTO output. Hindi sapat para basta-basta i-interrupt ng timer ang bawat millisecond; dapat din itong magbilang mula 0 hanggang 999.
USART: Ang mga serial port interrupt ay ginagamit para sa pagpapadala at pagtanggap ng data. Bukod pa rito, ang Fulmatic.c -> _EachMilliSecond ay naglalaman ng mga operasyon ng RS485 enable pin.
SdCard.c
Ang mga operasyon ng SD card ay isinasagawa sa file na ito. Maaari mo rin itong gawin nang iba kaysa sa aming halimbawang proyekto. Ang mga communication code para sa pag-upload o pag-download ng mga file sa PLC ay nakasulat sa open source sa loob ng Communication.c. Maaari kang mag-upload at mag-download ng mga file gamit ang Fulmatic SOFT. Kung ang iyong proyekto ay walang SD card, maaari mong burahin ang lahat ng function.
pangunahing.c
Magbabago ang file na ito tuwing ise-save mo ang proyekto gamit ang Cube MX. Para matiyak na hindi magbabago ang iyong mga utos, dapat mong isulat ang iyong code sa mga lugar na nakalaan para sa iyong code sa Cube MX. /* USER CODE BEGIN 2 */ Isulat ang iyong code dito. /* USER CODE END 2 */
Maaari mong gawin ang lahat ng mga variable na kinakailangan para sa library sa file na ito. Maaaring kailanganin mong gumawa ng malalaking array sa isang partikular na address. `uint8_t PlcEprom[PRGMEMORYSIZE] __attribute__((section(“.ccmram”)));`
Maingat na suriin ang mga operasyon sa loob ng while loop. Anumang mga pagbabagong gagawin mo ay hindi dapat makagambala sa pangkalahatang istruktura. Ang code na nakasulat sa ibang bahagi ng iyong programa ay hindi dapat magpabagal sa loop na ito.
