Class Valve
Version 1.0
Modified 15-JAN-2025 13:23:35.00
Kod rt_plc_drive.c
Styrning, typ magnetventil, med två lägesverkan och övervakning av gångtid. 
Objektet realiserar till-från styrning. 

Driftordern OrderOpen är antingen TRUE eller FALSE. Orderna betecknas här 
OPEN och CLOSE med den generella innebörden till/från. 

Med hjälp av gångtidsövervakningen är det möjligt att upptäcka om 
reglerelementets förflyttning hindras; t.ex vid övergången fullt stängt --> fullt 
öppet 

Objektet har tre driftlägen, LOCAL / MANUAL / AUTO, som väljs med hjälp 
av Local och ManMode enligt följande: 
 
LOCAL
Används då manövreringen sker från yttre pulpet, manövrerskåp e.dyl. 

- Enbart säkerhetsförreglingen, SafeOpen och SafeClose, beaktas. 
- LocalOpen har återfjädrande tryckknappsfunktioner för OPEN. LocalOpen 
  påverkad medför att OrderOpen sätts TRUE varefter LocalOpen tas ned. 
- LocalClose har återfjädrande tryckknappsfunktioner för OPEN. LocalClose 
  påverkad medför att OrderOpen sätts TRUE varefter LocalClose tas ned 
- Vid övergången, 
  -- LOCAL --> AUTO bestäms driftordern av AutoOpen.
  -- LOCAL --> MANUAL påverkas inte driftordern OrderOpen.

MANUAL/AUTO
 
- Både drifts- och säkerhetsförreglingen beaktas. 
- Larmen är indikeringar som inte påverkar styrningen med mindre än att de 
  används som förreglingssignal. 
- I läge MANUAL hanteras OPEN/CLOSE order av operatören
  med hjälp av direktiven ManOpen och ManClose.

- AUTO begärs OPEN så länge AutoOpen är TRUE, CLOSE
  begärs då AutoOpen är FALSE, dvs det är nivåerna -- inte
  flankerna som styr.

- Vid övergången, 
  -- AUTO -> MANUAL, påverkas inte driftordern OrderOpen.

  -- MANUAL -> AUTO gäller att om driftordern var OPEN i läge MANUAL 
     och AutoOpen är TRUE kommer driftordern att kvarstå efter övergången, 
     annars inte.

Styrdirektiven har olika prioritet. Skulle en konflikt uppstå genom att flera 
sinsemellan motstridiga direktiv samtidigt är förhanden vinner det som har 
högst prioritet, se figur nedan.

Exempel


 Pump med ventil
Vid begäran att börja pumpa skall först ventilen öppna och därefter ska
pumpen startas.

Vid spolfasen ('at flushing') skall ventilen öppna och detta görs med hjälp
av Dv-signalen 'Spola'


RtBody attributes pwr_sClass_valve
Boolean AutoOpen aop Anger, i läge AUTO, om OPEN-order ska ges eller ej. FALSE betyder
CLOSE- order och TRUE en OPEN-order.
Boolean EndOpen eop Anger om ändgränsläget för OPEN-manöver är påverkat eller ej. FALSE
betyder ingen påverkan och TRUE innebär att ändgränsläget är påverkat.

Attributet används av Alarm1 och Alarm3 .
Boolean EndClose ecl Specifies whether the end limit position of CLOSE is
activated or not. FALSE means no and TRUE means that
the answer is yes.
Used by Alarm2 and Alarm4.
Boolean Local loc Anger om läge LOCAL valts eller ej. FALSE betyder att 'NOT LOCAL' valts
(och ManMode om det är MANUAL eller AUTO som gäller). TRUE innebär
att LOCAL valts.
Boolean LocalOpen lop Anger, i läge LOCAL, om OPEN-order ska ges eller ej. TRUE betyder OPEN-
order och den kommer att kvarstå tills nästa CLOSE-order ges. FALSE
representerar ingen aktivitet.
Boolean LocalClose lcl Anger, i läge LOCAL, om CLOSE-order ska ges eller ej. TRUE betyder
CLOSE- order och den kommer att kvarstå tills nästa OPEN-order ges. FALSE
representerar ingen aktivitet.
Boolean SafeOpen sop Anger säkerhetsförreglingens tillstånd visavi OPEN-order. Förreglingen gäller
oberoende av driftläge.

