CX Programmer ohjelmisto 1. Yleistä CX- Programmer on kehitetty CS1- ja CJ1-logiikoiden ohjelmointiohjelmaksi, mutta se tukee myös lähes kaikkia Omronin (ei C20H) logiikoita. Yksi projekti voi sisältää useita logiikoita. Useampia CX- Programmereita voidaan käynnistää samanaikaisesti, ohjelmointitapoina on relekaavio (ladder) ja käskylista. Yhteisten muuttujien ja laitemäärittelyjen hyödyntäminen muiden CX- Serveriä käyttävien ohjelmistojen kesken on mahdollista. Uuden projektin aloitus: Käynnistetään CX- programmer Start-valikosta Ohjelmat CX-One CX-programmer. Valitaan File/New uutta projektia varten. Ensimmäiseksi määritellään logiikat ja niiden käyttämä kommunikointitapa PC:lle. Kuva1. Lisätään projektiin tarvittavat logiikat ja nimetään sekä konfiguroidaan yhteydet, esimerkiksi ethernet yhteys IP-osoitteeseen 10.100.100.4 Logiikan konfiguroinnin jälkeen on syytä tallentaa projekti (File-valikko/Save tai Save As). Tallennus tehdään cxp-formaattiin tai vaihtoehtoisesti tekstiformaattiin CXT. Projektin avaus tapahtuu samoin File- valikosta (Open). Kuva2. Projektinäkymä CX- programmer-ikkunassa.
2. Projektin valikot 1. File - valikko 2. Edit - valikko
3. View valikko 4. Insert valikko Rung lisää uuden virtapiirin nykyisen ylä- tai alapuolelle. Row lisää uuden rivin nykyisen kohdalle. Column lisää uuden sarakkeen nykyisen kohdalle. Myös elementtien lisäys voi tapahtua seuraavilta riveiltä: -sulkeutuva, avautuva kosketin, myös OR-piiri -vaaka- tai pystyviivat -Coil lisää outputin -Instruction lisää käskyn (myös ajastimet, laskurit)
5. PLC valikko Work Online ottaa yhteyden logiikkaan. Work Online Simulator (sininen kohdistin) käynnistää CX- Simulator-ohjelmiston (jos asennettu). Auto Online mahdollistaa automaattisen sarja-porttiasetusten hakemisen logiikalta ja ottaa yhteyden sekä lataa ohjelmankin logiikasta PC:lle. Operating Mode: - Run - Monitotr - Program Monitor kytkee ohjelman monitoroinnin päälle. Differential Monitor ilmoittaa vaikka äänimerkin, kun valitun bitin tila muuttuu. Compile All PLC Programs kääntää kaikki logiikan ohjelmat, tulokset ovat nähtävissä output- Ikkunasta. AutomaticAllocation kytkee symbolien automaattisen osoitteistuksen päälle. Transfer sallii ohjelmien siirron logiikkaan tai Logiikalta PC:lle. Protection-toiminnolla voidaan asettaa ja vapauttaa logiikan salasana Edit sallii projektin toimintojen editoinnin Data Trace ja Time Chart Monitoring avaavat Trace- editorin valitulle toiminnolle. Force- toiminnolla tehdään pakko-ohjaus biteille ja Settoiminnolla arvojen kirjoitus. 6. Program ja Tools valikot Compile kääntää kyseisen taskin (ohjelma) OnLine Edit: - kytkee valitut virtapiirit Online Edit- tilaan - lähettää muutokset logiikkaan Selection/Rung Manager avaa editorin, jossa voidaan tarkastella logiikan ohjelman blokkeja ja niiden jaotteluja. Muokkauksia voidaan tehdä virtapiiritasolla. Network Configuration Tool avaa CX-serverin verkkoohjelmiston CX Net, jolla luodaan datalinkkejä ja reititystauluja. Options valinnalla voidaan muokata ohjelmanäkymää. 7. Window - valikot New Window avaa uuden ikkuna. Close All sulkee kaikki ikkunat. Next/prev Docked siirtää kohdistimen seuraavaan tai edelliseen ikkunaan. Cascade kytkee ikkunat limittäin.
3. Projektin hallinta Projektin hallinnan ohjelmat/toiminnot saadaan avattua helposti hiiren tuplaklikillä. Hiiren oikealla painikkeella saadaan avattua pikavalikko toiminnolle. Projektin hallinta (Project Workspace) Projekti ja sen logiikat (OMRON04 on auki) symbolit (globaliiset) I / O taulu logiikan asetukset flash muistikortti virhelogit logiikan kello logiikan muisti Ohjelmat (taskit) symbolit (local) ohjelmablokit (sektiot) Pikavalikko, joka avautuu logiikan kohdalta hiiren oikealla painikkeella. logiikan asetusten muuttaminen ohjelman eli taskin lisääminen yhteys logiikkaan tai sen katkaisu toimintamoodin valinta:program, run tai monitor logiikan ohjelmien lataaminen tai vertailu: -lataus logiikkaan (Transfer To PLC) -lataus logiikasta (Transfer from PLC) -vertailu logiikkaan Compare With PLC -lataukset tiedostoon / tiedostosta
Projektin hallinnassa kaksoisklikkaamalla Memory :a voidaan lukea, monitoroida ja kirjoittaa valittuja muistialueita sanamuotoisesti eri formaateissa. PLC Errors toiminnon avulla voidaan tarkastella: o Errors logiikassa sillä hetkellä olevia virheitä o Error Log logiikan virhehistoriaa o Messages tulostuvat, kun logiikkaohjelmassa oleva MSG-käsky aktivoituu Clock ikkunassa Synchronise-toiminnan avulla voidaan asettaa logiikan kello aikaan. Kuva 3. PLC:n kellon synkronointi Logiikan ohjelmiin kuuluvat paikalliset (local) symbolit sekä ohjelmablokit. Ohjelman blokkirakenne avataan ohjelmaeditoriin tuplaklikillä tai valitsemalla pikavalikosta Open. Insert-section valinnalla voidaan lisätä ohjelmaan blokki (section). Compile valinnalla käännetään kyseinen ohjelma, jolloin tulokset saadaan output-ikkunaan. Ohjelman symbolit ovat ohjelmakohtaisia eli ne eivät ole käytettävissä muissa logiikan taskeissa. Nämä lokaalit symbolit ovat prioriteetiltaan suurempia kuin globaalit.
Symboloinnilla tarkoitetaan logiikkamuuttujien nimeämistä. CX- programmer lähestyy symbolointia nimenomaan symbolinimen, ei osoitteen, kautta. Symboli luodaan siis antamalla sille nimi ja yleensä sille annetaan samalla logiikan absoluuttiosoite sekä mahdollinen kommentti. Address Auto Allocation toiminnon ollessa päällä osoite saadaan muuttujalle automaattisesti. Symbolin datatyyppi on aina määritettävä. Datatyyppi on bittimuuttujalle aina BOOL. Sanapohjaisille muuttujille on useita vaihtoehtoja. Myös vakiot voidaan symboloida datatyypillä NUMBER. Datatyypit: BOOL Bittimuuttuja CHANNEL Yleisluontoinen 16-bittinen arvo (0000.FFFF) DINT 32-bittinen eli kaksoissana, etumerkillinen desimaaliarvo (2147483648 +2147483648) INT 16-bittinen etumerkillinen desimaaliarvo (-32768..32768) LINT 64-bittinen eli long sana LREAL Pitkä IEE -formaatin mukainen liukuluku NUMBER Vakioarvon, ei osoitteen, symbolin tyyppi. Myös ajastimen tai laskurin numero. Yleensä oletusarvona on desimaali, mutta tunnuksella # vakio tunnistetaan heksadesimaaliksi. REAL IEE formaatin mukainen 32 bittinen liukuluku. UDINT 32-bittinen eli tuplasana, etumerkitön desimaaliarvo. UDINT_BCD 32-bittinen etumerkitön BCD-arvo (0 99999999). UINT 16-bittinen etumerkitön desimaaliarvo (0.65535). UINT_BCD 16-bittinen etumerkitön BCD-arvo (0 9999). ULINT 64-bittinen etumerkitön desimaaliarvo. ULINT_BCD 64-bittinen etumerkitön BCD-arvo. 4. Projektin ohjelmointi Ohjelmien eli taskien lisääminen ja muokkaaminen Taskeja käsitellään projektinhallintaikkunassa. Uusia taskeja lisätään pikapainikkeesta tai ohjelman pikavalikosta riviltä Insert Program. Uusi taski listautuu aina aluksi viimeiseksi. Lisätty taski on määrittelemätön. Avataan taskin pikavalikko ja valitaan Properties. Nyt päästään määrittämään taskin nimi, tyyppi ja numero. Taski listautuu aina taskin tyypin ja numeron
perusteella määräytyvään paikkaan. Ylimmäksi listautuvat sykliset taskit ja alimmaksi keskeytystaskit nousevassa taskin numerojärjestyksessä. Blokkien lisääminen ja muokkaaminen Sektioita eli blokkeja käsitellään projektinhallintaikkunassa. Blokin ohjelmaikkuna avataan näkyviin tuplaklikillä blokki-ikoniin. Uusia blokkeja lisätään pikapainikkeesta tai ohjelman pikavalikosta riviltä Insert Section. Uusin blokki listautuu toiseksi viimeiseksi END-blokin yläpuolelle. Blokkeja järjestellään hiirellä raahaamalla tai blokin pikavalikosta riveillä Move Up/ Move Down. Blokit suoritetaan logiikassa tässä näkyvässä järjestyksessä ylhäältä alas. CX- Programmer -ohjelmat sisältävät valmiiksi ohjelman viimeisenä blokkina END-blokin, johon on valmiiksi ohjelmoitu END(001)-käsky. Virtapiirien lisääminen, tuhoaminen ja muokkaaminen Ohjelma tehdään siis virtapiireihin. Blokin loppuun CX-P lisää aina automaattisesti uuden virtapiirin. Jos jo luotujen virtapiirien väliin halutaan sijoittaa uusi, niin valitaan blokista virtapiiri, jonka viereen lisäys tulee, klikataan virtapiirin vasenta palkkia ja pikavalikosta Insert Below (alapuolelle) tai Insert Above (yläpuolle). Virtapiirin voi jakaa korkeussuunnassa kahtia viemällä kohdistimen halutulle riville ja valitsemalla pikavalikon josta taas rivin Split Rung. Tarvittaessa lisää tilaa, eli sarakkeita tai rivejä, virtapiiriin valitaan kohdassa, johon lisäys halutaan, hiiren oikea painike ja pikavalikosta: Insert Row lisättäessä rivi (ALTGR+nuoli alas) Insert Rung Column lisättäessä sarake (ALTGR+nuoli oikealle) Delete Row tuhottaessa rivi (ALTGR+nuoli ylös) Delete Rung Column tuhottaessa sarake (ALTGR+nuoli vasemmalle) Projektin tallennus Projekti tallennetaan valikosta File/Save, kysytään ensimmäistä kertaa tallennettaessa myös kansiota ja tiedostonimeä, myöhemmin tallennus tapahtuu ilman dialogia. Save As valinta tapahtuu aina dialogin kautta, jolloin voi vaihtaa kansiota tai nimeä. CX-P-projekti tallentuu yhteen tiedostoon, jonka tarkenne on cxp. Lisäksi tallennushetkellä luodaan samanniminen, mutta opt-tarkenteinen tiedosto, joka sisältää ikkunointinäkymä-asettelut. Tätä tiedostoa ei välttämättä tarvita avattaessa projektitiedosto. Tallennettaessa projekti uudestaan, luodaan edellisestä tallennuksesta bak-tarkenteinen tiedosto tavallaan varmuuskopioksi. Tämä
tiedosto on avattavissa CX-Programmeriin, kunhan ensin vaihdetaan tarkenne.cxp- muotoon esimerkiksi resurssienhallintaikkunassa. 5. Peruskäskyjen ohjelmointi Ohjelmaa tehdään siis virtapiireihin. Virtapiiri on pieni looginen kokonaisuus, joka muodostaa yhden tai muutaman muistipaikan ohjauksen. Kaikkien virtapiirin käskyelementtien tulee olla kiinni toisissaan. Virtapiireistä kannattaa pyrkiä tekemään yksinkertaisia. Tällöin niiden muokkaaminen on jälkeenpäin helpompaa. Apumuistien käyttäminen helpottaa ohjelmointia ja yksinkertaistaa virtapiirejä. Apumuisteiksi kutsutaan logiikan sisäisiä muistipaikkoja, joita käytetään välitallennuksiin ennen varsinaista ohjausta. Ohjelman kontrollikäskyt ohjelmoidaan aina omiin virtapiireihinsä. Ohjelmaelementti- eli käskytyökalut: Elementtityökaluille löytyy pikapainikkeet, joiden opastetekstit kertovat myös näppäimen, jolla elementti saadaan ohjelmaan. Alla olevan kuvan jälkeen selitykset vasemmalta oikealla, suluissa pikanäppäimet: valintatyökalu Selection Tool (ESC) sulkeutuva kosketin New Contact (C) avautuva kosketin New Closed Contact (/) sulkeutuva rinnakkaiskosketin alapuolelle New Contact OR (W) avautuva rinnakkaiskosketin alapuolelle New Closed Contact OR (X) pystyviiva (U tai CTRL+nuoli ylös piirto ylöspäin) vaakaviiva (H tai CTRL+nuoli oikealla piirto oikealla) bitin kopiointi New Coil (O) bitin käänteinen kopiointi New Closed Coil (Q) funktiokäskyt, myös ajastimet ja laskurit (I) viivan piirto raahaamalla hiiren vasen painike pohjassa viivan tuhoaminen raahaamalla hiiren vasen painike pohjassa Elementin eli käskyn lisäämisen jälkeen tehdään aina operandin määrittelyt. valitsemalla muuttuja/arvo jostain symbolilistasta määrittelemällä samalla uusi muuttuja antamalla pelkkä osoite Ikkunan saa suurennettua Detail >>-painikkeella.
AND- ja OR-piirien luominen CX-Programmerilla Peruskäskyjä ovat LD, LD NOT, AND, AND NOT, OR, OR NOT, OUT ja OUT NOT -käskyt. Näillä toteutetaan bittiohjauksia. Ladder-diagram eli relekaavio-muodossa ohjelmoitaessa usein puhutaan avautuvista (esim. LD NOT) ja sulkeutuvista (esim. LD) koskettimista sekä sarja- (AND) ja rinnankytkennöistä (OR). Sarjakytkennässä koskettimet kytketään peräkkäin vaakasuoraan. Ohjaus on tosi eli 1 -tilassa, kun kaikki koskettimet ovat kiinni, muutoin epätosi eli 0. Rinnankytkennässä koskettimet kytketään allekkain eli rinnakkain. Ohjaus on tosi eli 1 -tilassa kun vähintään yksi koskettimista on kiinni. Jos kaikki rinnankytketyt koskettimet ovat auki, on ohjaus epätosi. Virtapiirin ohjelmointi aloitetaan vasemmasta reunasta, valitaan työkalu ja klikataan ensimmäinen elementti ensimmäiseen sarakkeeseen ja annetaan tai valitaan symboli. Työkaluvalinta pysyy voimassa, kunnes valitaan uusi työkalu. Kun virtapiiri on valmis (tai ainakin käännettävissä) kuittaantuu se siirtämällä kohdistin toiseen virtapiiriin. Lopetuskäsky END(001) END(01)-käsky tulee aina omaan virtapiiriinsä, usein se saa vielä oman blokkinsakin. CX-Programmer ohjelmistossa jokaiselle ohjelmalle tehty valmiiksi viimeinen blokki nimeltä END joka sisältää myös END(001)-käskyn. Kaikki funktiokäskyt, ajastimet ja laskurit löytyvät painikkeen Instruction (I) takaa. Kun uusi blokki on lisätty ja nimetty, avataan se ohjelmointieditoriin tuplaklikillä projektinhallintaikkunassa ja valitaan Instructions- työkalu ja klikataan virtapiirin alkuun.. Käskyn määritys Instruction-ikkunan Instruction-kenttään tehdään kolmella tapaa kirjoittamalla funktion nimilyhenne (nyt END) kirjoittamalla funktionumero (nyt 001) käyttämällä hakupalvelua Find Instruction.. Instruction-ikkunan Operands-osio on tärkeä. Yleensä käskyissä on 1-4 operandia, jotka määritellään tässä kentässä. Kun käsky on valittu, mukautuu Operands-osio valinnan mukaan. Operands-kenttien alla kerrotaan Operandin tarkoitus ja opastetaan valitsemaan oikea datatyyppi, osoite tai arvo operandille. END(001)-käsky on ohjelman kontrollikäsky, jolla ei ole yhtään operandia. Instruction Help-toiminnolla saat lyhyen tiivistelmän funktiosta. Sitä kannattaa käyttää, kun tarvitaan uusia käskyjä. Help-ikkunan saa auki myös Edit-valikosta.
Bitin käsittelykäskyt: Pitopiiri KEEP(011), SET JA RSET Pitopiiri voidaan luoda peruskäskyjen avulla tai funktiokäskyjen avulla. Tähän tarkoitukseen sopivia funktioita ovat KEEP(011) tai SET ja RSET. Käskyille on ominaista se, että niille riittää syklin mittainen pulssi toiminnon toteuttamiseen. KEEP(011) käsittää sekä asettavan (S) että resetoivan (R) tulon. Ylempi tulo on S ja alempi R. Jos molemmat tulot ovat yht aikaa aktiivisia, on myöhemmin ohjelmassa suoritettava rivi, eli reset-tulo määräävämpi ja näin KEEP- käskyn bitti menee 0-tilaan. SET- käskyllä ei ole funktionumeroa ja se saadaan valittua kirjoittamalla set. Kun SET-käskyä ohjaava bitti aktivoituu, niin SET-käskyn bitti menee 1-tilaan, jossa se pysyykin, kunnes tämä osoite resetoidaan RSET-käskyllä. RSET-käsky on siis bitin nollausta varten. Jos samaa osoitetta ohjaavat SET- ja RSET- käskyt ovat molemmat aktiivisia, niin osoitteen tilanmäärää jälleen ohjelmassa myöhemmin suoritettava käsky. Käskyjen välissä voi olla useita virtapiirejä. Näidenkin käskyjen ohjaamiseen riittää pulssi. Reunantunnistus DIFU(013) JA DIFD(014) Bitin nousevan reunan tunnistus suoritetaan DIFU(013) ja laskevan reunan tunnistus DIFD(014) käskyillä. Nämä antavat aktivoituessaan ohjelmasyklin mittaisen 1 -pulssin käskyn osoittamaan apumuistibittiin. Tätä bittiä käytetään sitten koskettimien yhteydessä tuottamaan kertasuoritteisia ohjauksia.
DIFU(013) eli Differentiate Up toimii silloin, kun sitä ohjaava akku aktivoituu, eli ohjaavakosketin (kombinaatio) sulkeutuu DIFD(014) eli Differentiate Down toimii silloin, kun sitä ohjaava akku deaktivoituu, eli ohjaava kosketin (kombinaatio) avautuu. Siirtorekisterin runko SFT(010)-käskyllä SFT(010)-käsky on bittikäsky, vaikka se varaa siirtorekisterille kokonaisia sanoja. Käskyllä on kaksi operandia. Ensimmäinen operandi on siirtorekisterin aloitussanan ja toinen lopetussana. Kaikki sanat aloitus- ja lopetussanan välillä varataan tälle sekvenssille. Jos tarvitaan korkeintaan 16 askelta, riittää yksi sana. Tällöin aloitus- ja lopetussana ovat samat. Yhdellä käskyllä voidaan siis toteuttaa satoja askelia pitkä sekvenssi. Toki käsky vaatii oikein toimiakseen oheisohjelmointia lähinnä siirtotapahtuman ohjaukseen. SFT(010)-käskyllä on kolme tuloa: Ylin on Datatulo, joka siirtää joka kellotuksella tilaansa rekisterin ensimmäiseen bittiin. Nyt tuloon luetaan 0 -tilaa järjestelmäbitistä P_Off, joka on aina 0. Keskimmäinen tulo on kellotustulo. Jokaisella tulon nousevalla reunalla siirtorekisterin bittikuvio siirtyy yhden bitin eteenpäin. Rekisterin sisältö on muuten pelkkää 0 -tilaa äsken ladattua siirtobittiä 1 lukuun ottamatta. Siis siirrämme tavallaan tätä 1 -bittiä eteenpäin. Rekisterin viimeinen bitti menetetään aina siirrossa. Alin tulo nollaa rekisterin sisällön aktivoituessaan. Rekisteri ei siis kellotu, jos tämä tulo on aktiivinen. Ajastimet Ajastimet ovat tyypiltään veto-hidasteisia. Perusajastimen TIM aikayksikkö on 100 ms ja se käyttää BCD- lukujärjestelmää. Kun ajastinta ohjaava akun tila aktivoituu eli suoritusehto käy toteen, alkaa ajan laskenta. Ajastimet laskevat aikaa alaspäin asetusarvosta nollaan. Kun ajastimen oloarvo on nolla, asettuu ajastimen lippubitti. Ajastimen suoritus on siis akkupohjainen. Ajastin laskee aikaa vain, jos sitä ohjaava kosketin (koskettimet ovat) on kiinni. Ajastimen asetettua ajastimen lippubitti pysyy 1-tilassa niin kauan, kun akku on aktiivinen. Ajastimet löytyvät CX - Programmerissa käskyistä Instructions (I). Samat ajastimet löytyvät sekä BCD -koodattuna että binäärisinä. Ajastin Resoluutio ja Suunta BCD-ajastin Binääri-ajastin Perusajastin 100ms SV-> 0 TIM TIMX Pika-ajastin 10ms SV -> 0 TIMH(015) TIMHX(551) Pikapika-ajastin 1ms SV -> 0 TMHH(540) TMHHX(552) Pitkä ajastin 100ms SV -> 0 TIML(542) TIMLX(553) Totaaliajastin 100ms 0-> SV TTIM(087) TTIMX(555) Monilähtöajastin 100ms 0-> SV MTIM(543) MTIMX(554) Samassa logiikassa voi käyttää vain joko BCD- tai binääriajastimia/laskureita. TIM- ajastimella on kaksi operandia. Ensimmäinen operandi on ajastimen numero, jonka datatyyppi on vakio NUMBER. Jos numeroa ei haluta symboloida, riittää kun klikataan ensimmäiselle operandiriville ja kirjoitetaan siihen ajastimen numero. Toinen operandi on aikaviiveen pituus.
Laskurit Logiikoissa on kaksi erilaista laskuria. Laskurien toiminta muistuttaa ajastimen toimintaa. Merkittävin ero on, että nyt lasketaan pulsseja, eli laskentatulon nousevia reunoja ajan sijaan. Laskurit ovat myös muistavia käskyjä. Niiden oloarvot eivät resetoidu sähkö-katkossakaan. Laskurit löytyvät CX-Programmerissa käskyistä Instructions (I). Samat laskurit löytyvät sekä BCDkoodattuna että binäärisinä. Ajastin Suunta BCD-laskuri Binäärilaskuri Peruslaskuri SV-> 0 CNT CNTX Ylös/alaslaskuri SV -> 0, 0->SV CNTR(012) CNTRX(548) Samassa logiikassa voi käyttää vain joko BCD- tai binääriajastimia/laskureita, ei molempia. Valinta tehdään logiikan Properties-ikkunan kautta. CNTR-laskurissa on kaksi tuloa, ylempi laskentatulo, joka jokaisella nousevalla reunalla vähentää laskurin oloarvoa yhdellä, sekä alempi resetointitulo, joka palauttaa laskurin oloarvon asetusarvoksi ja resetoi laskurin lippubitin. Laskuri ohjelmoidaan samaan tapaan kuin ajastinkin. Ylempi tulo on laskentatulo ja alempi on reset. Laskuri ei laske, jos reset-tulo on aktiivinen. Laskurin asetusarvo annetaan vakiona tai osoitteena. Myös osoitteesta löytyvän arvon tulee olla BCD-luku BCDlaskureille. Muutoin virhebitti P_ER asettuu. Kuvassa laskurin editointi-ikkuna. Nyt asetusarvo tulee datasanasta D0 Esipesu_SV. Logiikoissa voi olla myös pikalaskuri, kun tarvitaan lukea suurempitaajuisisia pulssijonoja, kuin mitä ohjelmasykli sallii, tällöin tarvitaan keskeytypohjaista tulojen luentaa. Ne pystyvät laskemaan pulsseja aina 100kHz taajuuteen asti. Datan kopiointi-, siirto- ja vertailukäskyjä Datakäskyt voivat joko jatkuvasuoritteisia tai kertasuoritteisia. Jatkuvasuoritteisia käskyjä suoritetaan niin kauan, kun ohjaava kosketin on kiinni.
Kertasuoritteinen eli differentiaalinen käsky suoritetaan vain yhden kerran koskettimen sulkeutuessa (eli akun nousevalla reunalla). Differentiaalinen käsky määritetään ja tunnistetaan symbolilla @ käskynimen edessä. Datan osoittaminen ja vakioarvojen tunnukset Yleensä käskyissä voidaan data-arvo antaa vakiona tai osoittaa sanaa, josta arvo löytyy. Näiden lisäksi osoitus voidaan tehdä epäsuorasti. Epäsuoraa osoitusta voidaan tehdä ainoastaan D- datamuistialueella. BCD-pohjainen epäsuora osoitus ilmaistaan käyttämällä D-osoitteen edessä asteriskiä eli *D XXXX. Binääripohjaisen epäsuoran osoituksen tunnus on @ eli @D XXXX. Kun epäsuora osoitus on määritelty, data haetaankin sanassa D XXXX viitatusta D-sanasta. Vakioarvo voidaan antaa CX-Programmerissa eri tavoin monitoroituville datamuuttujille: # Hex/BCD arvo & etumerkitön desimaaliarvo (binäärikoodi) +/- etumerkillinen desimaaliarvo (binäärikoodi) BCD-luvulle ei tarvitse antaa #-tunnusta arvon syöttökentässä, jos muuttujan symbolin datatyypiksi on määritelty jokin BCD-formaateista Datakäskyjen ohjelmointi CX-Programmer opastaa datakäskyjen ohjelmoinnissa. Alla olevassa kuvassa nähdään MOV(021)- käskyn ikkuna. Instruction-kentän alla nähdään käskyn mausteet, nyt voidaan valita differentiaalisuus (@) sekä välitön virkistys (!). Operandin 1 kerrotaan olevan Source Word eli lähde, joka voi olla sanaosoite alla näkyviltä muistialueilta, hex/bcd vakio #, etumerkitön desimaalivakio & tai etumerkillinen vakio +/-. Datatyyppi symbolille voi olla mikä tahansa paitsi BOOL eli bittityyppinen. Sanan kopiointikäsky MOV(021), @MOV(021) MOV(021)-käsky lienee eniten käytetty datakäsky. Se kopioi koko lähdesanan (Source) sisällön tai vakioarvon koko kohdesanaan (Destination). Sanan kopiointikäsky MVN(022), @MVN(022) Toimii kuten MOV(021), mutta kopioikin lähdesanan komplementin kohdesanaan. Komplementointi tarkoittaa sitä, että kukin lähdesanan tai vakion bitti invertoidaan eli nollat käännetään ykkösiksi ja päinvastoin.
Digitin kopiointikäsky MOVD(083), @MOVD(083) MOV(021)- käsky kopioi kokonaisia sanoja. Jos halutaan kopioida sanan osia, on käytettävä muita käskyjä. Digitin kopiointikäskyllä MOVD(083) voidaan kopioida lähdesanasta 1...4 digittiä haluttuun kohtaan kohdesanassa. Käskyä (tällöin tietysti useampi MOVD(083)) voidaan käyttää jaettaessa yhden sanan tietoa useampaan sanaan tai päinvastoinkin. Käsky kohdistuu vain määriteltyihin digitteihin kohdesanassa. Määrittelemättömät digitit säilyttävät vanhat arvonsa. Operandi 1 on lähdesana. Operandi 3 on kohdesana. Operandi 2 on ohjaussana, jonka perusteella määritellään ensimmäinen kopioitava digitti lähdesanassa, digittien määrä sekä ensimmäinen digitti kohdesanassa seuraavasti: Digitti: 3 2 1 0 (0) Ensimmäinen digitti lähdesanassa (0...3) (1) Digittien määrä (0...3) 0 = 1 digitti 1 = 2 digittiä 2 = 3 digittiä 3 = 4 digittiä (2) Ensimmäinen digitti kohdesanassa (0...3) (3) Ei käytössä, aseta arvoon 0 Blokin kirjoitus BSET(071), @ BSET(071) Blokilla tarkoitetaan peräkkäisten sanojen muodostamaa ryhmää. Blokin kirjoituskäskyllä kirjoitetaan tarvittava data haluttuun määrään peräkkäisiä sanoja. Käskyssä määritellään kirjoitettava data vakiona, suorana tai epäsuorana osoituksena sekä kohdealueen ensimmäinen ja viimeinen sana. Operandi 1 on kirjoitettava data. Operandi 2 on kohdealueen ensimmäinen sana. Operandi 3 on kohdealueen viimeinen sana. Blokin kopiointi XFER(070), @XFER(070) Käsky kopioi joko jatkuva- tai kertasuoritteisesti määritellyn määrän sanoja lähdealueelta kohdealueelle. Sanojen määrä annetaan nyt tunnuksella &. Jos vakio annetaan tunnuksella #, on arvon oltava vastaava heksaluku. Sanavertailu CMP(020) Vertailukäskyllä CMP(020) verrataan kahta etumerkitöntä sanan mittaista arvoa toisiinsa, kun käsky on suorituksessa. Vertailun tulos muodostuu järjestelmä-alueen bitteihin: P_GT Suurempi kuin, eli ensimmäinen vertailtava on suurempi kuin toinen P_EQ Yhtäsuuri, eli vertailtavat ovat yhtäsuuria P_LT Pienempi kuin, eli ensimmäinen vertailtava on pienempi kuin toinen. Kaikki vertailukäskyt käyttävät samoja bittejä. Lisäksi monet käskyt käyttävät yhtä suuri-bittiä P_EQ ilmaisemaan käskyn tuloksen arvoa 0000. Tästä johtuen on vertailun tulos -bittejä aina käytettävä heti vertailun jälkeen, jotta ohjaukset olisivat oikein.
Vertailun voi tehdä kumminpäin vain, mutta yleisohje selvyyden vuoksi olkoon, että ensimmäisenä vertailusanana käytetään muuttujaa ja toisena sitä, mihin verrataan. Käskystä löytyy myös tuplasanoja vertaileva versio CMPL(060). Aluevertailu ZCP(088) Käsky on jalostetumpi versio CMP(020)-käskystä. Nyt yhdellä käskyllä voidaan korvata kaksi CMP(020)-käskyä. ZCP(088) vertaa vertailtavaa etumerkitöntä arvoa arvohaarukkaan. Vertailun tulos muodostuu jälleen järjestelmäalueen bitteihin: P_GT Suurempi kuin, eli vertailtava on suurempi kuin yläraja P_EQ Yhtä suuri, eli vertailtava on yhtä suuri tai pienempi kuin yläraja tahi yhtä suuri tai suurempi kuin alaraja. P_LT Pienempi kuin, eli vertailtava on pienempi kuin alaraja. Operandi 1 on vertailtava data. Operandi 2 on vertailun alaraja. Operandi 3 on vertailun yläraja. Käskystä löytyy myös tuplasanoja vertaileva versio ZCPL(116). Lohkoaluevertailu BCMP(068) BCMP(068)-käskyn voidaan taas ajatella koostuvan useista ZCP(088)-käskyistä. BCMP(068)- käskyyn määritellään 16 etumerkitöntä aluetta ala- ja ylärajoineen. Käsky vertaa vertailuarvoa aluetaulukkoon ja ilmoittaa aluetta vastaavan tulossanan bitin 1 -tilalla arvon olevan tietyn alueen sisällä. Sopivia käyttökohteita ovat esim. pyörimisliikettä mittaavat keskeytyslaskurit, joiden arvoa eli kiertymiskulmaa mitataan ja siihen perustuen tehdään ohjauksia. Operandi 1 : Vertailtava arvo 16 bit etumerkitön sana Operandi 2 : Vertailutaulukon alku. Taulukon pituus on 16*2=32 sanaa. Sanaparin ensimmäinen sana määrää alueen alarajan ja toinen ylärajan. Operandi 3 : Tulossana, jonka, bitti 00 =Alue 00 (nyt D600-D601) bitti 01 =Alue 01 (nyt D602-D603) bitti 15 =Alue 15 (nyt D630-D631) Sanasiirtorekisteri WSFT(016), @ WSFT(016) Siirtorekisteri voidaan toteuttaa myös sananmittaiselle datalle käyttämällä WSFT(016)-käskyä. Käskyn operandeissa määritellään rekisteriin luettava lähdedata, rekisterin ensimmäinen ja viimeinen sana. Kun käsky (yleensä kertasuoritteisesti) tulee suoritukseen, siirretään data seuraavaan sanaan. Ensimmäiseen sanaan tulee data-arvoksi lähdedatan arvo ja viimeisen sanan data menetetään.
WSFT(016)-käskyn operandit: Operandi 1 : Siirtorekisteriin luettava data Operandi 2 : Siirtorekisterin ensimmäinen sana Operandi 3 : Siirtorekisterin viimeinen sana Datan muunnoskäskyt Näillä käskyillä voidaan muuttaa datan esitystapaa. Ohjelmoitsija joutuu aina datakäskyjen eli sanapohjaista tietoa käsittelevien käskyjen kohdalla miettimään käytettävän lukujärjestelmän ja symbolin datatyypin. Valintoihin on monia syitä: käytettävissä olevat käskyt IO- liityntöjen, esim. analogiliityntöjen käyttämät lukujärjestelmät ulkopuolisten liitäntöjen, kuten käyttöliittymien sallimat lukujärjestelmät tottumukset Kun lukujärjestelmä on valittu, valitaan sen perusteella muuttujan datatyyppi. Datatyyppi on oikeastaan tulkki, joka kääntää bittikuvioisen arvon halutulle esitystavalle. Kuvassa sama arvo on esitetty CX- Programmerin Watch- eli monitorointi-ikkunassa eri esitystavoilla. Seuraavassa kuvassa on monitoroinnissa bittikuvio, joka ei ole BCD-järjestelmän mukainen. Siksi BCD-arvoa ei voida monitoroida.
BCD-Binäärimuunnos BIN(023), @BIN(023) Käskyllä suoritetaan muunnos joko jatkuva- tai kertasuoritteisesti. Muunnoksessa lähdesanan BCDluku muunnetaan vastaavaksi binääriluvuksi kohdesanaan. Binääri-BCD-muunnos BCD(024), @ BCD(024) Käskyn suoritusta ohjaavan akun ollessa aktiivinen suoritetaan muunnos joko jatkuva- tai kertasuoritteisesti. Muunnoksessa lähdesanan binääriluku muunnetaan vastaavaksi BCD-luvuksi kohdesanaan. Jos lähdesanan arvo ylittää heksa-arvon 270F, ylitetään muunnostulos 9999 ja tästä on seurauksena se, että käskyä ei suoriteta ennen kuin arvo alittuu. Näistä käskyistä löytyy myös 32-bittiset versiot, BINL(058), @BINL(058) ja BCDL(059) ja @BCDL(059). Aritmetiikkakäskyt Logiikoissa perusaritmetiikkakäskyt löytyvät operaattoritunnuksilla +, -, *, / niin sana- kuin tuplasana-arvoille sekä eri lukujärjestelmille. Pelkällä operaattoritunnuksella käsky laskee sanan mittaisia kymmenlukuja. Käskytunnuksissa seuraavat lisäkirjaimet tarkoittavat poikkeuksia. B = BCD = BCD- järjestelmän mukaisesti laskeva käsky L = Long = 32 bit eli tuplasanoja laskeva käsky C = Carry = eli muistibittiä käyttävä käsky F = Float = liukuluku D = Double = pitkä liukuluku Esimerkiksi yhteenlasku- ja lisäyskäskyt, joiden tunnus on +... Suluissa symbolin datatyyppi, jota suositellaan käytettäväksi muuttujilla kyseisten käskyjen yhteydessä. + = 16 bit kymmenjärjestelmäarvojen yhteenlasku ilman carry-bittiä (INT) ++ = 16 bit kymmenjärjestelmäarvon inkrementointi (UINT) ++B = 16 bit BCD -arvon inkrementointi (UINT-BCD) ++BL = 32 bit BCD -arvon inkrementointi (UDINT-BCD) ++L = 32 bit kymmenjärjestelmäarvon inkrementointi (UDINT) +B = 16 bit BCD-arvojen yhteenlasku ilman carry-bittiä (UINT-BCD) +BC = 16 bit BCD-arvojen yhteenlasku carrybitillä (UINT-BCD) +BCL = 32 bit BCD-arvojen yhteenlasku carrybitillä (UDINT-BCD) +BL = 32 bit BCD-arvojen yhteenlasku ilman carrybittiä (UDINT-BCD) +C = 16 bit kymmenjärjestelmäarvojen yhteenlasku carrybitillä (INT) +CL = 32 bit kymmenjärjestelmäarvojen yhteenlasku carrybitillä (DINT) +D = 64 bit eli pitkien liukulukujen yhteenlasku (LREAL) +F = 32 bit liukulukujen yhteenlasku (REAL) +L = 32 bit kymmenjärjestelmäarvojen yhteenlasku ilman carrybittiä (DINT) Binääriluvuilla laskettaessa kannattaa käyttää UINT/ INT -tyyppisiä muuttujia. Etumerkillisten kokonaislukujen yhteenlasku +(400), @+/400) Käsky laskee yhteen kaksi kymmenjärjestelmän mukaista arvoa. Käsky ei käytä Carry- bittiä. Kuten kuvasta nähdään, ohjaa CX-Programmer käyttämään +-käskylle INT -tyyppistä muuttujaa. Tällaisen sanan arvo voi olla välillä -32768...+32767. Sanan ylin bitti 15 toimii etumerkkibittinä, jos se on 1, niin arvo on negatiivinen. Vakioarvon voi antaa: # eli heksalukuna, & eli etumerkittömänä kymmenlukuna tai +/- eli etumerkillisenä kymmenlukuna
+(400)-käskyllä on kolme operandia: Operandi 1 lisättävä arvo Operandi 2 yhteenlaskettava arvo Operandi 3 tulosana summalle, pituus 16 bit Alla olevassa kuvassa lasketaan bitin W300.00 laskevalla reunalla yhteen sanojen D202 ja D204 arvot. Summa on tulostunut sanaan D206. (+50 + (-5) = +45) Etumerkillisten kokonaislukujen vähennyslasku -(410), @-(410) Käsky laskee erotuksen kahdesta kymmenjärjestelmän mukaisesta arvosta. Käsky ei käytä Carry bittiä. -(410)-käskyllä on kolme operandia: Operandi 1 arvo, josta vähennetään Operandi 2 vähennettävä arvo Operandi 3 tulossana erotukselle, pituus 16 bit Etumerkillisten kokonaislukujen kertolasku *(420), @*(420) Käsky laskee tulon kahdesta kymmenjärjestelmän mukaisesta arvosta. Käsky ei käytä Carry- bittiä. Tulos varaa kaksi sanaa, mikä on muistettava muistipaikkojen varauksissa. Tuloksen datatyypin on hyvä olla DINT, niin nähdään käskyssä koko tulos. *(420)-käskyllä on kolme operandia: Operandi 1 kerrottava arvo Operandi 2 kertoja Operandi 3 tulossana tulolle, pituus 32 bit
Etu merkillisten kokonaislukujen jakolasku /(430), @/(430) Käsky jakaa kaksi kymmenjärjestelmän mukaista arvoa. Käsky ei käytä Carry-bittiä. Tulos varaa kaksi sanaa, mikä on muistettava muistipaikkojen varauksissa. /(430)-käskyllä on kolme operandia: Operandi jaettava arvo Operandi 2 jakaja Operandi 3 tulossana jakolaskulle, pituus 32 bit. Alempi sana sisältää osamäärän ja ylempi jakojäännöksen. Binäärinen lisäyskäsky ++(590), @++(590) Käsky lisää kohdesanan arvoa yhdellä (Wd=Wd+1) binäärisesti. Lisäys tapahtuu joka sykli, kun jatkuvasuoritteinen käsky on ohjauksessa. Käyttämällä reunantunnistusta tapahtuu lisäys aina kertasuoritteisesti ohjauksen nousevasta reunasta. Käsky ei vaikuta P_CY-bittiin. Kun sanan arvo tavoittaa maksimin 65535, niin seuraavan inkrementoinnin jälkeen sanan arvo on 0000, eli toiminta on ympäripyörivä. Muuttujan datatyyppi voi olla UINT. Binäärinen vähennyskäsky --(592), @--(592) Käsky vähentää kohdesanan arvoa yhdellä (Wd=Wd-1) binäärisesti. Vähennys tapahtuu joka sykli, kun se on jatkuvasuoritteinen. Käyttämällä reunantunnistusta tapahtuu vähennys aina kertasuoritteisesti akun nousevasta reunasta. Käsky ei vaikuta CY-bittiin. Kun sanan arvo tavoittaa minimin 0000, niin seuraavan dekrementoinnin jälkeen sanan arvo on 65535, eli toiminta on ympäripyörivä. Muuttujan datatyyppi voi olla UINT. Muistibitin asetus STC(040), @STC(040) Käsky asettaa ns. carry-bitin P_CY, jota C-kirjaimella varustetut yhteen- ja vähennyslaskuoperaatiot käyttävät. Carry -bitti asettuu käskyjen suorituksesta, jos tulossanan maksimiarvo ylitetään. Muistibitin nollaus CLC(041), @CLC(041) Käsky nollaa ns. carry-bitin P_CY. C-kirjaimella varustetut yhteen- ja vähennyslasku-operaatiot käyttävät carry-bittiä, joten se on nollattava CLC(041)-käskyllä juuri ennen operaation suorittamista, mikäli sen ei haluta vaikuttavan tulokseen. Tällöin tietysti kannattaa käyttää käskyjä, jotka eivät käytä Carry-bittiä. Perinteiset C-sarjan logiikat CPM*, CQM1, C200Hx sisältävät vain Carry-bittiä käyttäviä yhteen- ja vähennyslaskukäskyjä, joten näiden kanssa käytetään CLC(41)- käskyä. BCD-kokonaisslukujen yhteenlasku +B(404), @+(404) Käsky laskee yhteen kaksi BCD-järjestelmän mukaista arvoa. Käsky ei käytä laskentaan Carry - bittiä. CX -Programmer ohjaa käyttämään +B(404)-käskylle UINT_BCD-tyyppistä muuttujaa. Vakioarvon voi antaa # eli BCD -lukuna (# on myös heksalukujen tunnus, nyt arvo saa sisältää vain numeroita 0..9) +B(404)-käskyllä on kolme operandia: Operandi 1 lisättävä arvo Operandi 2 yhteenlaskettava arvo Operandi 3 tulossana summalle, pituus 16 bit
Kuvassa Laske -bitin laskevalla reunalla on laskettu yhteen sanojen D202 ja D204 arvot. Summa on tulostunut sanaan D208. (50 + 5 = 55 ) BCD-kokonaisslukujen vähennylasku -B(414), @+(414) Käsky laskee yhteen kaksi BCD-järjestelmän mukaista arvoa. Käsky ei käytä laskentaan Carrybittiä. CX-Programmer ohjaa käyttämään -B(414)-käskylle UINT_BCD-tyyppistä muuttujaa. -B(414)-käskyllä on kolme operandia: Operandi 1 arvo, josta vähennetään Operandi 2 vähennettävä arvo Operandi 3 tulossana erotukselle, pituus 16 bit Jos laskennan tulos on negatiivinen, niin carry -bitti (CY) asettuu ja tällöin kohdesanaan tulostuu luvun komplementti. Näin, koska BCD -käskyt käsittelevät vain positiivisia arvoja. BCD-kokonaisslukujen kertolasku *B(424), @*B(424) Kertolaskuoperaatio kertoo kaksi BCD -arvoa. Se ei käytä P_ CY -bittiä. Tulos on 32-bittinen, joten varataan kertolaskun tulokselle kaksi sanaa. Tuloksen symbolin datatyyppi on hyvä olla UDINT_BCD, jotta monitoroitaessa nähdään koko tulos. Käsky laskee tulon kahdesta BCD-järjestelmän mukaisesta arvosta. Käsky ei käytä Carry-bittiä. Tulos varaa kaksi sanaa, joten huomioi tämä muistipaikkojen varauksissa. *B(424)-käskyllä on kolme operandia: Operandi 1 kerrottava arvo Operandi 2 kertoja Operandi 3 tulossana tulolle, pituus 32 bit BCD-kokonaisslukujen jakolasku /B(434), @/B(434) Jakolaskuoperaatio suorittaa jaon kahdelle BCD-arvolle. Se ei käytä P_ CY-bittiä. Tulos on 32- bittinen, joten varataan jakolaskun tulokselle kaksi sanaa. Tuloksen symbolin datatyyppi voi nyt ollaudint_bcd tai UINT_BCD. /B(434)-käskyllä on kolme operandia: Operandi jaettava arvo Operandi 2 jakaja Operandi 3 tulossana jakolaskulle, pituus 32 bit. Alempi sana sisältää osamäärän ja ylempi jakojäännöksen. BCD- lisäyskäsky ++B(594), @++B(594) Käsky lisää kohdesanan arvoa yhdellä (Wd=Wd+1) BCD-järjestelmän mukaisesti. Lisäys tapahtuu joka sykli, kun jatkuvasuoritteinen käsky on ohjauksessa. Käyttämällä reunantunnistusta tapahtuu lisäys aina kertasuoritteisesti ohjauksen nousevasta reunasta. Käsky ei vaikuta P_CY-bittiin. Kun
sanan arvo tavoittaa maksimin 9999, niin seuraavan inkrementoinnin jälkeen sanan arvo on 0000,eli toiminta on ympäripyörivä. BCD- vähennyskäsky --B(596), @--B(596) Käsky vähentää kohdesanan arvoa yhdellä (Wd=Wd+1) BCD-järjestelmän mukaisesti. Vähennys tapahtuu joka sykli, kun se on jatkuvasuoritteinen. Käyttämällä reunan-tunnistusta tapahtuu vähennys aina kertasuoritteisesti akun nousevasta reunasta. Käsky ei vaikuta CY-bittiin. Kun sanan arvo tavoittaa minimin 0000, niin seuraavan dekrementoinnin jälkeen sanan arvo on 9999, eli toiminta on ympäripyörivä. Loogiset kaskyt Loogisilla käskyillä käsitellään sanaa biteittäin ja suoritetaan näille loogisia operaatioita. Komplementti COM(029), @COM(029) Käsky kääntää kohdesanan sisällön komplementiksi, eli nollat ykkösiksi ja päinvastoin. Looginen JA ANDW(034), @ANDW(034) Käsky tekee kahden sanan kullekin bitille AND- operaation ja muodostaa tulossanan vastaavaan bittiin bittien AND- operaation tuloksen. Yllä olevassa esimerkissä maskataan alin digitti pois Datasanasta 1. Looginen TAI ORW(035), @ORW(035) Käsky tekee kahden sanan kullekin bitille OR -operaation ja muodostaa tulossanan vastaavaan bittiin bittien OR -operaation tuloksen. Kätevä käsky lisättäessä arvoon negatiivinen etumerkkibitti (bit 15 = 1 ) Ehdoton TAI XORW(036), @XORW(036) Käsky tekee kahden sanan kullekin bitille XOR -operaation ja muodostaa tulossanan vastaavaan bittiin bittien XOR -operaation tuloksen.
CX Simulator CX -One ohjelmistopaketin mukana tulee CX-Programmer ohjelman lisäksi CX simulator ohjelmisto, jolla voidaan toteuttaa virtuaalinen logiikka PC:llä, josta saadaan myös oikea yhteys samalla koneella pyörivään CX-programmerohjelman projektiin.