Class Posit
Version 1.0
Modified 15-JAN-2025 13:23:35.00
Kod rt_plc_drive.c
Positionerare. Används för positionering. 

Positioneringen, som utförs utan hysteres, görs med utgångarna o1 och o2 . 

Två driftlägen finns, MANUAL / AUTO. Driftläge väljs med hjälp av 
ManMode på följande sätt: 
 
För Posit-objekt gäller att styrningen i MANUAL sköts internt på samma sätt 
som i AUTO. Skillnaden mellan MANUAL / AUTO ligger väsentligen i hur 
positioneringen startas/stoppas. 

NB! I andra objekt ( Pid , MValve , Valve , Drive etc) betyder MANUAL att 
operatören direkt betsämmer utsignalen till storlek/riktning eller TRUE/FALSE 
-- men så är det inte i Posit-objekt. 

MANUAL


Läge MANUAL är tänkt att hanteras från objektets objektbild. 
Denna saknas dock f.n. 

* Börvärdet anges i SetPos. 
* Positioneringen startas då PosOn blir TRUE. 
* Olika händeser kan avsluta positioneringen: 
 
   - ärvärdet har hållit i sig i dödzonintervallet, dvs. målområdet, under der tid 
     som anges av TimerTime.

   - PosOn blir FALSE.

   - (insignalen) Reset blir TRUE.

AUTO


* Positioneringen begärs vid positiv flank på AutoPos. 
* Olika händelser kan avsluta positioneringen: 
  - TimerTime > 0. Ärvärdet har hållit i sig i dödzonintervallet, dvs. målområdet, 
    under den tid som anges av TimerTime. En ny positionering begärs genom 
    positiv flank på AutoPos, dvs. inte på grund av att PosVal är utanför 
    målområdet.

  - TimerTime <= 0. Positioneringen avslutas aldrig utan fortsätter följa SetPos 
    tills att Reset blir TRUE.

  - (insignalen) Reset blir TRUE.

Exempel


 Positionsstyrd vagn
Med hjäp av tryckknappen, TK_start, begärs start positionering.
Positioneringen sker mot det av 'Potentiometer' satta värdet. Positioneringen
avbryts så snart vagnen de senaste 5 sekunderna befunnit sig i målområdet.
Vagnens färdriktning styrs av Order1 och Order2 och av en analog referens,
'Referens'. Farten bör vara låg då vagnen ligger nära börvärdet och vice versa.
Därför bör Table-objektet definiera en funktion med följande utseende.


RtBody attributes pwr_sClass_posit
Float32 PosVal PV Anger positionens ärvärde; P rocess V alue.
Float32 SetPos SV Anger, oberoende av driftläge, positionens börvärde ( S etpoint V alue).
Boolean AutoPos pos Anger, i läge AUTO, om positionering begärts eller ej. FALSE saknar
betydelse. övergången FALSE -> TRUE betyder att positionering begärs och
om Reset är FALSE, blir PosOn TRUE och positioneringen startar.
Boolean Reset res Anger, oberoende av driftläge, om positioneringen ska blockeras eller ej.
FALSE saknar betydelse. Positioneringen stoppas så länge attributet är TRUE.
Boolean ManMode man Anger valt driftläge ( MANUAL eller AUTO). 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 PosOn pon Anger om positionering pågår eller ej. FALSE betyder att ingen positionering
pågår f.n. och TRUE innebär positionering pågår.

I läge MANUAL startas positioneringen, om Reset är FALSE, genom att
PosOn sätts TRUE och stoppas då PosOn sätts FALSE.
Boolean Order1 o1 'Backward order', dvs körning så att värdet på PosVal minskar. FALSE betyder
ingen 'backward order' och TRUE innebär 'backward order' så länge som
PosVal > SetPos + DeadZone1 och positionering begärs.
Boolean Order2 o2 'Forward order', dvs körning så att värdet på PosVal växer. FALSE betyder
ingen 'forward order' och TRUE innebär 'forward order' så länge som PosVal <
SetPos - DeadZone2 och positionering begärs.
Boolean InPlace inp Anger om PosVal är i målområdet eller ej. FALSE betyder att så inte är fallet
TRUE att svaret är ja.
Float32 PosError ERR Anger aktuellt positionsfel (= PosVal - SetPos ).
Float32 DeadZone1 DeadZone1 Värdet, som ska vara >= 0, anger målområdets undre gräns.
Float32 DeadZone2 DeadZone2 Värdet, som ska vara >= 0, anger målområdets övre gräns.
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   Anger, i sekunder, den tid som PosVal ska ligga i målområdet för att
positioneringen ska avbrytas. Attributet beaktas enbart i läge AUTO. Se ovan.
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 TimerAcc   Ej implementerad funktion. Anger operatörens behörighet att ändra TimerTime
. Följande behörigheter är möjliga:

0 -- Ingen växling tillåten
? 0 -- Växling tillåten.
Float32 TimerMin   Anger minsta tillåtna värde vid operatörsändring av TimerTime.

TimerMin <= TimerTime <= TimerMax
Float32 TimerMax   Anger största tillåtna värde vid operatörsändring av TimerTime.

TimerMin <= TimerTime <= TimerMax
Int32 ManAcc ManAcc
Float32 ShowMin ShowMin
Float32 ShowMax ShowMax
Int32 SetAcc SetAcc
Float32 SetMin SetMin
Float32 SetMax SetMax