FALSE betyder att förreglingen är inaktiv. TRUE innebär en ovillkorlig
OPEN-order såvida inte också SafeClose är TRUE. Om både SafeClose och
SafeOpen är TRUE vinner SafeClose i kraft av sin högre prioritet; se ovan
Boolean SafeClose scl Anger säkerhetsförreglingens tillstånd visavi CLOSE-order. Förreglingen
gäller oberoende av driftläge.

FALSE betyder att förreglingen är inaktiv. TRUE innebär en ovillkorlig
CLOSE-order.
Boolean ProdOpen pop Anger, i läge AUTO och MANUAL, driftförreglingens tillstånd visavi OPEN-
order.
FALSE betyder att förreglingen är inaktiv. TRUE innebär en OPEN-order
såvida inte någon av SafeClose , ProdClose eller Local är TRUE.
Boolean ProdClose pcl Anger, i läge AUTO och MANUAL, driftförreglingens tillstånd visavi
CLOSE-order.
FALSE betyder att förreglingen är inaktiv. TRUE innebär en CLOSE-order
såvida inte någon av SafeOpen eller Local är TRUE.
Boolean ManMode man Anger driftläge ( MANUAL eller AUTO) när LOCAL är FALSE. Attributet
används som en traditionell parameter, dvs man kan skriva/läsa i den från olika
program.Tanken med att placera attributet som ett utgångsattribut är att
attributet då enklare kan användas i den grafiska konfigurationen. FALSE
betyder att AUTO gäller och TRUE att driftläget är MANUAL.
Boolean OrderOpen oop Driftsorder. FALSE tolkas här som CLOSE-order och TRUE som en OPEN-
order.
Boolean IndOpen iop Indikerar, i läge AUTO och MANUAL, huruvida ändgränsläget för OPENED-
manöver är påverkat och OPEN-ordern kvarstår eller ej.

Attributet är TRUE om det finns en OPEN-order, ändgränsläget EndOpen är
påverkat och EndClosed = Local = FALSE , annars är attributet FALSE.
Boolean IndClose icl Indikerar, i läge AUTO och MANUAL, huruvida ändgränsläget för CLOSED-
manöver är påverkat och CLOSE-ordern kvarstår eller ej.

Attributet är TRUE om det finns en CLOSE-order, ändgränsläget EndClosed är
påverkat och EndOpen = Local = FALSE , annars är attributet FALSE.
Boolean Alarm1 al1 Övervakning av gångtid vid OPEN-manöver.
Anger om OrderOpen varit TRUE under en tid längre än TimerTime utan att
ändgränsläget för 'fullt öppet' ( attributet EndOpen ) påverkats.

FALSE betyder inget larm; TRUE innebär att EndOpen inte påverkats inom
tidsgränsen TimerTim . Driftordern, OrderOpen , påverkas inte av larmet.
Larmet kvarstår tills att EndOpen blir TRUE eller tills att en CLOSE-order ges.

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange t.ex
' Förlång gångtid vid OPEN av xxx ' i övervakningsobjektets DetectText .
Boolean Alarm2 al2 Övervakning av gångtid vid CLOSE-manöver.

Anger om OrderOpen varit FALSE under en tid längre än TimerTime utan att
ändgränsläget för 'fullt stängt' ( attributet EndClosed ) påverkats.

FALSE betyder inget larm; TRUE innebär att EndClosed inte påverkats inom
tidsgränsen TimerTim . Driftordern, OrderOpen , påverkas inte av larmet.
Larmet kvarstår tills att EndClosed blir TRUE eller tills att en OPEN-order ges.

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange t.ex
' Förlång gångtid vid CLOSE av xxx ' i övervakningsobjektets DetectText .
Boolean Alarm3 al3 Övervakning av ändgränsläget för OPEN-manöver.

