ADS access via Win32 application

Programming example

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 enties 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;
}