Komen jullie regelmatig een of andere standaard tegen in PLC programma's waarin vastgelegd is hoe alles moet ontworpen worden. En indien ja hebben die standaarden dan een naam?
Komen jullie regelmatig een of andere standaard tegen in PLC programma's waarin vastgelegd is hoe alles moet ontworpen worden. En indien ja hebben die standaarden dan een naam?
Elk bedrijf heeft wel een interne standaard
Klanten hebben eisen
Maar een algehele standaard is naar mijn weten nergens bekend
Je zou een richtlijn als de isa88(voor procesbesturingen) kunnen bekijken
Niet verplicht maar dergelijke opbouw kom je nogal eens tegen
Al ligt het geheel opdelen en er een boomstructuur van maken nogal voor de hand
Er is niet echt een universele standaard zoals DK al zei. Wat velen wel doen is programmeren in stappen.
vb.
code:
Stap 0: RUSTSTAP
- x-as HOMED = 0 & 3s op start?
Stap 1: motor controllers uit zetten (reset automatisch fouten)
- controller alarm uitgang 0?
Stap 2: motor controllers aanzetten
- controller alarm uitgang 1? (= klaar voor start)
Stap 3: servo aanzetten
- servo aan?
Stap 4: Setup ingang (= home commando, encoders zijn positie kwijt)
- bezig?
Stap 5: Home commando uitzetten
- niet bezig? In positie?
Stap 6: SET FLAG --> X-as HOMED
code:
Stap 0: RUSTSTAP
- X-as HOMED =1 & 3s op start?
Stap 11: Coördinaat adres op uitgangen
- evt. tijd aflopen
Stap 12: Move commando
- bezig?
Stap 13: RESET FLAG --> X-as HOMED
.....
Meer bepaald serieel programmeren (niet: druk ik op PLUS in stap 13, dan ga ik naar stap 14 OF druk ik op MIN in stap 13, dan ga ik naar stap 24). Die OF is er teveel aan...
Als't niet duidelijk is, zet ik een voorbeeldje online...
Ieder bedrijf heeft inderdaad ongeveer zijn eigen standaard.
Voorbeeldje van een stukje automaat programma: (Step7-SCL)
code:
(*----------------------------------------------------------------*)
(* Step 5: Step select *)
(*----------------------------------------------------------------*)
5:
// Action
IF StepPulse
THEN
;
END_IF;
// Transition
IF NOT StepPulse
AND Steprelease
THEN
IF NOT "IX_PipeInGripper"
THEN
StepNrNxt := 10;
ELSE
StepNrNxt := 20;
END_IF;
END_IF;
(*----------------------------------------------------------------*)
(* Step 10: Pipe clamp open *)
(*----------------------------------------------------------------*)
10:
// Action
IF StepPulse
THEN
"Cmd_PipeGripper" := 2; // Pipe clamp open
END_IF;
// Transition
IF NOT StepPulse
AND Steprelease
AND "IX_PipeGripOpened"
THEN
IF ("DB_PipeInserter".Pos_Actual > ("DB_BOSCH_SERVO".PipeInserter.Setpoint.Position_PickUp + "DB_PipeInserter".In_Position_Window))
THEN
//If inserter is under slider, first slider to elevator
StepNrNxt := 12;
ELSE
//If inserter is above slider, first inserter to home position
StepNrNxt := 13;
END_IF;
END_IF;
(*----------------------------------------------------------------*)
(* Step 12: Pipe slider to elevator *)
(*----------------------------------------------------------------*)
12:
// Action
IF StepPulse
THEN
"Cmd_PipeSlider" := 2; // Slider to elevator
END_IF;
// Transition
IF NOT StepPulse
AND Steprelease
AND "IX_PipeSliderElevator"
THEN
StepNrNxt := StepNrNxt + 1;
END_IF;
Wat we nu steeds vaker zien is inderdaad ISA88.