Attributet signalerar genom att bli TRUE, om EndOpen indikeringen förloras
trots en kvarstående OPEN-order eller om båda gränslägesindikeringarna (
EndOpen , EndClosed ) samtidigt är påverkade. Driftordern, OrderOpen ,
påverkas inte av larmet. Larmet kvarstår så länge larmläget existerar.

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange t.ex
' Förlorat 'fullt öppen'-gränslägesindikering på xxx trots kvarstående OPEN ' i
övervakningsobjektets DetectText .
Boolean Alarm4 al4 Övervakning av ändgränsläget för CLOSE-manöver.

Attributet signalerar genom att bli TRUE, om EndClosed indikeringen förloras
trots en kvarstående CLOSE-order eller om båda gränslägesindikeringarna (
EndOpen , EndClosed ) samtidigt är påverkade. Driftordern, OrderOpen ,
påverkas inte av larmet. Larmet kvarstår så länge larmläget existerar.

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange t.ex
' Förlorat 'fullt stängt'-gränslägesindikering på xxx trots kvarstående OPEN ' i
övervakningsobjektets DetectText .

Om EndClose = EndOpen = TRUE är både Alarm3 och Alarm4 aktiva.
Boolean SumAlarm als Summalarm.

Anger om något av objktets interna larm är aktivt eller ej. FALSE betyder att
inget aktivt internlarm finns; TRUE innebär att minst en av utgångarna al1 , al2
, al3 eller al4 är TRUE. Driftordern påverkas ej av larmet.

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange
DetectText.
Boolean ManOpen   Anger, i läge MANUAL, ett OPEN-direktiv. FALSE betyder ingen aktivitet;
TRUE innebär att OPEN-order ska ges. Sedan den satta flaggan noterats ser
ProviewR till att den tas ned.
Boolean ManClose   Anger, i läge MANUAL, ett CLOSE-direktiv. FALSE betyder ingen aktivitet;
TRUE innebär att CLOSE-order ska ges. Sedan den satta flaggan noterats
ombesörjer ProviewR att den tas ned.
Boolean TimerFlag   Markerar aktiv timer.
Pointer to Boolean TimerNext   Pekar på nästa element i timer kön.
UInt32 TimerCount   Antal återstående ticks. ( 1 tick = PLC-jobbets bascykeltid.)
Pointer to Boolean TimerDO   Pekar på ett Do eller Dv objekt eller om sådant inte används, på TimerDoDum.
Efter tiden TimerTime tas den signal som utpekas av TimerDo ned.
Float32 TimerTime   Den, i sekunder, längsta tillåtna gångtiden. Om en driftorder (OPEN eller
CLOSE) gällt under en tid längre än TimerTime utan att motsvarande
gränslägesindikering blivit aktiv sätts Alarm1 eller Alarm2 .

TimerTime = PLC-jobbets bascykeltid.
Boolean TimerDODum   Dummy. Om TimerDoDum inte pekar på ett Do eller Dv objekt pekar det hit.
Objid TimerObjDId   Identity of this object is set at load file creation.
Used by the run time system.
Int32 ManAcc ManAcc Ej implementerad funktion. Anger operatörens behörighet att växla mellan
driftlägena MANUAL / AUTO. Följande behörigheter är möjliga:

0 -- Ingen växling tillåten
? 0 -- Växling tillåten.
Int32 Status Status Följande status värden är möjliga:

1 eller -1 -- Väntar på OPEN eller CLOSE indikering
2 eller -2 -- OPENING eller CLOSING
3 eller -3 -- OPEN eller CLOSED

DevBody attributes 
PlcNode PlcNode  


GraphPlcNode
object_type 181
parameters[0] 10
parameters[1] 0
parameters[2] 9
parameters[3] 0
subwindows 0
graphmethod 0 (standard, individual attributes)
graphindex 0
default_mask[0] 7
default_mask[1] 270
segname_annotation 1
compmethod 4
compindex 0
executeordermethod 2
objname Valve
graphname Valve
debugpar