DevBody attributes 
PlcNode PlcNode  


GraphPlcNode
object_type 183
parameters[0] 4
parameters[1] 0
parameters[2] 6
parameters[3] 0
subwindows 0
graphmethod 0 (standard, individual attributes)
graphindex 0
default_mask[0] 15
default_mask[1] 30
segname_annotation 1
compmethod 4
compindex 0
executeordermethod 2
objname Posit
graphname Posit
debugpar


Template Object
TimerTime 10.0


Attributes detail


PosVal Input
Klass Input
Typ Float32
Flags STATE | NOEDIT | REDUTRANSFER
GraphName PV
Kropp RtBody
Anger positionens ärvärde; P rocess V alue. 

SetPos Input
Klass Input
Typ Float32
Flags REDUTRANSFER
GraphName SV
Kropp RtBody
Anger, oberoende av driftläge, positionens börvärde ( S etpoint V alue). 

AutoPos Input
Klass Input
Typ Boolean
Flags STATE | NOEDIT | NOINVERT | REDUTRANSFER
GraphName pos
Kropp RtBody
Anger, i läge AUTO, om positionering begärts eller ej. FALSE saknar 
betydelse. övergången FALSE -> TRUE betyder att positionering begärs och 
om Reset är FALSE, blir PosOn TRUE och positioneringen startar. 

Reset Input
Klass Input
Typ Boolean
Flags NOINVERT | REDUTRANSFER
GraphName res
Kropp RtBody
Anger, oberoende av driftläge, om positioneringen ska blockeras eller ej. 
FALSE saknar betydelse. Positioneringen stoppas så länge attributet är TRUE. 

ManMode Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName man
Kropp RtBody
Anger valt driftläge ( MANUAL eller AUTO). 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. 

PosOn Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName pon
Kropp RtBody
Anger om positionering pågår eller ej. FALSE betyder att ingen positionering 
pågår f.n. och TRUE innebär positionering pågår. 

I läge MANUAL startas positioneringen, om Reset är FALSE, genom att 
PosOn sätts TRUE och stoppas då PosOn sätts FALSE. 

Order1 Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName o1
Kropp RtBody
'Backward order', dvs körning så att värdet på PosVal minskar. FALSE betyder 
ingen 'backward order' och TRUE innebär 'backward order' så länge som 
PosVal > SetPos + DeadZone1 och positionering begärs. 

Order2 Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName o2
Kropp RtBody
'Forward order', dvs körning så att värdet på PosVal växer. FALSE betyder 
ingen 'forward order' och TRUE innebär 'forward order' så länge som PosVal < 
SetPos - DeadZone2 och positionering begärs. 

InPlace Output
Klass Output
Typ Boolean
Flags STATE | NOEDIT | REDUTRANSFER
GraphName inp
Kropp RtBody
Anger om PosVal är i målområdet eller ej. FALSE betyder att så inte är fallet 
TRUE att svaret är ja. 

PosError Output
Klass Output
Typ Float32
Flags STATE | NOEDIT | REDUTRANSFER
GraphName ERR
Kropp RtBody
Anger aktuellt positionsfel (= PosVal - SetPos ). 

DeadZone1 Intern
Klass Intern
Typ Float32
Flags
GraphName DeadZone1
Kropp RtBody
Värdet, som ska vara >= 0, anger målområdets undre gräns. 

DeadZone2 Intern
Klass Intern
Typ Float32
Flags
GraphName DeadZone2
Kropp RtBody
Värdet, som ska vara >= 0, anger målområdets övre gräns. 

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
Anger, i sekunder, den tid som PosVal ska ligga i målområdet för att 
positioneringen ska avbrytas. Attributet beaktas enbart i läge AUTO. Se ovan. 

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.

TimerAcc Intern
Klass Intern
Typ Int32
Flags
Kropp RtBody
Ej implementerad funktion. Anger operatörens behörighet att ändra TimerTime 
. Följande behörigheter är möjliga: 

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

TimerMin Intern
Klass Intern
Typ Float32
Flags
Kropp RtBody
Anger minsta tillåtna värde vid operatörsändring av TimerTime. 

TimerMin <= TimerTime <= TimerMax 

TimerMax Intern
Klass Intern
Typ Float32
Flags
Kropp RtBody
Anger största tillåtna värde vid operatörsändring av TimerTime. 

TimerMin <= TimerTime <= TimerMax 

ManAcc Intern
Klass Intern
Typ Int32
Flags
GraphName ManAcc
Kropp RtBody

ShowMin Intern
Klass Intern
Typ Float32
Flags
GraphName ShowMin
Kropp RtBody

ShowMax Intern
Klass Intern
Typ Float32
Flags
GraphName ShowMax
Kropp RtBody

SetAcc Intern
Klass Intern
Typ Int32
Flags
GraphName SetAcc
Kropp RtBody

SetMin Intern
Klass Intern
Typ Float32
Flags
GraphName SetMin
Kropp RtBody

SetMax Intern
Klass Intern
Typ Float32
Flags
GraphName SetMax
Kropp RtBody

PlcNode Buffer
Klass Buffer
Typ PlcNode
Flags INVISIBLE
Kropp DevBody