First uplaod
This commit is contained in:
1
.vci/workspace.vci.config
Normal file
1
.vci/workspace.vci.config
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<WorkspaceLanguage>fr-FR</WorkspaceLanguage>
|
||||||
122
fVarMcxVd.scl
Normal file
122
fVarMcxVd.scl
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
FUNCTION_BLOCK "fVarMcxVd"
|
||||||
|
{ S7_Optimized_Access := 'TRUE' }
|
||||||
|
VERSION : 0.1
|
||||||
|
VAR_INPUT
|
||||||
|
iADDR : HW_IO;
|
||||||
|
iSecu : Bool;
|
||||||
|
iEnable : Bool;
|
||||||
|
iRelBrake : Bool;
|
||||||
|
iJogP : Bool;
|
||||||
|
iJogN : Bool;
|
||||||
|
iNewPos : Bool;
|
||||||
|
iStart : Bool;
|
||||||
|
iReset : Bool;
|
||||||
|
iSelDrive2 : Bool;
|
||||||
|
iDisLimitSw : Bool;
|
||||||
|
iInhibit : Bool;
|
||||||
|
iStby : Bool;
|
||||||
|
iConsVit : UInt;
|
||||||
|
iAccel : UInt;
|
||||||
|
iDecel : UInt;
|
||||||
|
iwDo : Word;
|
||||||
|
iTpsSecu : Time := T#500MS;
|
||||||
|
END_VAR
|
||||||
|
|
||||||
|
VAR_OUTPUT
|
||||||
|
oRdy : Bool; // Ready
|
||||||
|
oSto : Bool; // / Safe stop
|
||||||
|
oPow : Bool; // Powered
|
||||||
|
oNoBrake : Bool; // Brake released
|
||||||
|
oRot : Bool; // Motor turning
|
||||||
|
oRefOk : Bool; // Referenced
|
||||||
|
oNPosAcc : Bool; // New position accepted
|
||||||
|
oInPos : Bool; // Setpoint reached/ In position
|
||||||
|
oError : Bool;
|
||||||
|
oWarn : Bool;
|
||||||
|
oDrive2Active : Bool;
|
||||||
|
oComparCons : Bool;
|
||||||
|
oLimitSwDis : Bool;
|
||||||
|
oStbyOn : Bool;
|
||||||
|
oDefCom : Bool;
|
||||||
|
oRetVit : Int;
|
||||||
|
oCodeEtat : Word;
|
||||||
|
oCodeDef : Word;
|
||||||
|
oRetCouple : Int;
|
||||||
|
oDi : Word;
|
||||||
|
END_VAR
|
||||||
|
|
||||||
|
VAR
|
||||||
|
PD { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
||||||
|
R { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..5] of Word;
|
||||||
|
W { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..5] of Word;
|
||||||
|
END_STRUCT;
|
||||||
|
TofSecu {InstructionName := 'TOF_TIME'; LibVersion := '1.0'; S7_SetPoint := 'False'} : TOF_TIME;
|
||||||
|
DefBitVie : "fDefBitVie";
|
||||||
|
RReturn : Int;
|
||||||
|
WReturn : Int;
|
||||||
|
END_VAR
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
// Movitrac C Profinet en Velocity Drive
|
||||||
|
|
||||||
|
//Lecture du bus
|
||||||
|
IF #iADDR > 0 THEN
|
||||||
|
#RReturn := DPRD_DAT(LADDR := #iADDR, RECORD => #PD.#R);
|
||||||
|
END_IF;
|
||||||
|
|
||||||
|
// Lectures
|
||||||
|
#oRdy := #PD.R[1].%X0;
|
||||||
|
#oSto := #PD.R[1].%X1;
|
||||||
|
#oPow := #PD.R[1].%X2;
|
||||||
|
#oNoBrake := #PD.R[1].%X3;
|
||||||
|
#oRot := #PD.R[1].%X4;
|
||||||
|
#oRefOk := #PD.R[1].%X5;
|
||||||
|
#oNPosAcc := #PD.R[1].%X6;
|
||||||
|
#oInPos := #PD.R[1].%X7;
|
||||||
|
#oError := #PD.R[1].%X8;
|
||||||
|
#oWarn := #PD.R[1].%X9;
|
||||||
|
#oDrive2Active := #PD.R[1].%X10;
|
||||||
|
#oComparCons := #PD.R[1].%X11;
|
||||||
|
#oLimitSwDis := #PD.R[1].%X12;
|
||||||
|
#oStbyOn := #PD.R[1].%X14;
|
||||||
|
// Le bit 15 est recopié en interne dans le var
|
||||||
|
#DefBitVie(iIn := #PD.R[1].%X15, iDelai := T#2s, oDef => #oDefCom);
|
||||||
|
#oRetVit := WORD_TO_INT(#PD.R[2]);
|
||||||
|
IF #oError THEN
|
||||||
|
#oCodeEtat := 0;
|
||||||
|
#oCodeDef := #PD.R[3];
|
||||||
|
ELSE
|
||||||
|
#oCodeEtat := #PD.R[3];
|
||||||
|
#oCodeDef := 0;
|
||||||
|
END_IF;
|
||||||
|
#oRetCouple := WORD_TO_INT(#PD.R[4]);
|
||||||
|
#oDi := #PD.R[5];
|
||||||
|
|
||||||
|
// Ecritures
|
||||||
|
#PD.R[1] := 0; // Raz bit reserve
|
||||||
|
#TofSecu(IN := #iSecu, PT := #iTpsSecu);
|
||||||
|
#PD.W[1].%X0 := #TofSecu.Q;
|
||||||
|
#PD.W[1].%X1 := #iEnable;
|
||||||
|
#PD.W[1].%X3 := #iRelBrake;
|
||||||
|
#PD.W[1].%X4 := #iJogP;
|
||||||
|
#PD.W[1].%X5 := #iJogN;
|
||||||
|
#PD.W[1].%X6 := #iNewPos;
|
||||||
|
#PD.W[1].%X7 := #iStart;
|
||||||
|
#PD.W[1].%X8 := #iReset AND #oError;
|
||||||
|
#PD.W[1].%X10 := #iSelDrive2;
|
||||||
|
#PD.W[1].%X12 := #iDisLimitSw;
|
||||||
|
#PD.W[1].%X13 := #iInhibit;
|
||||||
|
#PD.W[1].%X14 := #iStby;
|
||||||
|
#PD.W[1].%X15 := "Clock_2Hz";
|
||||||
|
#PD.W[2] := UINT_TO_WORD(#iConsVit);
|
||||||
|
#PD.W[3] := UINT_TO_WORD(#iAccel);
|
||||||
|
#PD.W[4] := UINT_TO_WORD(#iDecel);
|
||||||
|
#PD.W[5] := #iwDo;
|
||||||
|
|
||||||
|
//Ecriture sur bus
|
||||||
|
IF #iADDR > 0 THEN
|
||||||
|
#WReturn := DPWR_DAT(LADDR := #iADDR, RECORD := #PD.#W);
|
||||||
|
END_IF;
|
||||||
|
END_FUNCTION_BLOCK
|
||||||
|
|
||||||
141
fVarMdxPd.scl
Normal file
141
fVarMdxPd.scl
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
FUNCTION_BLOCK "fVarMdxPd"
|
||||||
|
{ S7_Optimized_Access := 'TRUE' }
|
||||||
|
VERSION : 0.1
|
||||||
|
VAR_INPUT
|
||||||
|
iADDR : HW_IO;
|
||||||
|
iSecu : Bool;
|
||||||
|
iEnable : Bool;
|
||||||
|
iRelBrake : Bool;
|
||||||
|
iJogP : Bool;
|
||||||
|
iJogN : Bool;
|
||||||
|
iNewPos : Bool;
|
||||||
|
iStart : Bool;
|
||||||
|
iReset : Bool;
|
||||||
|
iSelDrive2 : Bool;
|
||||||
|
iDisLimitSw : Bool;
|
||||||
|
iInhibit : Bool;
|
||||||
|
iStby : Bool;
|
||||||
|
iConsVit : UInt;
|
||||||
|
iAccel : UInt;
|
||||||
|
iDecel : UInt;
|
||||||
|
iwDo : Word;
|
||||||
|
iMode : Int;
|
||||||
|
iConsPos : DInt;
|
||||||
|
iTpsSecu : Time := T#500MS;
|
||||||
|
END_VAR
|
||||||
|
|
||||||
|
VAR_OUTPUT
|
||||||
|
oRdy : Bool; // Ready
|
||||||
|
oSto : Bool; // / Safe stop
|
||||||
|
oPow : Bool; // Powered
|
||||||
|
oNoBrake : Bool; // Brake released
|
||||||
|
oRot : Bool; // Motor turning
|
||||||
|
oRefOk : Bool; // Referenced
|
||||||
|
oNPosAcc : Bool; // New position accepted
|
||||||
|
oInPos : Bool; // Setpoint reached/ In position
|
||||||
|
oError : Bool;
|
||||||
|
oWarn : Bool;
|
||||||
|
oDrive2Active : Bool;
|
||||||
|
oComparCons : Bool;
|
||||||
|
oLimitSwDis : Bool;
|
||||||
|
oStbyOn : Bool;
|
||||||
|
oDefCom : Bool;
|
||||||
|
oRetVit : Int;
|
||||||
|
oCodeEtat : Word;
|
||||||
|
oCodeDef : Word;
|
||||||
|
oRetCouple : Int;
|
||||||
|
oDi : Word;
|
||||||
|
oActMode : Int;
|
||||||
|
oActPos : DInt;
|
||||||
|
END_VAR
|
||||||
|
|
||||||
|
VAR
|
||||||
|
PD { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
||||||
|
R { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..8] of Word;
|
||||||
|
W { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..8] of Word;
|
||||||
|
END_STRUCT;
|
||||||
|
TofSecu {InstructionName := 'TOF_TIME'; LibVersion := '1.0'; S7_SetPoint := 'False'} : TOF_TIME;
|
||||||
|
DefBitVie : "fDefBitVie";
|
||||||
|
RReturn : Int;
|
||||||
|
WReturn : Int;
|
||||||
|
END_VAR
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
// MOVIDRIVE C en positioning drive
|
||||||
|
// Mode 100 Jog position, 101 Jog vitesse (Mode 100, arrêt sur fdc, mode 101, arrêt après fdc)
|
||||||
|
// Mode 200 Velocity
|
||||||
|
// Mode 300 Reference via parameter
|
||||||
|
// Mode 301 Reference via iConsPos
|
||||||
|
// Mode 400 Absolute pos
|
||||||
|
// Mode 401 Relative pos
|
||||||
|
// Mode 402 Modulo pos
|
||||||
|
// Mode 403 Modulo neg
|
||||||
|
// Mode 404 Modulo short
|
||||||
|
|
||||||
|
//Lecture du bus
|
||||||
|
IF #iADDR > 0 THEN
|
||||||
|
#RReturn := DPRD_DAT(LADDR := #iADDR, RECORD => #PD.#R);
|
||||||
|
END_IF;
|
||||||
|
|
||||||
|
// Lectures
|
||||||
|
#oRdy := #PD.R[1].%X0;
|
||||||
|
#oSto := #PD.R[1].%X1;
|
||||||
|
#oPow := #PD.R[1].%X2;
|
||||||
|
#oNoBrake := #PD.R[1].%X3;
|
||||||
|
#oRot := #PD.R[1].%X4;
|
||||||
|
#oRefOk := #PD.R[1].%X5;
|
||||||
|
#oNPosAcc := #PD.R[1].%X6;
|
||||||
|
#oInPos := #PD.R[1].%X7;
|
||||||
|
#oError := #PD.R[1].%X8;
|
||||||
|
#oWarn := #PD.R[1].%X9;
|
||||||
|
#oDrive2Active := #PD.R[1].%X10;
|
||||||
|
#oComparCons := #PD.R[1].%X11;
|
||||||
|
#oLimitSwDis := #PD.R[1].%X12;
|
||||||
|
#oStbyOn := #PD.R[1].%X14;
|
||||||
|
// Le bit 15 est recopié en interne dans le var
|
||||||
|
#DefBitVie(iIn := #PD.R[1].%X15, iDelai := T#2s, oDef => #oDefCom);
|
||||||
|
#oRetVit := WORD_TO_INT(#PD.R[2]);
|
||||||
|
IF #oError THEN
|
||||||
|
#oCodeEtat := 0;
|
||||||
|
#oCodeDef := #PD.R[3];
|
||||||
|
ELSE
|
||||||
|
#oCodeEtat := #PD.R[3];
|
||||||
|
#oCodeDef := 0;
|
||||||
|
END_IF;
|
||||||
|
#oRetCouple := WORD_TO_INT(#PD.R[4]);
|
||||||
|
#oDi := #PD.R[5];
|
||||||
|
#oActMode := WORD_TO_INT(#PD.R[6]);
|
||||||
|
// Retour position retracte 8 LOW et 7 HIGH
|
||||||
|
#oActPos := (SHL(IN := WORD_TO_DINT(#PD.R[7]), N := 16)) + #PD.R[8];
|
||||||
|
|
||||||
|
// Ecritures
|
||||||
|
#PD.R[1] := 0; // Raz bit reserve
|
||||||
|
#TofSecu(IN := #iSecu, PT := #iTpsSecu);
|
||||||
|
#PD.W[1].%X0 := #TofSecu.Q;
|
||||||
|
#PD.W[1].%X1 := #iEnable;
|
||||||
|
#PD.W[1].%X3 := #iRelBrake;
|
||||||
|
#PD.W[1].%X4 := #iJogP;
|
||||||
|
#PD.W[1].%X5 := #iJogN;
|
||||||
|
#PD.W[1].%X6 := #iNewPos;
|
||||||
|
#PD.W[1].%X7 := #iStart;
|
||||||
|
#PD.W[1].%X8 := #iReset AND #oError;
|
||||||
|
#PD.W[1].%X10 := #iSelDrive2;
|
||||||
|
#PD.W[1].%X12 := #iDisLimitSw;
|
||||||
|
#PD.W[1].%X13 := #iInhibit;
|
||||||
|
#PD.W[1].%X14 := #iStby;
|
||||||
|
#PD.W[1].%X15 := "Clock_2Hz"; // Handshake aller
|
||||||
|
#PD.W[2] := UINT_TO_WORD(#iConsVit);
|
||||||
|
#PD.W[3] := UINT_TO_WORD(#iAccel);
|
||||||
|
#PD.W[4] := UINT_TO_WORD(#iDecel);
|
||||||
|
#PD.W[5] := #iwDo;
|
||||||
|
#PD.W[6] := INT_TO_WORD(#iMode);
|
||||||
|
#PD.W[7] := DWORD_TO_WORD(SHR(IN := DINT_TO_DWORD(#iConsPos), N := 16)); // HIGH
|
||||||
|
#PD.W[8] := DWORD_TO_WORD(DINT_TO_DWORD(#iConsPos) AND 16#0000FFFF); // LOW
|
||||||
|
|
||||||
|
//Ecriture sur bus
|
||||||
|
IF #iADDR > 0 THEN
|
||||||
|
#WReturn := DPWR_DAT(LADDR := #iADDR, RECORD := #PD.#W);
|
||||||
|
END_IF;
|
||||||
|
END_FUNCTION_BLOCK
|
||||||
|
|
||||||
Reference in New Issue
Block a user