Template Object
TimerTime 10.0


Attributes detail


AutoOpen Input
Klass Input
Typ Boolean
Flags STATE | NOEDIT | NOINVERT | REDUTRANSFER
GraphName aop
Kropp RtBody
Anger, i läge AUTO, om OPEN-order ska ges eller ej. FALSE betyder 
CLOSE- order och TRUE en OPEN-order. 

EndOpen Input
Klass Input
Typ Boolean
Flags STATE | NOEDIT | NOINVERT | REDUTRANSFER
GraphName eop
Kropp RtBody
Anger om ändgränsläget för OPEN-manöver är påverkat eller ej. FALSE 
betyder ingen påverkan och TRUE innebär att ändgränsläget är påverkat. 

Attributet används av Alarm1 och Alarm3 . 

EndClose Input
Klass Input
Typ Boolean
Flags STATE | NOEDIT | NOINVERT | REDUTRANSFER
GraphName ecl
Kropp RtBody
 Specifies whether the end limit position of CLOSE is
 activated or not. FALSE means no and TRUE means that
 the answer is yes.
 Used by Alarm2 and Alarm4.

Local Input
Klass Input
Typ Boolean
Flags NOINVERT | REDUTRANSFER
GraphName loc
Kropp RtBody
Anger om läge LOCAL valts eller ej. FALSE betyder att 'NOT LOCAL' valts 
(och ManMode om det är MANUAL eller AUTO som gäller). TRUE innebär 
att LOCAL valts. 

LocalOpen Input
Klass Input
Typ Boolean
Flags NOINVERT | REDUTRANSFER
GraphName lop
Kropp RtBody
Anger, i läge LOCAL, om OPEN-order ska ges eller ej. TRUE betyder OPEN- 
order och den kommer att kvarstå tills nästa CLOSE-order ges. FALSE 
representerar ingen aktivitet. 

LocalClose Input
Klass Input
Typ Boolean
Flags REDUTRANSFER | NOINVERT
GraphName lcl
Kropp RtBody
Anger, i läge LOCAL, om CLOSE-order ska ges eller ej. TRUE betyder 
CLOSE- order och den kommer att kvarstå tills nästa OPEN-order ges. FALSE 
representerar ingen aktivitet. 

SafeOpen Input
Klass Input
Typ Boolean
Flags NOINVERT | REDUTRANSFER
GraphName sop
Kropp RtBody
Anger säkerhetsförreglingens tillstånd visavi OPEN-order. Förreglingen gäller 
oberoende av driftläge. 

FALSE betyder att förreglingen är inaktiv. TRUE innebär en ovillkorlig 
OPEN-order såvida inte också SafeClose är TRUE. Om både SafeClose och 
SafeOpen är TRUE vinner SafeClose i kraft av sin högre prioritet; se ovan 

SafeClose Input
Klass Input
Typ Boolean
Flags NOINVERT | REDUTRANSFER
GraphName scl
Kropp RtBody
Anger säkerhetsförreglingens tillstånd visavi CLOSE-order. Förreglingen 
gäller oberoende av driftläge. 

FALSE betyder att förreglingen är inaktiv. TRUE innebär en ovillkorlig 
CLOSE-order. 

ProdOpen Input
Klass Input
Typ Boolean
Flags NOINVERT | REDUTRANSFER
GraphName pop
Kropp RtBody
Anger, i läge AUTO och MANUAL, driftförreglingens tillstånd visavi OPEN- 
order.
FALSE betyder att förreglingen är inaktiv. TRUE innebär en OPEN-order 
såvida inte någon av SafeClose , ProdClose eller Local är TRUE. 

ProdClose Input
Klass Input
Typ Boolean
Flags NOINVERT | REDUTRANSFER
GraphName pcl
Kropp RtBody
Anger, i läge AUTO och MANUAL, driftförreglingens tillstånd visavi 
CLOSE-order.
FALSE betyder att förreglingen är inaktiv. TRUE innebär en CLOSE-order 
såvida inte någon av SafeOpen eller Local är TRUE. 

