更新KUKA程序
This commit is contained in:
15
KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.dat
Normal file
15
KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.dat
Normal file
@@ -0,0 +1,15 @@
|
||||
&ACCESS RVO
|
||||
&REL 1
|
||||
&COMMENT BrkTst-main task for unconfigured brake test axes
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM DISKPATH = KRC:\R1\TP\BrakeTest
|
||||
DEFDAT BrakeTestAxes PUBLIC
|
||||
;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P
|
||||
;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P
|
||||
DECL INT SUCCESS
|
||||
;ENDFOLD (BASISTECH EXT)
|
||||
;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P
|
||||
;ENDFOLD (USER EXT)
|
||||
;ENDFOLD (EXTERNAL DECLERATIONS)
|
||||
|
||||
ENDDAT
|
||||
30
KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.src
Normal file
30
KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.src
Normal file
@@ -0,0 +1,30 @@
|
||||
&ACCESS RVO
|
||||
&REL 1
|
||||
&COMMENT BrkTst-main task for unconfigured brake test axes
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM DISKPATH = KRC:\R1\TP\BrakeTest
|
||||
DEF BRAKETESTAXES(AxesBitMask: IN)
|
||||
;BRAKETESTAXES(AxesBitMask: IN)
|
||||
;examples for parameter AxesBitMask
|
||||
;no parameter or -1 means all configured axes
|
||||
;'b00000000000011' means axis 1 and 2
|
||||
;'b10000000000001' means axis 1 and 12
|
||||
;'b11000000000000' means axis 11 and 12
|
||||
;FOLD {H}
|
||||
INT AxesBitMask
|
||||
|
||||
ON_ERROR_PROCEED
|
||||
AxesBitMask=AxesBitMask*1
|
||||
|
||||
IF ($ERR.Number<>0) THEN
|
||||
AxesBitMask=-1
|
||||
ERR_CLEAR($ERR)
|
||||
ELSE
|
||||
ERR_RAISE($ERR)
|
||||
ENDIF
|
||||
|
||||
gBraketestForce=true
|
||||
BRAKETESTREQ(AxesBitMask)
|
||||
gBraketestForce=false
|
||||
;ENDFOLD
|
||||
END
|
||||
17
KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.dat
Normal file
17
KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.dat
Normal file
@@ -0,0 +1,17 @@
|
||||
&ACCESS RV
|
||||
&REL 1
|
||||
&COMMENT path after test
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
|
||||
DEFDAT BrakeTestBack
|
||||
;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P
|
||||
;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P
|
||||
EXT BAS (BAS_COMMAND :IN,REAL :IN )
|
||||
DECL INT SUCCESS
|
||||
;ENDFOLD (BASISTECH EXT)
|
||||
;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P
|
||||
;Make here your modifications
|
||||
|
||||
;ENDFOLD (USER EXT)
|
||||
;ENDFOLD (EXTERNAL DECLERATIONS)
|
||||
ENDDAT
|
||||
19
KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.src
Normal file
19
KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.src
Normal file
@@ -0,0 +1,19 @@
|
||||
&ACCESS RV
|
||||
&REL 1
|
||||
&COMMENT path after test
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
|
||||
DEF BrakeTestBack( )
|
||||
;FOLD INI
|
||||
;FOLD BASISTECH INI
|
||||
GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
|
||||
INTERRUPT ON 3
|
||||
;ENDFOLD (BASISTECH INI)
|
||||
;FOLD USER INI
|
||||
;Make your modifications here
|
||||
|
||||
;ENDFOLD (USER INI)
|
||||
;ENDFOLD (INI)
|
||||
;Teach here the motion to the position after the brake test.
|
||||
|
||||
END
|
||||
19
KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.dat
Normal file
19
KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.dat
Normal file
@@ -0,0 +1,19 @@
|
||||
&ACCESS RV
|
||||
&REL 1
|
||||
&COMMENT parkposition
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
|
||||
&PARAM DISKPATH = KRC:\R1\TP\BrakeTest
|
||||
DEFDAT BRAKETESTPARK PUBLIC
|
||||
;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P
|
||||
;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P
|
||||
EXT BAS (BAS_COMMAND :IN,REAL :IN )
|
||||
DECL INT SUCCESS
|
||||
;ENDFOLD (BASISTECH EXT)
|
||||
;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P
|
||||
;Make here your modifications
|
||||
;ENDFOLD (USER EXT)
|
||||
;ENDFOLD (EXTERNAL DECLERATIONS)
|
||||
DECL E6AXIS XParkPosition={A1 999.000,A2 999.000,A3 999.000,A4 999.000,A5 999.000,A6 999.000,E1 999.000,E2 999.000,E3 999.000,E4 999.000,E5 999.000,E6 999.000}
|
||||
DECL FDAT FParkPosition={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "}
|
||||
ENDDAT
|
||||
35
KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.src
Normal file
35
KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.src
Normal file
@@ -0,0 +1,35 @@
|
||||
&ACCESS RV
|
||||
&REL 1
|
||||
&COMMENT parkposition
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
|
||||
&PARAM DISKPATH = KRC:\R1\TP\BrakeTest
|
||||
DEF BrakeTestPark( )
|
||||
;FOLD INI
|
||||
;FOLD BASISTECH INI
|
||||
GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
|
||||
INTERRUPT ON 3
|
||||
;ENDFOLD (BASISTECH INI)
|
||||
;FOLD USER INI
|
||||
;Make your modifications here
|
||||
;ENDFOLD (USER INI)
|
||||
;ENDFOLD (INI)
|
||||
;Teach here the motion to the parking position. The parking position is needed when the robot has failed the brake test.
|
||||
;FOLD {h}
|
||||
WHILE ParkPositionInNotValid()
|
||||
MsgDialog(SUCCESS,"ParkPositionIsNotValid",brakeTestMdbName[],,,,,,,"Ok")
|
||||
HALT
|
||||
ENDWHILE
|
||||
;ENDFOLD
|
||||
;FOLD SPTP ParkPosition Vel=10 % DEFAULT Tool[1] Base[0] ;%{PE}
|
||||
;FOLD Parameters ;%{h}
|
||||
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=ParkPosition; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=DEFAULT; Kuka.VelocityPtp=10; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP
|
||||
;ENDFOLD
|
||||
SPTP XParkPosition WITH $VEL_AXIS[1] = SVEL_JOINT(10.0), $TOOL = STOOL2(FParkPosition), $BASE = SBASE(FParkPosition.BASE_NO), $IPO_MODE = SIPO_MODE(FParkPosition.IPO_FRAME), $LOAD = SLOAD(FParkPosition.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PDEFAULT), $APO = SAPO_PTP(PDEFAULT), $GEAR_JERK[1] = SGEAR_JERK(PDEFAULT), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0)
|
||||
;ENDFOLD
|
||||
END
|
||||
;FOLD {h}
|
||||
Global DEFFCT BOOL ParkPositionInNotValid()
|
||||
RETURN ((XParkPosition.A1 == 999) AND (XParkPosition.A2 == 999) AND (XParkPosition.A3 == 999) AND (XParkPosition.A4 == 999) AND (XParkPosition.A5 == 999) AND (XParkPosition.A6 == 999) AND (XParkPosition.E1 == 999) AND (XParkPosition.E2 == 999) AND (XParkPosition.E3 == 999) AND (XParkPosition.E4 == 999) AND (XParkPosition.E5 == 999) AND (XParkPosition.E6 == 999))
|
||||
ENDFCT
|
||||
;ENDFOLD
|
||||
24
KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.dat
Normal file
24
KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.dat
Normal file
@@ -0,0 +1,24 @@
|
||||
&ACCESS RVO
|
||||
&REL 1
|
||||
&COMMENT BrkTst-main task
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM DISKPATH = TP/BrakeTest
|
||||
DEFDAT BRAKETESTREQ PUBLIC
|
||||
;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P
|
||||
;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P
|
||||
DECL INT SUCCESS
|
||||
;ENDFOLD (BASISTECH EXT)
|
||||
;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P
|
||||
;ENDFOLD (USER EXT)
|
||||
;ENDFOLD (EXTERNAL DECLERATIONS)
|
||||
|
||||
DECL BRAKE_STATE RobotBrkState
|
||||
GLOBAL CHAR brakeTestMdbName[30]
|
||||
brakeTestMdbName[]="BrkTst"
|
||||
|
||||
GLOBAL INT MaxCountResultUnknown = 10
|
||||
GLOBAL BOOL gBraketestForce=false
|
||||
DECL INT CountResultUnknown = 0
|
||||
|
||||
|
||||
ENDDAT
|
||||
122
KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.src
Normal file
122
KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.src
Normal file
@@ -0,0 +1,122 @@
|
||||
&ACCESS RVO
|
||||
&REL 1
|
||||
&COMMENT BrkTst-main task
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM DISKPATH = TP/BrakeTest
|
||||
DEF BRAKETESTREQ(AxesBitMask: IN)
|
||||
;BRAKETESTREQ
|
||||
;fold {h}
|
||||
INT Idx, Key, AxesBitMask
|
||||
BOOL Test_Ende
|
||||
BOOL BraketestForce
|
||||
BraketestForce=false
|
||||
IF gBraketestForce THEN
|
||||
BraketestForce=true
|
||||
ENDIF
|
||||
gBraketestForce=false
|
||||
|
||||
ON_ERROR_PROCEED
|
||||
AxesBitMask=AxesBitMask*1
|
||||
|
||||
IF ($ERR.Number<>0) THEN
|
||||
AxesBitMask=-1
|
||||
ERR_CLEAR($ERR)
|
||||
ELSE
|
||||
ERR_RAISE($ERR)
|
||||
ENDIF
|
||||
|
||||
IF Varstate("$pro_ip.si01.name[]")==#declared THEN ;program selected
|
||||
MsgDialog(Key, "DlgPeformManuallyBrakeTest", brakeTestMdbName[], , "Cancel", "GoToPark", "BTman",,,,,FALSE)
|
||||
SWITCH Key ;dialogue answer
|
||||
|
||||
CASE 5
|
||||
BraketestForce=TRUE
|
||||
|
||||
CASE 6
|
||||
BrakeTestStart()
|
||||
BraketestError()
|
||||
|
||||
CASE 7
|
||||
Return
|
||||
|
||||
DEFAULT
|
||||
Return
|
||||
ENDSWITCH
|
||||
ELSE ;cyclic call
|
||||
IF NOT($BRAKETEST_REQ_INT) AND NOT(BraketestForce) THEN
|
||||
Return
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
Test_Ende=false
|
||||
|
||||
RobotBrkState=#BT_UNTESTED
|
||||
|
||||
BrakeTestStart()
|
||||
|
||||
BAS (#INITMOV,0 )
|
||||
repeat
|
||||
|
||||
PTP $AXIS_ACT
|
||||
|
||||
RobotBrkState = Test_BRAKE(AxesBitMask, BraketestForce)
|
||||
|
||||
SWITCH RobotBrkState
|
||||
|
||||
CASE #BT_WARNING,#BT_EXCESSIVE, #BT_MAXUNKNOWN, #BT_READY
|
||||
CountResultUnknown = 0
|
||||
Test_Ende = TRUE
|
||||
|
||||
CASE #BT_ERROR
|
||||
BraketestError()
|
||||
|
||||
CASE #BT_UNKNOWN
|
||||
Test_Ende = BraketestUnknown()
|
||||
|
||||
CASE #BT_UNTESTED
|
||||
Test_Ende = TRUE
|
||||
|
||||
ENDSWITCH
|
||||
|
||||
until Test_Ende
|
||||
|
||||
BrakeTestBack()
|
||||
|
||||
END
|
||||
|
||||
|
||||
DEF BraketestError()
|
||||
INT Key
|
||||
|
||||
Key = 0
|
||||
MsgDialog(Key, "BT_BRAKE_ERROR", brakeTestMdbName[]," ", "GoToPark",,,,,,,FALSE)
|
||||
|
||||
BrakeTestPark()
|
||||
WAIT FOR TRUE
|
||||
|
||||
repeat
|
||||
MsgNotify("ParkPositionReached", brakeTestMdbName[])
|
||||
halt
|
||||
until false
|
||||
|
||||
END
|
||||
|
||||
|
||||
DEFFCT BOOL BraketestUnknown()
|
||||
INT Key
|
||||
Key=0
|
||||
CountResultUnknown = CountResultUnknown + 1
|
||||
|
||||
IF (CountResultUnknown >= MaxCountResultUnknown) THEN
|
||||
|
||||
MsgDialog(Key, "BT_BRAKE_UNKNOWN", brakeTestMdbName[]," ", "TryAgain", "Cancel",,,,,,FALSE)
|
||||
IF Key==7 then
|
||||
Return FALSE
|
||||
ELSE
|
||||
Return TRUE
|
||||
ENDIF
|
||||
ELSE
|
||||
Return TRUE
|
||||
ENDIF
|
||||
ENDFCT
|
||||
;endfold
|
||||
17
KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.dat
Normal file
17
KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.dat
Normal file
@@ -0,0 +1,17 @@
|
||||
&ACCESS RV
|
||||
&REL 1
|
||||
&COMMENT path to test
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
|
||||
DEFDAT BrakeTestStart
|
||||
;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P
|
||||
;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P
|
||||
EXT BAS (BAS_COMMAND :IN,REAL :IN )
|
||||
DECL INT SUCCESS
|
||||
;ENDFOLD (BASISTECH EXT)
|
||||
;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P
|
||||
;Make here your modifications
|
||||
|
||||
;ENDFOLD (USER EXT)
|
||||
;ENDFOLD (EXTERNAL DECLERATIONS)
|
||||
ENDDAT
|
||||
19
KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.src
Normal file
19
KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.src
Normal file
@@ -0,0 +1,19 @@
|
||||
&ACCESS RV
|
||||
&REL 1
|
||||
&COMMENT path to test
|
||||
&PARAM EDITMASK = *
|
||||
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
|
||||
DEF BrakeTestStart( )
|
||||
;FOLD INI
|
||||
;FOLD BASISTECH INI
|
||||
GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
|
||||
INTERRUPT ON 3
|
||||
;ENDFOLD (BASISTECH INI)
|
||||
;FOLD USER INI
|
||||
;Make your modifications here
|
||||
|
||||
;ENDFOLD (USER INI)
|
||||
;ENDFOLD (INI)
|
||||
;Teach here the motion to the start position of the brake test.
|
||||
|
||||
END
|
||||
27
KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.dat
Normal file
27
KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.dat
Normal file
@@ -0,0 +1,27 @@
|
||||
&ACCESS RO
|
||||
&REL 2396
|
||||
&PARAM DISKPATH = KRC:\R1\TP\EthernetKRL
|
||||
DEFDAT EthernetKRL PUBLIC
|
||||
;************************************************************
|
||||
; CopyRight KUKA Deutschland GmbH 2018
|
||||
; last modified 23.11.2016
|
||||
; prefix EKI
|
||||
; functions Interface between KRL and Ethernet (non Realtime)
|
||||
; This file is mainly designed to communicate
|
||||
; with external devices like sensors, vision
|
||||
; systems, other controllers and so on.
|
||||
;************************************************************
|
||||
|
||||
;FOLD EKI_Declaration
|
||||
|
||||
;FOLD INTERNAL
|
||||
GLOBAL STRUC EKI_STATUS INT Buff,Read,Msg_No,BOOL Connected,INT Counter
|
||||
DECL CONST EKI_STATUS EKI_NULL_STATUS={Buff 0,Read 0,Msg_No 0,Connected FALSE,Counter 0}
|
||||
DECL CONST INT TYPEFRAME=6
|
||||
DECL CONST INT TYPENULL=0
|
||||
DECL CONST INT ERRMSG_FORBIDDEN = 32768
|
||||
DECL CONST INT ERRMSG_ALL = 32767
|
||||
;ENDFOLD
|
||||
;ENDFOLD EKI_Declaration
|
||||
|
||||
ENDDAT
|
||||
707
KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.src
Normal file
707
KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.src
Normal file
@@ -0,0 +1,707 @@
|
||||
&ACCESS RO
|
||||
&REL 2396
|
||||
&PARAM DISKPATH = KRC:\R1\TP\EthernetKRL
|
||||
DEF EthernetKRL( )
|
||||
;************************************************************
|
||||
; CopyRight KUKA Deutschland GmbH 2018
|
||||
; last modified 11.07.2012
|
||||
; prefix EKI
|
||||
; functions Interface between KRL and Ethernet (non Realtime)
|
||||
; This file is mainly designed to communicate
|
||||
; with external devices like sensors, vision
|
||||
; systems, other controllers and so on.
|
||||
;************************************************************
|
||||
END
|
||||
|
||||
;FOLD EKI_InternalProgram
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_Init(strChannelName[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Ret = EKI_NULL_STATUS
|
||||
Mode = #SYNC
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Init",strChannelName[])
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_Close(strChannelName[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Ret = EKI_NULL_STATUS
|
||||
Mode = #SYNC
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Close",strChannelName[])
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_LOCK(strChannelName[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
DECL BOOL LOCK
|
||||
|
||||
Ret = EKI_NULL_STATUS
|
||||
Mode = #SYNC
|
||||
LOCK = TRUE
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_LockUnLock",strChannelName[], LOCK, Ret.Connected)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_UNLOCK(strChannelName[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
DECL BOOL LOCK
|
||||
|
||||
Ret = EKI_NULL_STATUS
|
||||
Mode = #SYNC
|
||||
LOCK = FALSE
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_LockUnLock",strChannelName[], LOCK, Ret.Connected)
|
||||
|
||||
; interrupt timeout to detect new edge
|
||||
CONTINUE
|
||||
wait sec 0.002
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_ClearBuffer(strChannelName[]:IN,strPlace[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Ret = EKI_NULL_STATUS
|
||||
Mode = #SYNC
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_ClearBuff",strChannelName[],strPlace[],Ret.Connected)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_Open(strChannelName[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Open",strChannelName[])
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
showMsgDepend(Ret)
|
||||
|
||||
IF (Ret.Msg_No == 0) THEN
|
||||
Ret.Connected = true
|
||||
ENDIF
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_Clear(strChannelName[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Clear",strChannelName[])
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetInteger(strChannelName[]:IN,strPlace[]:IN,value:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL INT value
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value,Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetInt(strChannelName[]:IN,strPlace[]:IN,value:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL INT value
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value,Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetIntegerArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL INT value[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetIntArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL INT value[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetBool(strChannelName[]:IN,strPlace[]:IN,value:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL BOOL value
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value,Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetBoolArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL BOOL value[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetReal(strChannelName[]:IN,strPlace[]:IN,value:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL REAL value
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value,Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetRealArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL REAL value[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetString(strChannelName[]:IN,strPlace[]:IN,value[]:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL CHAR value[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetFrame(strChannelName[]:IN,strPlace[]:IN,value:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL FRAME value
|
||||
DECL CHAR Buff[24]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
DECL INT Offset
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
Ret.buff=1
|
||||
|
||||
Offset = 0
|
||||
Cast_To(Buff[], Offset,value)
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],Buff[],Ret.Buff, Ret.Read, TYPEFRAME,Ret.Connected, Ret.Counter)
|
||||
|
||||
Offset=0
|
||||
Cast_From(Buff[], Offset,value)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_GetFrameArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL FRAME value[]
|
||||
DECL CHAR Buff[3600]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
DECL INT Offset
|
||||
DECL INT i,arraysize
|
||||
DECL BOOL ReadContinue
|
||||
DECL INT MayArrSz
|
||||
DECL INT ReadElements
|
||||
|
||||
MayArrSz = 150
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
REPEAT
|
||||
ReadContinue = false
|
||||
ReadElements=0
|
||||
arraysize=0
|
||||
; detect array size!
|
||||
Offset=0
|
||||
WHILE(($ERR.NUMBER==0) AND (arraysize<MayArrSz))
|
||||
arraysize = arraysize + 1
|
||||
ON_ERROR_PROCEED
|
||||
CAST_TO(Buff[],Offset,value[arraysize+Ret.read])
|
||||
ENDWHILE
|
||||
|
||||
IF ((arraysize+Ret.read == 1) AND ($ERR.NUMBER<>0)) THEN
|
||||
Ret.Msg_No = -26
|
||||
EXIT
|
||||
ENDIF
|
||||
|
||||
IF ((arraysize == 1) AND ($ERR.NUMBER<>0)) THEN
|
||||
EXIT
|
||||
ENDIF
|
||||
|
||||
IF ((arraysize == MayArrSz) AND ($ERR.NUMBER==0)) THEN
|
||||
ReadContinue = true;
|
||||
ELSE
|
||||
arraysize = arraysize - 1
|
||||
ENDIF
|
||||
|
||||
Ret.Buff = arraysize
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],Buff[],Ret.Buff,ReadElements, TYPEFRAME,Ret.Connected, Ret.Counter)
|
||||
|
||||
Offset = 0
|
||||
FOR i=1 to ReadElements
|
||||
Cast_From(Buff[], Offset,value[i + Ret.Read])
|
||||
ENDFOR
|
||||
|
||||
Ret.Read = Ret.Read + ReadElements
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
showMsgDepend(Ret)
|
||||
|
||||
UNTIL ((Ret.Msg_No <> 0) OR (ReadContinue == false) OR (Ret.Buff == 0) OR (arraysize<MayArrSz))
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_Send(strChannelName[]:IN,strPlace[]:IN, Len:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
DECL INT Len
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
IF (VARSTATE("Len") == #Declared) THEN
|
||||
Len = 0
|
||||
ENDIF
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Send",strChannelName[],strPlace[],Ret.Connected,Len)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_SetInt(strChannelName[]:IN,strPlace[]:IN,value:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL INT value
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Set",strChannelName[],strPlace[],value,TYPENULL,Ret.Connected)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_SetReal(strChannelName[]:IN,strPlace[]:IN,value:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL REAL value
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Set",strChannelName[],strPlace[],value,TYPENULL,Ret.Connected)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_SetBool(strChannelName[]:IN,strPlace[]:IN,value:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL BOOL value
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Set",strChannelName[],strPlace[],value,TYPENULL,Ret.Connected)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_SetString(strChannelName[]:IN,strPlace[]:IN,value[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL CHAR value[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Set",strChannelName[],strPlace[],value[],TYPENULL,Ret.Connected)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_SetFrame(strChannelName[]:IN,strPlace[]:IN,value:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL FRAME value
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
DECL CHAR BUFF[24]
|
||||
DECL INT Offset
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
Offset = 0
|
||||
Cast_To(BUFF[], Offset,value)
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Set",strChannelName[],strPlace[], BUFF[], TYPEFRAME,Ret.Connected)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_SetParameter(strChannelName[]:IN,strParName[]:IN,strValue[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strParName[]
|
||||
DECL CHAR strValue[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_SetParam",strChannelName[],strParName[],strValue[],Ret.Connected)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEF EKI_Check(Ret:IN,Type:IN,strChannelName[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL EKI_STATUS Ret
|
||||
DECL EKrlMsgType Type
|
||||
INT Handle
|
||||
DECL KrlMsg_T name
|
||||
DECL KrlMsgPar_T params[3]
|
||||
DECL KrlMsgOpt_T options
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL INT Offset
|
||||
DECL INT Filter
|
||||
DECL INT i
|
||||
|
||||
IF (VARSTATE("strChannelName[]")==#INITIALIZED) THEN
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_CheckErr",strChannelName[],Ret.Connected)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
ENDIF
|
||||
|
||||
Ret.Msg_No = (ERRMSG_ALL B_AND Ret.Msg_No)
|
||||
|
||||
IF (Ret.Msg_No <>0) THEN
|
||||
name={modul[] "EthernetKRL", Nr 1, msg_txt[] "0"}
|
||||
Filter = 255
|
||||
FOR i=(0) TO (1)
|
||||
name.nr = (Ret.Msg_No B_AND Filter)
|
||||
IF (name.nr <> 0) THEN
|
||||
Offset = 0
|
||||
CONTINUE
|
||||
SWRITE(name.msg_txt[],Stat,Offset,"eki%i",name.nr)
|
||||
Handle = Set_KrlMsg(Type, name, params[], options)
|
||||
ENDIF
|
||||
Filter = 65280
|
||||
ENDFOR
|
||||
IF(Type==#Quit) THEN
|
||||
WHILE(Exists_KrlMsg(Handle))
|
||||
wait sec 0.2
|
||||
ENDWHILE
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF (VARSTATE("strChannelName[]")==#INITIALIZED) THEN
|
||||
EKI_Check_User(Ret,Type,strChannelName[])
|
||||
ELSE
|
||||
EKI_Check_User(Ret,Type)
|
||||
ENDIF
|
||||
END
|
||||
|
||||
|
||||
; ===========================================================
|
||||
GLOBAL DEFFCT EKI_STATUS EKI_CheckBuffer(strChannelName[]:IN,strPlace[]:IN)
|
||||
DECL CHAR strChannelName[]
|
||||
DECL CHAR strPlace[]
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
Mode = #SYNC
|
||||
Ret = EKI_NULL_STATUS
|
||||
|
||||
CONTINUE
|
||||
CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_CheckBuff",strChannelName[],strPlace[],Ret.Buff,Ret.Connected, Ret.Counter)
|
||||
|
||||
Ret.Msg_No = -Stat.Msg_No
|
||||
|
||||
showMsgDepend(Ret)
|
||||
|
||||
RETURN Ret
|
||||
ENDFCT
|
||||
|
||||
; ===========================================================
|
||||
DEF showMsgDepend(Ret:OUT)
|
||||
DECL EKI_STATUS Ret
|
||||
|
||||
IF (Ret.Msg_no B_AND ERRMSG_FORBIDDEN)==0 THEN
|
||||
EKI_CHECK(Ret,#QUIT)
|
||||
ENDIF
|
||||
|
||||
Ret.Msg_no = Ret.Msg_no B_AND ERRMSG_ALL
|
||||
END
|
||||
|
||||
;ENDFOLD EKI_InternalProgram
|
||||
|
||||
39
KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL_USER.src
Normal file
39
KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL_USER.src
Normal file
@@ -0,0 +1,39 @@
|
||||
&ACCESS RO
|
||||
&REL 2314
|
||||
&PARAM DISKPATH = TP/EthernetKRL
|
||||
DEF EthernetKRL_USER( )
|
||||
;************************************************************
|
||||
; CopyRight KUKA Deutschland GmbH 2018
|
||||
; last modified 11.07.2012
|
||||
; prefix EKI
|
||||
; functions user routine for error handling
|
||||
;************************************************************
|
||||
END
|
||||
|
||||
;FOLD EKI_UserProgram
|
||||
; ===========================================================
|
||||
GLOBAL DEF EKI_Check_User(Ret:IN,Type:IN,strChannelName[]:IN)
|
||||
;FOLD Initialize variables
|
||||
DECL CHAR strChannelName[]
|
||||
DECL EKI_STATUS Ret
|
||||
DECL EKrlMsgType Type
|
||||
INT Handle
|
||||
DECL KrlMsg_T name
|
||||
DECL KrlMsgPar_T params[3]
|
||||
DECL KrlMsgOpt_T options
|
||||
DECL STATE_T Stat
|
||||
DECL MODUS_T Mode
|
||||
DECL BOOL B
|
||||
DECL INT Offset
|
||||
;ENDFOLD
|
||||
|
||||
IF (VARSTATE("strChannelName[]")==#INITIALIZED) THEN
|
||||
; strChannelName is initialized
|
||||
ENDIF
|
||||
|
||||
;************************************************************
|
||||
;write your error handling here
|
||||
;************************************************************
|
||||
|
||||
END
|
||||
;ENDFOLD EKI_UserProgram
|
||||
3
KUKA/KRC/R1/TP/Signals.dat
Normal file
3
KUKA/KRC/R1/TP/Signals.dat
Normal file
@@ -0,0 +1,3 @@
|
||||
&ACCESS RV
|
||||
DEFDAT SIGNALS PUBLIC
|
||||
ENDDAT
|
||||
103
KUKA/KRC/R1/TP/p00.dat
Normal file
103
KUKA/KRC/R1/TP/p00.dat
Normal file
@@ -0,0 +1,103 @@
|
||||
&ACCESS R1
|
||||
&COMMENT EXTERNAL package
|
||||
DEFDAT P00
|
||||
|
||||
BOOL PLC_ENABLE=FALSE ; Enable error-code transmission to plc
|
||||
INT I
|
||||
INT F_NO=1
|
||||
INT MAXERR_C=1 ; maximum messages for $STOPMESS
|
||||
INT MAXERR_A=1 ; maximum messages for APPLICATION
|
||||
DECL STOPMESS MLD
|
||||
SIGNAL ERR $OUT[25] TO $OUT[32]
|
||||
BOOL FOUND
|
||||
|
||||
STRUC PRESET INT OUT,CHAR PKG[3],INT ERR
|
||||
DECL PRESET P[255]
|
||||
|
||||
; z.B. P[1] FEHLERCODE AN SPS = 1
|
||||
;WENN:
|
||||
;AUTOMATIK_EXTERN PKG[] = "P00"
|
||||
;PARITAETSFEHLER = 10
|
||||
|
||||
; z.B. P[128] FEHLERCODE AN SPS = 128
|
||||
;WENN:
|
||||
;$STOPMESS-MELDUNG PKG[] = "CTL"
|
||||
;NOT-AUS: = 1
|
||||
|
||||
; APPLICATION MESSAGES: P[1]...P[127]
|
||||
P[1]={OUT 2,PKG[] "P00",ERR 10}
|
||||
;...
|
||||
;...
|
||||
; $STOPMESS MESSAGES: P[128]...P[255]
|
||||
P[128]={OUT 128,PKG[] "CTL",ERR 1}
|
||||
;...
|
||||
;...
|
||||
P[255]={OUT 255,PKG[] "CTL",ERR 1001}
|
||||
|
||||
STRUC ERR_MESS CHAR P[3],INT E
|
||||
DECL ERR_MESS ERR_FILE[64]
|
||||
ERR_FILE[1]={P[] "XXX",E 0}
|
||||
ERR_FILE[2]={P[] "XXX",E 0}
|
||||
ERR_FILE[3]={P[] "XXX",E 0}
|
||||
ERR_FILE[4]={P[] "XXX",E 0}
|
||||
ERR_FILE[5]={P[] "XXX",E 0}
|
||||
ERR_FILE[6]={P[] "XXX",E 0}
|
||||
ERR_FILE[7]={P[] "XXX",E 0}
|
||||
ERR_FILE[8]={P[] "XXX",E 0}
|
||||
ERR_FILE[9]={P[] "XXX",E 0}
|
||||
ERR_FILE[10]={P[] "XXX",E 0}
|
||||
ERR_FILE[11]={P[] "XXX",E 0}
|
||||
ERR_FILE[12]={P[] "XXX",E 0}
|
||||
ERR_FILE[13]={P[] "XXX",E 0}
|
||||
ERR_FILE[14]={P[] "XXX",E 0}
|
||||
ERR_FILE[15]={P[] "XXX",E 0}
|
||||
ERR_FILE[16]={P[] "XXX",E 0}
|
||||
ERR_FILE[17]={P[] "XXX",E 0}
|
||||
ERR_FILE[18]={P[] "XXX",E 0}
|
||||
ERR_FILE[19]={P[] "XXX",E 0}
|
||||
ERR_FILE[20]={P[] "XXX",E 0}
|
||||
ERR_FILE[21]={P[] "XXX",E 0}
|
||||
ERR_FILE[22]={P[] "XXX",E 0}
|
||||
ERR_FILE[23]={P[] "XXX",E 0}
|
||||
ERR_FILE[24]={P[] "XXX",E 0}
|
||||
ERR_FILE[25]={P[] "XXX",E 0}
|
||||
ERR_FILE[26]={P[] "XXX",E 0}
|
||||
ERR_FILE[27]={P[] "XXX",E 0}
|
||||
ERR_FILE[28]={P[] "XXX",E 0}
|
||||
ERR_FILE[29]={P[] "XXX",E 0}
|
||||
ERR_FILE[30]={P[] "XXX",E 0}
|
||||
ERR_FILE[31]={P[] "XXX",E 0}
|
||||
ERR_FILE[32]={P[] "XXX",E 0}
|
||||
ERR_FILE[33]={P[] "XXX",E 0}
|
||||
ERR_FILE[34]={P[] "XXX",E 0}
|
||||
ERR_FILE[35]={P[] "XXX",E 0}
|
||||
ERR_FILE[36]={P[] "XXX",E 0}
|
||||
ERR_FILE[37]={P[] "XXX",E 0}
|
||||
ERR_FILE[38]={P[] "XXX",E 0}
|
||||
ERR_FILE[39]={P[] "XXX",E 0}
|
||||
ERR_FILE[40]={P[] "XXX",E 0}
|
||||
ERR_FILE[41]={P[] "XXX",E 0}
|
||||
ERR_FILE[42]={P[] "XXX",E 0}
|
||||
ERR_FILE[43]={P[] "XXX",E 0}
|
||||
ERR_FILE[44]={P[] "XXX",E 0}
|
||||
ERR_FILE[45]={P[] "XXX",E 0}
|
||||
ERR_FILE[46]={P[] "XXX",E 0}
|
||||
ERR_FILE[47]={P[] "XXX",E 0}
|
||||
ERR_FILE[48]={P[] "XXX",E 0}
|
||||
ERR_FILE[49]={P[] "XXX",E 0}
|
||||
ERR_FILE[50]={P[] "XXX",E 0}
|
||||
ERR_FILE[51]={P[] "XXX",E 0}
|
||||
ERR_FILE[52]={P[] "XXX",E 0}
|
||||
ERR_FILE[53]={P[] "XXX",E 0}
|
||||
ERR_FILE[54]={P[] "XXX",E 0}
|
||||
ERR_FILE[55]={P[] "XXX",E 0}
|
||||
ERR_FILE[56]={P[] "XXX",E 0}
|
||||
ERR_FILE[57]={P[] "XXX",E 0}
|
||||
ERR_FILE[58]={P[] "XXX",E 0}
|
||||
ERR_FILE[59]={P[] "XXX",E 0}
|
||||
ERR_FILE[60]={P[] "XXX",E 0}
|
||||
ERR_FILE[61]={P[] "XXX",E 0}
|
||||
ERR_FILE[62]={P[] "XXX",E 0}
|
||||
ERR_FILE[63]={P[] "XXX",E 0}
|
||||
ERR_FILE[64]={P[] "XXX",E 0}
|
||||
ENDDAT
|
||||
452
KUKA/KRC/R1/TP/p00.src
Normal file
452
KUKA/KRC/R1/TP/p00.src
Normal file
@@ -0,0 +1,452 @@
|
||||
&ACCESS R1
|
||||
&COMMENT EXTERNAL package
|
||||
DEF P00 (COMMAND :IN,PGNO_FUNCT :IN,P_ID[] :OUT,E_NO :IN )
|
||||
DECL P00_COMMAND COMMAND
|
||||
DECL FUNCT_TYPE PGNO_FUNCT
|
||||
DECL CHAR P_ID[]
|
||||
E6AXIS AK_AXIS
|
||||
REAL AX_DIST
|
||||
INT E_NO
|
||||
SWITCH COMMAND
|
||||
CASE #INIT_EXT
|
||||
INIT_EXT ( )
|
||||
CASE #EXT_PGNO
|
||||
EXT_PGNO (PGNO_FUNCT )
|
||||
CASE #CHK_HOME
|
||||
CHK_HOME ( )
|
||||
CASE #EXT_ERR
|
||||
EXT_ERR (P_ID[],E_NO )
|
||||
ENDSWITCH
|
||||
END
|
||||
|
||||
|
||||
DEF INIT_EXT ( )
|
||||
;********************************
|
||||
; Function: initializing of the
|
||||
; external interface
|
||||
;********************************
|
||||
BOOL ERROR
|
||||
INT N
|
||||
PGNO_ERROR=0
|
||||
;********************************
|
||||
;CHECK HOME
|
||||
;********************************
|
||||
|
||||
;********************************
|
||||
;INIT PGNO_REQ UND APPL_RUN
|
||||
;********************************
|
||||
IF (PGNO_REQ>0) THEN
|
||||
$OUT[PGNO_REQ]=FALSE
|
||||
ENDIF
|
||||
IF (PGNO_REQ<0) THEN
|
||||
$OUT[-PGNO_REQ]=TRUE
|
||||
ENDIF
|
||||
IF (APPL_RUN>0) THEN
|
||||
$OUT[APPL_RUN]=FALSE
|
||||
ENDIF
|
||||
IF PLC_ENABLE AND (ERR_TO_PLC>0) THEN
|
||||
$OUT[ERR_TO_PLC]=FALSE
|
||||
ENDIF
|
||||
IF REFLECT_PROG_NR==1 THEN
|
||||
FOR N=0 TO PGNO_LENGTH-1
|
||||
$OUT[PGNO_FBIT_REFL+N]=FALSE
|
||||
ENDFOR
|
||||
ENDIF
|
||||
;*******************
|
||||
REPEAT
|
||||
;***********************************************************
|
||||
ERROR=FALSE
|
||||
REPEAT
|
||||
IF ($I_O_ACTCONF==FALSE) THEN
|
||||
ERROR=TRUE
|
||||
MsgQuit("OperatorModeWrong", "P00")
|
||||
ENDIF
|
||||
UNTIL ($I_O_ACTCONF==TRUE)
|
||||
SWITCH PGNO_TYPE
|
||||
;*********************************************************
|
||||
CASE 1,2 ;bci-coding,bcd-coding
|
||||
;*********************************************************
|
||||
;***** CHECK PGNO_LENGTH *****
|
||||
IF (PGNO_LENGTH<1) THEN
|
||||
ERROR=TRUE ;pgno_length
|
||||
MsgQuit("PgNo_LengthRangeWrong", "P00")
|
||||
ENDIF
|
||||
IF (PGNO_TYPE==1) THEN ;bci-coding
|
||||
IF (PGNO_LENGTH>16) THEN
|
||||
ERROR=TRUE ;pgno_length
|
||||
MsgQuit("PgNo_LengthRangeWrong", "P00")
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF (PGNO_TYPE==2) THEN ;bcd-coding
|
||||
SWITCH PGNO_LENGTH
|
||||
CASE 4,8,12,16
|
||||
DEFAULT
|
||||
ERROR=TRUE ;pgno_length
|
||||
MsgQuit("PgNo_LengthWrong", "P00")
|
||||
ENDSWITCH
|
||||
ENDIF
|
||||
;***** CHECK PGNO_FBIT *****
|
||||
IF (PGNO_FBIT<1) THEN
|
||||
ERROR=TRUE ;pgno_fbit
|
||||
MsgQuit("PgNo_FBitWrong", "P00")
|
||||
ENDIF
|
||||
;***** CHECK PGNO_REQ *****
|
||||
IF (PGNO_REQ==0) THEN
|
||||
ERROR=TRUE ;pgno_req
|
||||
MsgQuit("PgNo_ReqWrong", "P00")
|
||||
ENDIF
|
||||
IF (PGNO_REQ>0) THEN ;active high
|
||||
$OUT[PGNO_REQ]=FALSE ;reset
|
||||
WAIT SEC 0.2 ;delay for plc
|
||||
ENDIF
|
||||
IF (PGNO_REQ<0) THEN ;active low
|
||||
$OUT[PGNO_REQ*(-1)]=TRUE ;reset
|
||||
WAIT SEC 0.2 ;delay for plc
|
||||
ENDIF
|
||||
;*********************************************************
|
||||
CASE 3 ;one out of n
|
||||
;*********************************************************
|
||||
;***** CHECK PGNO_LENGTH *****
|
||||
IF (PGNO_LENGTH<1) THEN
|
||||
ERROR=TRUE ;pgno_length
|
||||
MsgQuit("PgNo_LengthRangeWrong", "P00")
|
||||
ENDIF
|
||||
IF (PGNO_LENGTH>16) THEN
|
||||
ERROR=TRUE ;pgno_length
|
||||
MsgQuit("PgNo_LengthRangeWrong", "P00")
|
||||
ENDIF
|
||||
;***** CHECK PGNO_FBIT *****
|
||||
IF (PGNO_FBIT<1) THEN
|
||||
ERROR=TRUE ;pgno_fbit
|
||||
MsgQuit("PgNo_FBitWrong", "P00")
|
||||
ENDIF
|
||||
|
||||
;*********************************************************
|
||||
DEFAULT ;PGNO_TYPE wrong type
|
||||
;*********************************************************
|
||||
ERROR=TRUE ;pgno_type
|
||||
MsgQuit ("PgNo_TypeWrong", "P00")
|
||||
ENDSWITCH
|
||||
;***********************************************************
|
||||
UNTIL (ERROR==FALSE)
|
||||
END
|
||||
|
||||
|
||||
DEF EXT_PGNO (FUNCT :OUT )
|
||||
;********************************
|
||||
; Function: communication program
|
||||
; for external mode
|
||||
;********************************
|
||||
DECL FUNCT_TYPE FUNCT
|
||||
INT I,J,K,L,M,N,nHandle
|
||||
BOOL P_RECV,P_CALC,bRes
|
||||
J=1
|
||||
K=0
|
||||
L=1
|
||||
P_RECV=FALSE
|
||||
P_CALC=FALSE
|
||||
IF (APPL_RUN>0) THEN
|
||||
$OUT[APPL_RUN]=FALSE
|
||||
ENDIF
|
||||
SWITCH FUNCT
|
||||
;*******************
|
||||
CASE #PGNO_ACKN
|
||||
;*******************
|
||||
IF (PGNO_REQ>0) THEN
|
||||
$OUT[PGNO_REQ]=FALSE
|
||||
ENDIF
|
||||
IF (PGNO_REQ<0) THEN
|
||||
$OUT[PGNO_REQ*(-1)]=TRUE
|
||||
ENDIF
|
||||
IF (APPL_RUN>0) THEN
|
||||
$OUT[APPL_RUN]=TRUE
|
||||
ENDIF
|
||||
;*******************
|
||||
CASE #PGNO_GET
|
||||
;*******************
|
||||
IF REFLECT_PROG_NR==1 THEN
|
||||
FOR N=0 TO PGNO_LENGTH-1
|
||||
$OUT[PGNO_FBIT_REFL+N]=FALSE
|
||||
ENDFOR
|
||||
ENDIF
|
||||
SWITCH PGNO_TYPE
|
||||
;*******************
|
||||
CASE 1,2
|
||||
;*******************
|
||||
IF (PGNO_VALID>0) THEN
|
||||
WAIT FOR $IN[PGNO_VALID]==FALSE
|
||||
ENDIF
|
||||
IF (PGNO_VALID==0) THEN
|
||||
WAIT FOR $EXT_START==FALSE
|
||||
ENDIF
|
||||
IF (PGNO_VALID<0) THEN
|
||||
WAIT FOR $IN[PGNO_VALID*(-1)]==TRUE
|
||||
ENDIF
|
||||
IF (PGNO_REQ>0) THEN
|
||||
$OUT[PGNO_REQ]=TRUE
|
||||
ENDIF
|
||||
IF (PGNO_REQ<0) THEN
|
||||
$OUT[PGNO_REQ*(-1)]=FALSE
|
||||
ENDIF
|
||||
IF (PGNO_VALID>0) THEN
|
||||
MsgState(nHandle, "Wait for PGNO_VALID=True", "P00")
|
||||
REPEAT
|
||||
IF REFLECT_PROG_NR==1 THEN
|
||||
FOR I=0 TO PGNO_LENGTH-1
|
||||
IF $IN[PGNO_FBIT+I]==TRUE THEN
|
||||
$OUT[PGNO_FBIT_REFL+I]=TRUE
|
||||
ELSE
|
||||
$OUT[PGNO_FBIT_REFL+I]=FALSE
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDIF
|
||||
UNTIL $IN[PGNO_VALID]==TRUE
|
||||
bRes=Clear_KrlMsg (nHandle)
|
||||
ENDIF
|
||||
IF (PGNO_VALID==0) THEN
|
||||
MsgState(nHandle, "Wait for $EXT_START=True", "P00")
|
||||
REPEAT
|
||||
IF REFLECT_PROG_NR==1 THEN
|
||||
FOR I=0 TO PGNO_LENGTH-1
|
||||
IF $IN[PGNO_FBIT+I]==TRUE THEN
|
||||
$OUT[PGNO_FBIT_REFL+I]=TRUE
|
||||
ELSE
|
||||
$OUT[PGNO_FBIT_REFL+I]=FALSE
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDIF
|
||||
UNTIL $EXT_START==TRUE
|
||||
bRes=Clear_KrlMsg (nHandle)
|
||||
ENDIF
|
||||
IF (PGNO_VALID<0) THEN
|
||||
MsgState(nHandle, "Wait for PGNO_VALID=False", "P00")
|
||||
REPEAT
|
||||
IF REFLECT_PROG_NR==1 THEN
|
||||
FOR I=0 TO PGNO_LENGTH-1
|
||||
IF $IN[PGNO_FBIT+I]==TRUE THEN
|
||||
$OUT[PGNO_FBIT_REFL+I]=TRUE
|
||||
ELSE
|
||||
$OUT[PGNO_FBIT_REFL+I]=FALSE
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDIF
|
||||
UNTIL $IN[PGNO_VALID*(-1)]==FALSE
|
||||
bRes=Clear_KrlMsg (nHandle)
|
||||
ENDIF
|
||||
PGNO=0
|
||||
SWITCH PGNO_TYPE
|
||||
;*******************
|
||||
CASE 1
|
||||
;*******************
|
||||
FOR I=0 TO PGNO_LENGTH-1
|
||||
IF $IN[PGNO_FBIT+I] THEN
|
||||
IF REFLECT_PROG_NR==1 THEN
|
||||
$OUT[PGNO_FBIT_REFL+I]=TRUE
|
||||
ENDIF
|
||||
PGNO=PGNO+J
|
||||
ENDIF
|
||||
J=J*2
|
||||
ENDFOR
|
||||
;*******************
|
||||
CASE 2
|
||||
;*******************
|
||||
FOR I=0 TO PGNO_LENGTH-1 STEP 4
|
||||
N=0
|
||||
J=1
|
||||
FOR M=I TO I+3
|
||||
IF $IN[PGNO_FBIT+M] THEN
|
||||
N=N+J
|
||||
IF REFLECT_PROG_NR==1 THEN
|
||||
$OUT[PGNO_FBIT_REFL+M]=TRUE
|
||||
ENDIF
|
||||
ENDIF
|
||||
J=J*2
|
||||
ENDFOR
|
||||
IF (N>9) THEN
|
||||
PGNO_ERROR=2
|
||||
PGNO=0
|
||||
EXIT
|
||||
ELSE
|
||||
PGNO=PGNO+N*L
|
||||
L=L*10
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDSWITCH
|
||||
IF (PGNO_ERROR<>2) THEN
|
||||
IF (PGNO_PARITY>0) THEN
|
||||
P_RECV=$IN[PGNO_PARITY]
|
||||
FOR I=0 TO PGNO_LENGTH-1
|
||||
P_CALC=P_CALC EXOR $IN[PGNO_FBIT+I]
|
||||
ENDFOR
|
||||
IF (P_RECV<>P_CALC) THEN
|
||||
PGNO=0
|
||||
PGNO_ERROR=1
|
||||
ELSE
|
||||
PGNO_ERROR=0
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF (PGNO_PARITY<0) THEN
|
||||
P_RECV=$IN[PGNO_PARITY*(-1)]
|
||||
FOR I=0 TO PGNO_LENGTH-1
|
||||
P_CALC=P_CALC EXOR $IN[PGNO_FBIT+I]
|
||||
ENDFOR
|
||||
IF (P_RECV<> NOT (P_CALC)) THEN
|
||||
PGNO=0
|
||||
PGNO_ERROR=1
|
||||
ELSE
|
||||
PGNO_ERROR=0
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
;*******************
|
||||
CASE 3
|
||||
;*******************
|
||||
IF PGNO>0 THEN
|
||||
WAIT FOR $IN[PGNO_FBIT+PGNO-1]==FALSE
|
||||
ENDIF
|
||||
K=0
|
||||
REPEAT
|
||||
FOR I=0 TO PGNO_LENGTH-1
|
||||
IF $IN[PGNO_FBIT+I] THEN
|
||||
IF K==0 THEN
|
||||
K=I+1
|
||||
ELSE
|
||||
PGNO_ERROR=0
|
||||
K=0
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDFOR
|
||||
UNTIL ((K<>0) OR (PGNO_ERROR==0))
|
||||
PGNO=K
|
||||
ENDSWITCH
|
||||
;***********************************************************
|
||||
CASE #PGNO_FAULT
|
||||
;***********************************************************
|
||||
IF PGNO_ERROR==1 THEN
|
||||
MsgQuit("ParityFault", "P00", PGNO)
|
||||
ENDIF
|
||||
IF PGNO_ERROR==2 THEN
|
||||
MsgQuit("BCDCodeError", "P00", PGNO)
|
||||
ENDIF
|
||||
IF PGNO_ERROR==0 THEN
|
||||
IF (PGNO_TYPE==3) THEN
|
||||
MsgQuit("ProgNumberWrong", "P00")
|
||||
ELSE
|
||||
MsgQuit("ProgramNotAvailable", "P00", PGNO)
|
||||
ENDIF
|
||||
ENDIF
|
||||
PGNO_ERROR=0
|
||||
IF (PGNO_REQ>0) THEN
|
||||
$OUT[PGNO_REQ]=FALSE
|
||||
ENDIF
|
||||
IF (PGNO_REQ<0) THEN
|
||||
$OUT[PGNO_REQ*(-1)]=TRUE
|
||||
ENDIF
|
||||
WAIT SEC 0.5
|
||||
ENDSWITCH
|
||||
END
|
||||
|
||||
|
||||
DEF CHK_HOME ( )
|
||||
BOOL H
|
||||
|
||||
IF ($I_O_ACTCONF==TRUE) THEN
|
||||
REPEAT
|
||||
H=TRUE
|
||||
IF ($IN_HOME==FALSE) THEN
|
||||
H=FALSE
|
||||
REPEAT
|
||||
MsgQuit("MoveHomeInT1", "P00")
|
||||
IF (($MODE_OP==#T1) OR ($MODE_OP==#T2)) THEN
|
||||
RETURN
|
||||
ENDIF
|
||||
HALT
|
||||
UNTIL $IN_HOME==TRUE
|
||||
ELSE
|
||||
H=TRUE
|
||||
ENDIF
|
||||
UNTIL ((H==TRUE) OR ($I_O_ACTCONF==FALSE))
|
||||
ENDIF
|
||||
END
|
||||
|
||||
|
||||
DEF EXT_ERR (P_ID :OUT, E_NO :IN )
|
||||
;******************************
|
||||
;Function : ext. error messages
|
||||
; for package P00
|
||||
;******************************
|
||||
CHAR P_ID[]
|
||||
INT E_NO,M
|
||||
;********* MODUL-/FEHLER-NUMMER AUSWERTEN ********
|
||||
I=1
|
||||
FOUND=FALSE
|
||||
IF (E_NO==0) THEN
|
||||
IF PLC_ENABLE THEN
|
||||
ERR=0
|
||||
WAIT SEC 0.2
|
||||
IF (ERR_TO_PLC >0) THEN
|
||||
$OUT[ERR_TO_PLC]=FALSE
|
||||
WAIT SEC 0.2
|
||||
ENDIF
|
||||
ENDIF
|
||||
ELSE
|
||||
IF PLC_ENABLE THEN
|
||||
FOUND=FALSE
|
||||
;******************************
|
||||
; APPLIKATIONS-FEHLER AUSWERTEN
|
||||
;******************************
|
||||
I=1
|
||||
REPEAT
|
||||
IF (E_NO==P[I].ERR) THEN
|
||||
IF (P_ID[1]==P[I].PKG[1]) THEN
|
||||
IF (P_ID[2]==P[I].PKG[2]) THEN
|
||||
IF (P_ID[3]==P[I].PKG[3]) THEN
|
||||
FOUND=TRUE
|
||||
ERR=P[I].OUT
|
||||
F_WRITE ( )
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
I=I+1
|
||||
UNTIL (I>MAXERR_A) OR FOUND
|
||||
;***************************
|
||||
; $STOPMESS-FEHLER AUSWERTEN
|
||||
;***************************
|
||||
I=128
|
||||
IF (P_ID[1]=="C") THEN
|
||||
IF (P_ID[2]=="T") THEN
|
||||
IF (P_ID[3]=="L") THEN
|
||||
M=MBX_REC(1,MLD)
|
||||
IF M==0 THEN
|
||||
REPEAT
|
||||
IF (MLD.MESSNO==P[I].ERR) THEN
|
||||
FOUND=TRUE
|
||||
ERR=P[I].OUT
|
||||
F_WRITE ( )
|
||||
ENDIF
|
||||
I=I+1
|
||||
UNTIL (I>MAXERR_C+128-1) OR FOUND
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF (ERR_TO_PLC >0) THEN
|
||||
$OUT[ERR_TO_PLC]=TRUE
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
END
|
||||
|
||||
|
||||
DEF F_WRITE ( )
|
||||
IF (F_NO>64) THEN
|
||||
F_NO=1
|
||||
ENDIF
|
||||
ERR_FILE[F_NO].P[1]=P[I].PKG[1]
|
||||
ERR_FILE[F_NO].P[2]=P[I].PKG[2]
|
||||
ERR_FILE[F_NO].P[3]=P[I].PKG[3]
|
||||
ERR_FILE[F_NO].E=P[I].ERR
|
||||
F_NO=F_NO+1
|
||||
END
|
||||
|
||||
Reference in New Issue
Block a user