I/O hantering
Har man stora krav på snabbhet och synkronisering kan en applikation arbeta direkt mot
I/O systemet och själv läsa in och ställa ut data.
Initieringen sker med funktionen io_init() till vilken man bl a skickar argumentet process.
Process identifierar vilka io-enheter (agent, rack eller kort) som ska hanteras av en
viss process. Varje io-objekt har ett Process attribut som är en bitmask, och om detta
överensstämmer med det som skickas som argument till io_init, kommer enheten att hanteras
av applikationen. Om ett kort hanteras av en applikation måste även det rack och den agent
som kortet tillhör, hanteras av applikationen.
Eftersom Process-attributet är en bitmask kan en enhet hanteras av flera processer, genom att
flera bitar sätts. Om man t ex har flera kort i ett rack, och vissa kort hanteras av
plc-processen och vissa av en applikation, måste rack-enheten hanteras av både plc't och
applikationen. Hur och om det fungerar att låta en enhet hanteras av flera processer beror
på hur io-metoderna är skrivna. För Profibus t ex, kan man inte dela upp hanteringen av slavar
på olika processer.
#include rt_io_base.h
io_tCtx io_ctx;
sts = io_init( io_mProcess_User, pwr_cNOid, &io_ctx, 0, scantime);
if ( EVEN(sts)) {
errh_Error( "Io init error: %m", sts);
throw co_error(sts);
}
Läsning sker med io_read() som läser data från io-enheterna och lägger ut i värdena i de
signaler som hör till enheten. Lämpligtvis direktlänkar sig applikationen mot dessa signaler
och även mot signalerna för utenheterna som skrivs med funktionen io_write().
sts = io_read( io_ctx);
sts = io_write( io_ctx);