ManMode Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName man
Kropp RtBody
Anger driftläge ( MANUAL eller AUTO) när LOCAL är FALSE. Attributet 
används som en traditionell parameter, dvs man kan skriva/läsa i den från olika 
program.Tanken med att placera attributet som ett utgångsattribut är att 
attributet då enklare kan användas i den grafiska konfigurationen. FALSE 
betyder att AUTO gäller och TRUE att driftläget är MANUAL. 

OrderOpen Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName oop
Kropp RtBody
Driftsorder. FALSE tolkas här som CLOSE-order och TRUE som en OPEN-
order. 

IndOpen Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName iop
Kropp RtBody
Indikerar, i läge AUTO och MANUAL, huruvida ändgränsläget för OPENED- 
manöver är påverkat och OPEN-ordern kvarstår eller ej. 

Attributet är TRUE om det finns en OPEN-order, ändgränsläget EndOpen är 
påverkat och EndClosed = Local = FALSE , annars är attributet FALSE. 

IndClose Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName icl
Kropp RtBody
Indikerar, i läge AUTO och MANUAL, huruvida ändgränsläget för CLOSED- 
manöver är påverkat och CLOSE-ordern kvarstår eller ej. 

Attributet är TRUE om det finns en CLOSE-order, ändgränsläget EndClosed är 
påverkat och EndOpen = Local = FALSE , annars är attributet FALSE. 

Alarm1 Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName al1
Kropp RtBody
Övervakning av gångtid vid OPEN-manöver.
Anger om OrderOpen varit TRUE under en tid längre än TimerTime utan att 
ändgränsläget för 'fullt öppet' ( attributet EndOpen ) påverkats. 

FALSE betyder inget larm; TRUE innebär att EndOpen inte påverkats inom 
tidsgränsen TimerTim . Driftordern, OrderOpen , påverkas inte av larmet. 
Larmet kvarstår tills att EndOpen blir TRUE eller tills att en CLOSE-order ges. 

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange t.ex 
' Förlång gångtid vid OPEN av xxx ' i övervakningsobjektets DetectText . 

Alarm2 Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName al2
Kropp RtBody
Övervakning av gångtid vid CLOSE-manöver. 

Anger om OrderOpen varit FALSE under en tid längre än TimerTime utan att 
ändgränsläget för 'fullt stängt' ( attributet EndClosed ) påverkats. 

FALSE betyder inget larm; TRUE innebär att EndClosed inte påverkats inom 
tidsgränsen TimerTim . Driftordern, OrderOpen , påverkas inte av larmet. 
Larmet kvarstår tills att EndClosed blir TRUE eller tills att en OPEN-order ges. 

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange t.ex 
' Förlång gångtid vid CLOSE av xxx ' i övervakningsobjektets DetectText . 

Alarm3 Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName al3
Kropp RtBody
Övervakning av ändgränsläget för OPEN-manöver. 

Attributet signalerar genom att bli TRUE, om EndOpen indikeringen förloras 
trots en kvarstående OPEN-order eller om båda gränslägesindikeringarna ( 
EndOpen , EndClosed ) samtidigt är påverkade. Driftordern, OrderOpen , 
påverkas inte av larmet. Larmet kvarstår så länge larmläget existerar. 

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange t.ex 
' Förlorat 'fullt öppen'-gränslägesindikering på xxx trots kvarstående OPEN ' i 
övervakningsobjektets DetectText . 

Alarm4 Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName al4
Kropp RtBody
Övervakning av ändgränsläget för CLOSE-manöver. 

Attributet signalerar genom att bli TRUE, om EndClosed indikeringen förloras 
trots en kvarstående CLOSE-order eller om båda gränslägesindikeringarna ( 
EndOpen , EndClosed ) samtidigt är påverkade. Driftordern, OrderOpen , 
påverkas inte av larmet. Larmet kvarstår så länge larmläget existerar. 

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange t.ex 
' Förlorat 'fullt stängt'-gränslägesindikering på xxx trots kvarstående OPEN ' i 
övervakningsobjektets DetectText . 

