PLC-tilannekatsaus
Tiimin sisäinen katselmus PLC-ohjelman nykyisestä toteutuksesta (ei asiakkaalle — vrt. PLC-luonnos, joka näyttää suunnitelman lopullisesta ohjelmasta).
Nykytoiminta
Lähde: Anton\Päivitetty10_26\PLC (TwinCAT-projekti) + ABB ACS880 primary control
program -firmware-manuaali (3AUA0000098062), katselmoitu 2026-11-04.
MAIN kutsuu joka skannauskierroksella (10 ms) FB_ConveyorSim-lohkoa, joka tekee
ohjauspäätökset (ramppi, suunnanvaihto, pysähtymismatka, lukitukset) ja antaa
käyntikäskyn, suunnan ja nopeusohjeen FB_DriveModbus-lohkolle.
FB_DriveModbus kommunikoi oikeasti ABB ACS880:n kanssa Modbus TCP:llä
(IP 10.22.60.55): kirjoittaa ControlWordin ja nopeusohjeen, lukee tilasanan ja
todellisen mitatun nopeuden takaisin. Yhteydessä on kunnollinen
virheenkäsittely-/uudelleenyritystilakone. ControlWord-arvot 1150 (477h,
READY TO SWITCH ON) ja 1151 (47Fh, OPERATING) on tarkistettu suoraan ABB:n
viralliselta firmware-manuaalin sivulta 386-387 — ne ovat oikein, "ABB Drives
profile" -sekvenssin mukaiset. Näitä EI tarvitse muuttaa CiA-tyylisiksi
hex-arvoiksi.
FB_ConveyorSim laskee kuljettimen virtuaalisen sijainnin integroimalla
TODELLISTA mitattua nopeutta — S1/S2/S3-anturit johdetaan tästä sijainnista,
eivät ole vielä oikeita fyysisiä rajakytkimiä.
FB_DriveModbus lukee myös taajuusmuuttajan StatusWordin bitin 3 ("Tripped")
ja altistaa sen bDriveFault-lähtönä. MAIN kirjoittaa joka kierros
MotorRunning/DriveCommOK/ActualRPM/DriveFault GVL:ään, ja hälytysloki (FB_Alarm)
laukeaa nyt näistä oikeista signaaleista (Modbus-yhteysvirhe, taajuusmuuttajan
vikatila, kuljettimen asetusvirhe) — ei enää kuvitteellisesta lämpötilasta.
P_WriteFile on yhä kytketty PlcTask-ajoon, mutta sen koko ST-koodi on
kommentoitu pois (2026-11-04) — CSV-lokitus oli jäänne alkuperäisestä
projektista, jonka pohjalta tämä toteutus tehtiin. Tilalle ollaan
toteuttamassa lokitusta MariaDB:hen (TF6420 TwinCAT Database Server):
yhteysprojekti ("DB konfigurointi") on lisätty ratkaisuun, mutta
yhteysasetuksia (palvelin/kanta/salasana) tai PLC:n kirjoituskoodia ei ole
vielä täytetty.
Vanha simulaatioversio (lämpötilamalli, 20→100 % kuormitustesti, puhaltimen
tilakone, enkooderisimulointi) on poistettu kokonaan FB_ConveyorSim.TcPOU:sta
(ei enää edes kommentoituna). GVL:ssä on silti yhä käyttämättömiä muuttujia
tältä ajalta (TempAmb, MotorTemp, rAmbRawTemp, rMotorRawTemp, PulseCount,
PulseFreq, MotorRPM, rTau_s, rKSpeed, rTempOver, bAlarmLog) — mikään koodi ei
kirjoita niihin, MotorTemp pysyy aina 0:ssa. HMI:stä (Diagnostiikka,
Parametrit) nämä harhaanjohtavat kentät poistettiin 2026-11-04, mutta
GVL-siivous on yhä tekemättä.
FB_ConveyorSim sai 2026-11-04 oikean nopeusohjeen ramppauksen: rMotorSpeed
ei enää hypähdä suoraan tavoitearvoon, vaan lähestyy sitä Kiihdytysaika-/
Hidastusaika-parametrien (tRampUp/tRampDown) mukaisella nopeudella
(uudet sisäiset muuttujat rMotorSpeedTarget, rMotorSpeedRamp). Sama
Hidastusaika-arvo ohjaa nyt sekä pysähtymismatkan ennakointia että itse
nopeusohjeen laskua — aiemmin nämä olivat ristiriidassa (ennakointi oletti
ramppia, ohje hyppäsi suoraan). Lisäksi Maksiminopeus (GVL.rMaxSpeed_mps,
m/s) muunnetaan nopeusohjeprosentiksi ja leikkaa sekä automaatti- että
käsiajon nopeusohjetta, ja Vetopyörän koko (GVL.rGearPerRev, ympärysmitta)
on nyt oikeasti kytketty FB_ConveyorSimin rWheelDiameter-tuloon (oli
aiemmin kovakoodattu 0.1 MAIN.TcPOU:ssa) — molemmat olivat ennen pelkkiä
koristekenttiä Parametrit-sivulla, eivät vaikuttaneet mihinkään.
EI OLE VIELÄ TESTATTU OIKEALLA KULJETTIMELLA.
Hälytysloki (aAlarmLog) sai 2026-11-04 kuittaustoiminnon: ST_Alarm-rakenteen
bActive-kenttä kirjoitettiin jo aiemmin FB_Alarmissa, mutta mikään ei
koskaan lukenut tai nollannut sitä, eikä sitä näytetty HMI:llä. Nyt
"Kuittaa hälytykset" -painike (GVL.CmdAckAlarms) nollaa kaikkien rivien
bActive-lipun MAIN.TcPOU:ssa, ja Hälytykset-näytön taulukossa on oma
Aktiivinen-sarake.
FB_DriveModbus.nErrorID (TwinCATin oman Modbus-asiakkaan virhekoodi) tuotiin
2026-11-04 GVL.ModbusErrorID:nä Diagnostiikka-näytölle — ACS880:n OMAA
vikakoodia (erillinen rekisteri, riippuu ryhmien 52/53 kartoituksesta) ei
vielä lueta, koska rekisteriosoitetta ei ole varmistettu koululla.
Trendit-näytölle toteutettiin 2026-11-04 yksinkertainen väliaikainen
trendikaavio: GVL.aTrendRPM/aTrendPos ovat 120 näytteen kiertäviä
RAM-puskureita (MAIN.TcPOU täyttää niitä 1 Hz:llä, n. 2 min historia),
jotka piirretään TcHmiLineChart-kontrollilla. Ei säily PLC:n
uudelleenkäynnistyksessä — korvataan myöhemmin pysyvällä
Historize/SQLite- tai MariaDB-pohjaisella toteutuksella.Ratkaistu
- Modbus TCP -yhteys oikeaan ABB ACS880:aan (FB_DriveModbus): kirjoitus (ControlWord + nopeusohje) ja luku (tilasana + mitattu nopeus) - Käynnistyslukitukset: bReady-ehto (yhteys + nopeustieto + asetukset kunnossa), uudelleenkäynnistyksen esto vikatilanteen jälkeen kunnes napit vapautettu - Pysähtymismatkan laskenta oikeasta hidastusajasta + automaattinen suunnanvaihto radan päässä nollanopeuden varmistuksella (200 ms) - Käsiajo uudella rakenteella, taajuusmuuttaja hoitaa oman rampituksensa - ControlWord-arvot (1150/1151) vahvistettu oikeiksi ABB:n virallisesta manuaalista — ei tarvinnut korjata - [2026-11-04] Hälytysloki korjattu: laukeaa nyt Modbus-yhteysvirheestä, taajuusmuuttajan vikatilasta (StatusWord bitti 3) ja kuljettimen asetusvirheestä kuvitteellisen lämpötilan sijaan - [2026-11-04] ~460 riviä kuollutta kommentoitua simulaatiokoodia poistettu FB_ConveyorSim.TcPOU:sta - [2026-11-04] Nopeusohjeen ramppaus toteutettu: Kiihdytysaika/Hidastusaika vaikuttavat nyt oikeasti nopeusohjeeseen, eivät enää pelkkään pysähtymismatkan arviointiin (EI vielä testattu oikealla laitteistolla) - [2026-11-04] Maksiminopeus (rMaxSpeed_mps) ja Vetopyörän koko (rGearPerRev) kytketty oikeasti toimiviksi — olivat aiemmin irrallaan PLC-logiikasta vaikka näkyivät muokattavina Parametrit-sivulla - [2026-11-04] Hälytysten kuittaus toteutettu (bActive-kenttä otettu käyttöön, "Kuittaa hälytykset" -painike ja Aktiivinen-sarake HMI:lle) - [2026-11-04] CSV-lokitus (P_WriteFile) kommentoitu pois jäänteenä alkuperäisestä projektista — tilalle MariaDB-lokitus suunnitteilla (ks. Ratkaisematta)
Bugit / epäjohdonmukaisuudet
Ei tällä hetkellä tiedossa olevia PLC-koodin bugeja (päivitetty 2026-11-04, kolme aiemmin tunnettua korjattu, ks. Ratkaistu-osio). HUOM [2026-11-04]: nopeusohjeen ramppaus- ja maksiminopeuslogiikka (FB_ConveyorSim) on uutta eikä sitä ole koskaan käännetty tai ajettu oikeassa TwinCATissa — ei tiedossa olevia bugeja, mutta ei myöskään vahvistettu virheettömäksi. Ensimmäinen Build koululla on pakollinen ennen testiajoa.
Ratkaisematta / seuraavat askeleet
1. S1/S2/S3 ovat yhä virtuaalisia (lasketaan sijainnista, ei oikeista
rajakytkimistä). Päätettävä tuleeko oikeita antureita vai jääkö
pysyvästi virtuaaliseksi.
2. Lämpötila, pulssianturi/enkooderi ja puhaltimen ohjaus puuttuvat
kokonaan uudesta koodista. Jos näitä halutaan oikeasti, täytyy
toteuttaa uudelleen oikealla I/O:lla — ei palauttaa vanhaa simulaatiota.
3. GVL:ssä on useita käyttämättömiä muuttujia vanhalta ajalta (TimeScale,
FaultSim, bFanAuto, CmdTestDrive, ModeAuto ym.) — siivottavaksi kun
varmuus tarpeista on saavutettu. [2026-11-04] Listaan lisätty myös
vanhan lämpötilasimulaation jäänteet (TempAmb, MotorTemp, rAmbRawTemp,
rMotorRawTemp, PulseCount, PulseFreq, MotorRPM, rTau_s, rKSpeed,
rTempOver, bAlarmLog) — HMI ei enää näytä niitä, mutta GVL-tason
siivous on tekemättä.
3b. [2026-11-04] MariaDB-lokitus kesken: "DB konfigurointi" -yhteysprojekti
on lisätty ratkaisuun TF6420 Database Serverillä, mutta palvelin/kanta/
käyttäjätiedot ja salasana (syötettävä XAE:n dialogissa, ei tekstinä)
puuttuvat, eikä PLC-puolen kirjoituskoodia (FB_SQLDatabaseEvt/
FB_SQLCommandEvt tai FB_PLCDBWriteEvt) ole vielä kirjoitettu. CSV-lokitus
on jo kommentoitu pois, joten mitään lokitusta ei tällä hetkellä tapahdu.
3c. [2026-11-04] ACS880:n oma vikakoodi (erillinen rekisteri, ei sama kuin
StatusWordin "Tripped"-bitti) ei ole luettavissa ennen kuin ryhmien
52/53 rekisterikartoitus on varmistettu koululla — ks. kohta 4b.
4. [2026-11-04, tarkennettu] MODBUS-YHTEYS TAMUUN — kolme eri fyysistä
taajuusmuuttajaa koulun luokassa, eri tilanteessa kukin. Vaatii käynnin
koululla, ei korjattavissa etänä.
Tamu 1 (kaksi RJ-45-liitäntää tamun sisällä: A-paikka EtherCAT,
B-paikka Modbus):
- Modbus-yhteys B-paikkaan TOIMII (kommunikaatio onnistuu, laite
vastaa kyselyihin)
- MUTTA PLC:n nykyinen ControlWord-logiikka (1150/1151, täysi ABB
Drives -profiilin READY TO SWITCH ON / OPERATING -sekvenssi) EI
käynnistä laitetta — tämän yksittäisen laitteen parametrointi on
poikkeava: vain ControlWordin bitti 0 käynnistää/sammuttaa laitteen
ja bitti 1 määrää suunnan, ei koko 16-bittistä ABB Drives -profiilia
- Tarkempi, lopullinen parametrointiohjeistus odottaa yhä uusien
kenttäväyläkorttien saapumista — ei siis välttämättä vielä
lopullinen tila
- FB_DriveModbus.TcPOU:n ControlWord-logiikkaa EI OLE vielä muutettu
vastaamaan tätä bitti0/bitti1-skeemaa — odottaa päätöstä kannattaako
tehdä jo nyt vai vasta kun lopullinen ohjeistus saadaan
Tamu 2 ("demolaite", vain yksi RJ-45 tamun sisällä, pelkkä Modbus
A-paikassa):
- Yhteys EI TOIMI ollenkaan
Tamu 3:
- Lisäkortti tunnistuu tamulle EtherCAT-tyyppiseksi, mutta ei ole
testattu tarkemmin — ei tiedossa toimiiko mihinkään
Yhteenveto: yksikään kolmesta ei toimi suoraan nykyisellä PLC-koodilla
sellaisenaan. Lupaavin on Tamu 1 (yhteys toimii), mutta vaatii
ControlWord-logiikan mukauttamisen sen bitti0/bitti1-skeemaan ennen
kuin käynnistys onnistuu sitä kautta.