/* Für ISEL EPP-Karte */

/* Dieses MTASC-Programm wird beim Aufruf von EdiTasc ausgeführt */

_AdrBs = 0x378;		/* Basis-Adresse */
_AdrBsIO = 0;		/* Kein Werkzeugwechsel möglich */

/* Modus für Werkz.wechsel bei _ToolAuto eintragen:
 Ohne = 0;
 Manuell = 1;
 Halbautom. (nur Taster) = 2;        NICHT unterstützt!
 Vollautomatisch (mit Magazin) = 3;  NICHT unterstützt!
*/
_ToolAuto = 1;

_L = _path & "\\LIB\\";

/* Analogwert-Anzeige im Fenster Ein-Ausgänge */
_oaValueMin = 5000L;
_oaValueMax = 50000L;

_drvPosiSpeedMax = 20.0;	/* Geschwindigkeit Positionieren */
_drvPosiAccelMax = 200.0;	/* Beschleunigung */
MvPar;				/* Übernehmen */

/* Kundenspezifisch ----------------------------------- */

/* Fortsetzen nach STOP mit Wartezeit */
(MacroDef "_PrgCont") = 
"_PrgOn; _dspUpdate; wait
 3.0		  /* Wartezeit */
 0;
";

/* Nach Programmende Parkposition anfahren:
   Siehe _ToolX[0], _ToolY[0] in Datei Toolpos.ts */
if(0){		/* (1) setzen falls gewünscht, sonst (0) */
_PrgExecReent = 0;
(MacroDef "_PrgEnd") = (MacroDef "_PrgEnd") &
"if(_PrgExecReent){_PrgExecReent = 0; mreset 1;}
 if((_mode == 'X') and (0 == Mstat 'E') and (0 == 0xFF and Mstat 'L'))
 {
 _PrgExecReent = 1;
  sps = ml_f;
  spf = mf_f;
  mf_f = ToolSpeedF / (_Ovr / 100.0);
  MvPar;
  MtransFlag01 = '0';
  z ToolZup - getOcToMc[2]; mf;
  x _ToolX[0] - getOcToMc[0];
  y _ToolY[0] - getOcToMc[1]; mf;
  ml_f = sps; mf_f = spf;
  wait 0;
  MvPar;
  MtransFlag01 = '1';
 _PrgExecReent = 0;
 }
";
}

/* Ein-/Ausgänge direkt über Portadressen */
/* Nur verwendbar, wenn Treiber ausgeschaltet (Mstop '2') */
d = "BaamM";
d[1] = 0x78 + 1;
d[2] = 3;
d[3] = 0x38;
_iDaCh = d;
DaChI = ARY 8  0 4 2 6 1 5 3 7;
(MacroDef "DaCh") = "DaChI[(in _iDaCh) / 8];";

d[1] = 0x78 + 4;
d[3] = 0xFF;
_oDaCh = d;
_iIn = d;
d[1] = 0x78 + 3;
d[3] = 0x03;
_oEnab = d;
d[3] = 0xFF;
_oUrefCh = d;

/* Reset-Ausgang geht direkt */
d = "BaamM";
d[1] = _AdrBs + 2;
d[2] = _AdrBs / 256;
d[3] = 0x04;
_oReset = d;

/* Ein-/Ausgänge über Treiber */
d = "Eam";
d[1] = 1;
d[2] = 255;
_oUref = d;
d[1] = 0;
d[2] = 3;
_oMot = d;
d[2] = 4;
_o2 = d;	/* Spindel */
_o2Label = "Spindel";

out _oReset 0;		/* Reset setzen */
wait 0.6;
out _oReset 255;	/* Reset zurücksetzen */
wait 1.2;
_drvEnable 0x9B;	/* Treiber aktivieren */

_Uref = 0xFF;		/* Referenzspannung */
out _o2 0;		/* Ausgang AUS */

wait 0.2;

