Beispiele: NI Measurement Studio
Um die TcAdsDll.dll im Measurement Studio zu verwenden, muss die Header-Datei def.h eingebunden werden. Diese Datei enthält fehlende Definitionen und die Struktur __int64, die vom Measurement Studio nicht unterstützt werden. Zur Demonstration sind hier die Notwendigen Änderungen an einem kleinen Beispiel dargestellt. Als Vorlage wurde das Beispiel Ereignisgesteuertes Lesen verwendet.
Header-Datei def.h:
#define __inline
#define _declspec __declspec
typedef struct
{
unsigned long LowPart;
unsigned long HighPart;
} __int64;
Beispiel-Progamm:
#include <ansi_c.h>
#include <windows.h>
#include <winbase.h>
#include <utility.h>
#include "def.h"
#include "c:\twincat\adsapi\tcadsdll\include\tcadsdef.h"
#include "c:\twincat\adsapi\tcadsdll\include\tcadsapi.h"
static void __stdcall NotificationCallback(AmsAddr*pAddr,
AdsNotificationHeader* pNotification, unsigned long hUser)
{
SYSTEMTIME SystemTime, LocalTime;
FILETIME FileTime;
TIME_ZONE_INFORMATION TimeZoneInformation;
FileTime.dwLowDateTime = pNotification->nTimeStamp.LowPart;
FileTime.dwHighDateTime = pNotification->nTimeStamp.HighPart;
FileTimeToSystemTime(&FileTime, &SystemTime);
// Zeit umrechnen in lokaler Zeiteinheit
GetTimeZoneInformation(&TimeZoneInformation);
SystemTimeToTzSpecificLocalTime(&TimeZoneInformation, &SystemTime, &LocalTime);
// Zeitstempel ausgeben
printf("%i:%i:%i.%i den: %i.%i.%i\n",LocalTime.wHour, LocalTime.wMinute, LocalTime.wSecond, LocalTime.wSecond, LocalTime.wDay, LocalTime.wMonth, LocalTime.wYear);
printf("NotificationCallback: nValue = %i\n", *(int *)pNotification->data);
}
int main(int argc, char *argv[])
{
AdsNotificationAttrib adsNotificationAttrib;
int nValue = 0;
int nErr = ADSERR_NOERR;
int port = AdsPortOpen();
int hNotification;
unsigned long hUser;
AmsNetId netId = {172,16,8,56,1,1};
AmsAddr addr;
addr.netId = netId;
addr.port = 801;
nErr = AdsSyncReadReq( &addr, 0x4020, 0x0,
sizeof(nValue), &nValue);
if( nErr != ADSERR_NOERR )
printf("ErrorAdsSyncRead:%i\n", nErr);
else
printf("nValue = %i\n",nValue);
adsNotificationAttrib.cbLength = 4;
adsNotificationAttrib.nTransMode = ADSTRANS_SERVERONCHA;
adsNotificationAttrib.nMaxDelay = 20000000; // 2sec
adsNotificationAttrib.nCycleTime = 10000000; // 1sec
hUser = 3474573467;
nErr = AdsSyncAddDeviceNotificationReq( &addr, 0x4020, 0x0, &adsNotificationAttrib,
NotificationCallback, hUser, &hNotification);
if( nErr != ADSERR_NOERR )
{
printf("ErrorAdsSyncAddDeviceNotificationReq:%i\n", nErr);
return 0;
}
while(!KeyHit());
nErr = AdsSyncDelDeviceNotificationReq( &addr,
hNotification);
if( nErr != ADSERR_NOERR )
printf("Error
AdsSyncDelDeviceNotificationReq:%i\n", nErr);
AdsPortClose();
return 0;
}
Beispielprogramm 'Anpassungen für das Measurement Studio' entpacken.