Applikationsbeispiele

Die im vorhergehenden Abschnitt beschriebenen Visualisierungsdaten können zum Beispiel mit Hilfe der folgenden Applikationen gelesen werden.

ADS-Zugriff via AmsAdsDebugger

An einer laufenden TwinCAT-Steuerung können über den AmsAdsViewer die einzelnen Parameter der Simulation direkt getestet werden.

Applikationsbeispiele 1:
ADS-Zugriff via AmsAdsDebugger

Zugriffe über den CNC Objekt-Browser

Die Sollkonturvisualisierung wird als Bearbeitungsmodus vor dem Programmstart durch die Bedienung eingestellt. Diese Einstellung wird über eine sogenannte Control-Unit an die SPS weitergegeben, welche diese zulassen oder ablehnen kann.

Ebenso hat die SPS hierdurch die Möglichkeit, den Bearbeitungsmodus = Schnelle Konturvisualisierung ohne vorherige HMI-Anforderung selbst anzuwählen.

Applikationsbeispiele 2:
Zugriff über CNC Objekt-Browser

ADS-Zugriff via Win32 Application

Programmierbeispiel

ADS-Zugriff via Win32 Application

static BOOLEAN writeContourParameters(
UNS16 channel_nr, UNS32 grid, REAL64 abs_error, REAL64 rel_error)
{
  SGN32 result;
  SGN32 idx_group = 0x20100 + channel_nr;
  if ((channel_nr < 1) || (channel_nr > SYS_KANAL_MAX))
    return FALSE;
  result = AdsSyncWriteReq( &amsCom,     // Ams address of ADS server
                            idx_group,   // index group:
                            0x89,        // index offset:
                            sizeof(grid),// count of bytes
                                            to read
                            &grid);      // pointer to the
                                            client buffer
  if (0 != result)
    return FALSE;
  result = AdsSyncWriteReq( &amsCom,     // Ams address of
                                            ADS server
                            idx_group,   // index group:
                            0x8c,        // index offset:
                            sizeof(abs_error),// count of
                                                 bytes to
                                                 read
                            &abs_error);  // pointer to the
                                             client buffer
  if (0 != result)
    return FALSE;
  result = AdsSyncWriteReq( &amsCom,     // Ams address of ADS server
                            idx_group,     // index group:
                            0x8B,          // index offset:
                            sizeof(rel_error),// count of
                                                 bytes to
                                                 read
                            &rel_error);  // pointer to the
                                             client buffer
  if (0 != result)
    return FALSE;
  return TRUE;
}
static BOOLEAN activateContourVisu( UNS16 channel_nr)
{
  SGN32 result;
  SGN32 idx_group = 0x20100 + channel_nr;
  UNS32 execution_mode = SOLLKON;
  if ((channel_nr < 1) || (channel_nr > SYS_KANAL_MAX))
    return FALSE;
  result = AdsSyncWriteReq( &amsCom,      // Ams address of ADS server
                            idx_group,     // index group:
                            0x3f,          // index offset:
                            sizeof(execution_mode),
                            &execution_mode);
  if (0 != result)
    return FALSE;
  return TRUE;
}
static BOOLEAN readContourData (
SOLLVISU_PDU_CHAN *p_visu_pdu, UNS16 channel_nr)
{
  SGN32 result;
  UNS32 count;
  UNS32 fifo_count;
  SGN32 idx_group = 0x20100 + channel_nr;
  if ((channel_nr < 1) || (channel_nr > SYS_KANAL_MAX))
    return FALSE;
  // Read number of entries in visualisation output fifo
  result = AdsSyncReadReqEx( &amsCom, // Ams address of ADS server
                             idx_group,  // index group:
                             0x2001,     // index offset:
                             sizeof(fifo_count),
                             &fifo_count,
                             &count);
  if (0 != fifo_count)
  {
    // Data present, read via COM
    result = AdsSyncReadReqEx( &amsCom,   // Ams address of ADS server
                               idx_group,     // index group:
                               0x2000,        // index offset:
                               sizeof(*p_visu_pdu),
                               p_visu_pdu,
                               &count)
    if (0 == result)
      return TRUE;
  }
  return FALSE;
}

Anzeigen von Achspositionen mit DXF Format

Programmierbeispiel

Anzeigen von Achspositionen mit DXF Format

%contour_visu
N001 G01 G90 X0 Y0 Z0 F1000
N100 X100
N200         Y100
N300 X0
N400 Y0
N500 X50 Y50 Z200
N500 X100 Y100 Z0
N600 X0
N700 X50 Y50 Z200
N800 X100 Y0 Z0
N900 G02 I100
N1000 #CS ON[0,0,100, 45 ,0,0]
N1001 G01 G90 X0 Y0 Z0 F1000
N1100 X100
N1200       Y100
N1300 X0
N1400 Y0
N1500 X50 Y50 Z200
N1500 X100 Y100 Z0
N1600 X0
N1700 X50 Y50 Z200
N1800 X100 Y0 Z0
N1900 G02 I100
N1500 #CS OFF
N2000 #CS ON[0,100,-100, 0, 45,0]
N2001 G01 G90 X0 Y0 Z0 F1000
N2100 X100
N2200       Y100
N2300 X0
N2400 Y0
N2500 X50 Y50 Z200
N2500 X100 Y100 Z0
N2600 X0
N2700 X50 Y50 Z200
N2800 X100 Y0 Z0
N2900 G02 I100
N2500 #CS OFF
M30

Die ausgelesenen Achspositionen können genutzt werden, um die abgefahrene Kontur im DXF-Format darzustellen.

DXF-Ausgabedatei

0
SECTION
  2
HEADER
999
isg.dxf
  0
ENDSEC
  0
SECTION
  2
TABLES
  0
ENDSEC
  0
SECTION
  2
BLOCKS
  0
ENDSEC
  0
SECTION
  2
ENTITIES
  0
LINE
  8
  0
62
  2
10
0.000000
20
0.000000
30
0.000000
11
10.000000
21
0.000000
31
0.000000
0
...
Applikationsbeispiele 3:
Darstellung der DXF-Ausgabedatei in einem Viewer