Om EndClose = EndOpen = TRUE är både Alarm3 och Alarm4 aktiva. 

SumAlarm Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName als
Kropp RtBody
Summalarm. 

Anger om något av objktets interna larm är aktivt eller ej. FALSE betyder att 
inget aktivt internlarm finns; TRUE innebär att minst en av utgångarna al1 , al2 
, al3 eller al4 är TRUE. Driftordern påverkas ej av larmet. 

Koppla ett DSup objekt till utgången om meddelande ska skickas och ange 
DetectText. 

ManOpen Intern
Klass Intern
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
Kropp RtBody
Anger, i läge MANUAL, ett OPEN-direktiv. FALSE betyder ingen aktivitet; 
TRUE innebär att OPEN-order ska ges. Sedan den satta flaggan noterats ser 
ProviewR till att den tas ned. 

ManClose Intern
Klass Intern
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
Kropp RtBody
Anger, i läge MANUAL, ett CLOSE-direktiv. FALSE betyder ingen aktivitet; 
TRUE innebär att CLOSE-order ska ges. Sedan den satta flaggan noterats 
ombesörjer ProviewR att den tas ned. 

TimerFlag Intern
Klass Intern
Typ Boolean
Flags STATE | INVISIBLE | REDUTRANSFER
Kropp RtBody
Markerar aktiv timer. 

TimerNext Intern
Klass Intern
Typ Pointer to Boolean
Flags POINTER | STATE | INVISIBLE | PRIVATE
Kropp RtBody
Pekar på nästa element i timer kön. 

TimerCount Intern
Klass Intern
Typ UInt32
Flags STATE | INVISIBLE | REDUTRANSFER
Kropp RtBody
Antal återstående ticks. ( 1 tick = PLC-jobbets bascykeltid.) 

TimerDO Intern
Klass Intern
Typ Pointer to Boolean
Flags POINTER | STATE | INVISIBLE | PRIVATE
Kropp RtBody
Pekar på ett Do eller Dv objekt eller om sådant inte används, på TimerDoDum. 
Efter tiden TimerTime tas den signal som utpekas av TimerDo ned. 

TimerTime Intern
Klass Intern
Typ Float32
Flags REDUTRANSFER
Kropp RtBody
Den, i sekunder, längsta tillåtna gångtiden. Om en driftorder (OPEN eller 
CLOSE) gällt under en tid längre än TimerTime utan att motsvarande 
gränslägesindikering blivit aktiv sätts Alarm1 eller Alarm2 . 

TimerTime = PLC-jobbets bascykeltid. 

TimerDODum Intern
Klass Intern
Typ Boolean
Flags STATE | INVISIBLE
Kropp RtBody
Dummy. Om TimerDoDum inte pekar på ett Do eller Dv objekt pekar det hit. 

TimerObjDId Intern
Klass Intern
Typ Objid
Flags INVISIBLE
Kropp RtBody
 Identity of this object is set at load file creation.
 Used by the run time system.

ManAcc Intern
Klass Intern
Typ Int32
Flags
GraphName ManAcc
Kropp RtBody
Ej implementerad funktion. Anger operatörens behörighet att växla mellan 
driftlägena MANUAL / AUTO. Följande behörigheter är möjliga: 

0 -- Ingen växling tillåten
? 0 -- Växling tillåten. 

Status Intern
Klass Intern
Typ Int32
Flags STATE | NOEDIT
GraphName Status
Kropp RtBody
Följande status värden är möjliga: 

1 eller -1 -- Väntar på OPEN eller CLOSE indikering
2 eller -2 -- OPENING eller CLOSING
3 eller -3 -- OPEN eller CLOSED 

PlcNode Buffer
Klass Buffer
Typ PlcNode
Flags INVISIBLE
Kropp DevBody