/* Endschalter --------------- */
d = "Eam";
d[1] = 0;
d[2] = 0x01;
_i1 = _iEndX2 = d;
d[2] = 0x02;
_i2 = _iEndX = d;
d[2] = 0x04;
_i3 = _iEndY2 = d;
d[2] = 0x08;
_i4 = _iEndY = d;
d[2] = 0x10;
_i5 = _iEndZ2 = d;
d[2] = 0x20;
_i6 = _iEndZ = d;
d[2] = 0x40;
_i7 = _iEndA2 = d;
d[2] = 0x80;
_i8 = _iEndA = d;

/* Status --------------- */
d = "Eam";
d[1] = 1;
d[2] = 0x01;
_i9 = _iPowerRel = d;
d[2] = 0x02;
_i10 = _iHaube = d;
d[2] = 0x04;
_i11 = _iNA = d;
d[2] = 0x08;
_i12 = _iPower = d;
d[2] = 0x10;
_i13 = _iTemp = d;

/* Notaus(Keine Spannung) ---------------------- */
_NAflag = 0;
_NAmsg =
"NOTAUS (Keine Motorspannung)
1. OK betätigen
2. Strom einschalten
3. Achsen neu Referenzieren";

/* Werkzeugwechsel {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ */

_ToolSel = (ToolPar "curr") = 1; /* angenommenes Werkzeug bei Programmstart */

(MacroDef "_ToolOpen") = "";
(MacroDef "_ToolClose") = "";

if(_ToolAuto == 2){
 _iToolZ0 = "";
 if(_AdrBsIO){
  d = "BaamM";
  d[1] = _AdrBsIO + 6;
  d[2] = _AdrBsIO / 256;
  d[3] = 1;
  _o3 = _oTool = d;
  d[1] = _AdrBsIO + 4;
  d[2] = _AdrBsIO / 256;
  d[3] = 1;
  _i7 = _iToolZ0 = d;
 }
 _o3Label = "Werkz.Spann.";
 _i7Label = "Taster";

 (MacroDef "_ToolOpen") = "_oSet 3 1; _dspUpdate;";
 (MacroDef "_ToolClose") = "_oSet 3 0; _dspUpdate;";
}

(MacroDef "GetTool") = "_ToolSel = %1; fcall _path & \"/Gettool.ts\";";
fcall _path & "/ToolPos.ts";
/* }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} */

/* Beschriftung und Modus für Ausgänge: -------------------------------------- */
/* _iMode / _oMode = Modus-Tabellen für Ein-/Ausgänge: Siehe SYSTEM.TS */

/* Motoren Ein/AUS auch über Schalter 1 ermöglichen */
(MacroDef "_MotOn") = "out _oMot 0; wait 0.2; out _oUref _uRef; _oStat[1] = 1; _dspUpdate;";
(MacroDef "_MotOff") = "out _oMot 255; Mlimit '0'; _oStat[1] = 0; _dspUpdate;";
(MacroDef "_MotOffErr") = "";
(MacroDef "_oSet1") = 
"if(%1 and stPrv == 0){_MotOn;}
 if(stPrv and %1 == 0){_MotOff;}";
_o1Label = "Motoren";
_oMode[1] = 2;

_o2Label = "Spindel";
_oMode[2] = 4;

Mtest '1';	/* auf Demo-Modus prüfen */
_demo = 0;
if('0' == Mtest '?'){_demo = 1;}
/* Im Demo-Modus nicht prüfen ob Achsen referenziert */
(MacroDef "_RefTest") = "_demo + '1' == Mlimit '?';";

Mtest '0';	/* Test-Modus aus */
Mlimit '0';

wait 0.2;
MsgBox "Bitte Controller einschalten!" "Bedienerhinweis" MB_OK or MB_ICONEXCLAMATION;

/* -------------------------------- SPS-Überwachung */
if(_demo == 0){
 (MacroDef "_cmdSps") = 
 "_NAflag = (256 * _NAflag) + (0 == in _iPower);
  if(1 == _NAflag){_oSet 1 0; _oSet 2 0; mlimit '0'; mreset _NAmsg;}
  _cmdZLevel;
 ";
}

_MotOn;
if(6 == MsgBox "Achsen Referenzieren?" "Bedienerhinweis" MB_YESNO or MB_ICONEXCLAMATION)
 {_RL = 2; fcall _path & "/RefSrch.ts";}
