Werkzeugdaten (D bzw. #TOOL DATA)

Werkzeugeometrie

Bei jedem D<i> bzw. #TOOL DATA fordert die CNC während der NC-Programmdekodierung die Daten des Werkzeuges an.

Bei der Anforderung des neuen Werkzeuges werden die D-Nummer, T-Nummer und die frei verwendbaren P-Parameter des aktuell einge-wechselten Werkzeuges mitgeliefert. Hierdurch kann die PLC erkennen, welches Werkzeug ausgewechselt werden soll. Über die P-Parameter kann z.B. im NC-Programm der Verschleiß eingetragen und im Werkzeugwechsel an die PLC zurückgemeldet werden.

Bei der Anfrage der CNC an die PLC werden folgende Daten (CNC_TOOL_REQUEST_IN) übertragen :

id : CNC_TOOL_ID; (tool id of requested tool)

act_t_nr : DINT; (actual t number in nc kernel)

act_d_nr : CNC_TOOL_ID; (actual tool id in nc kernel)

param : ARRAY[1..60] OF LREAL;

log_ax_nr_tool_length : UINT; (spindle axis for tool length compensation)

Die PLC liefert den kompletten Werkzeugdatensatz (CNC_TOOL_DESC) zurück.

Werkzeugdaten (D bzw. #TOOL DATA) 1:
Abbildung 1-1: Anfordern der Werkzeugdaten von der PLC

Programmierbeispiel: Werkzeugmanager im PLC-Programm, Werkzeugdaten

RInd : ADSRDWRTIND;
RRes : ADSRDWRTRES;
Rind;
IF RInd.VALID THEN
  (* initialize response *)
  RRes.NETID := '';
  RRes.PORT := RInd.PORT;
  RRes.INVOKEID := RInd.INVOKEID;
  (* sender channel nr is coded in the invoke id *)
  cnc_channel_nr := RInd.INVOKEID;
  cnc_channel_nr := cnc_channel_nr AND 16#00FFFFFF;
  (* CNC fordert Werkzeuggeometriedaten aufgrund D<i> an *)
  IF RInd.IDXGRP = ADS_IGRP_TOOL_DESC_READ THEN
    (* Tool data request from CNC *)
    pToolReq := RInd.DATAADDR;
    BasicToolId := pToolReq^.id.basic;
    SpiindleID := pToolReq^.log_ax_nr_tool_length;
    IF BasicToolId <= MAX_TOOLS THEN
    (* transmit tool data in the response *)
      RRes.LEN := SIZEOF(tool[1].cnc.tool_desc);
      RRes.DATAADDR := ADR(tool[BasicToolId].cnc.tool_desc);
      RRes.RESULT := ADS_RDWRT_IND_NO_ERROR;
    ELSE
      (* Tool not present *)
      RRes.LEN := 0;
      RRes.DATAADDR := 0;
      RRes.RESULT := WZV_TOOL_ID_BASIC_INVALID;
    END_IF

Programmierbeispiel

%main
N10 X1200
N11 S2[D1] (Werkzeug D1 für Spindel S2 anfordern
N20 S2[D2 REV=1 M4] (Werkzeug D2 für Spindel S2 anfordern
N30 D3 S100 M3 (Werkzeug D3 für Spindel S anfordern
N40 X0
N480 M30