Notifications vom BC9000?

ThomasF

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin..

Nachdem ich ja nun die Stati der Klemmen am PLC vom PLC Programm lesen und ändern kann.. Und auch die Stati über mein Windows Programm lesen und ändern kann.. würde ich gerne auch in meinem Windows Programm mitbekommen wenn die PLC was ändert..

Dieses AdsSyncAddDeviceNotificationReq() sieht ja so aus als wenn es täte was ich möchte.. und der Aufruf gibt auch keinen Fehler zurück.. aber die Callback Funktion wird dennoch nicht aufgerufen.. klappt das bei euch? funktioniert das nicht für BOOL Variablen?

natürlich könnte man Pollen aber das kann ich nicht mit meinem Gewissen vereinbaren.. ;)

Eine andere Idee von mir war das der BC9000 vielleicht ein TCP oder UDP Paket mit entsprechendem Inhalt zu meinem Client schickt..

-
Thomas
 
Ich hab jetzt nochmal ziemlich genau das Beispiel aus dem InfoSys genommen.. (nur 2 Byte (short) anstatt 4 bytes)
Dafür habe ich im PLC Control eine Variable im Merker Bereich definiert (%MB0 : INT ) und erhöhe sie auf Knopfdruck..

Mein Callback wird aber trotzdem nicht aufgerufen.. Liegt's an mir?

Habt ihr damit schon Erfahrungen?

Hier ist der Code aus WinMain:
Code:
    LONG                    nErr, nPort = 0;
    ULONG                   hNotification = 0;
    ULONG                   hUser = 0;
    AmsAddr                 Addr = {0};
    PAmsAddr                pAddr = &Addr;
    AdsNotificationAttrib   adsNotificationAttrib;

    nPort = AdsPortOpen();
    Addr.netId.b[0] = 223;
    Addr.netId.b[1] = 223;
    Addr.netId.b[2] = 223;
    Addr.netId.b[3] = 41;
    Addr.netId.b[4] = 1;
    Addr.netId.b[5] = 1;
    Addr.port = 800;

    // Notification aufsetzen
    adsNotificationAttrib.cbLength       = sizeof(short);
    adsNotificationAttrib.nTransMode     = ADSTRANS_SERVERONCHA;
    adsNotificationAttrib.nMaxDelay      = 0; 
    adsNotificationAttrib.dwChangeFilter = 0; 
    nErr = AdsSyncAddDeviceNotificationReq(pAddr, 0x4020, 0, &adsNotificationAttrib, Callback, hUser, &hNotification);

Und die Callback Funktion
Code:
void __stdcall Callback(AmsAddr* pAddr, AdsNotificationHeader* pNotification, ULONG hUser)
{
    short    iDaten;
    uiDaten = *(short *)pNotification->data;
    OutputDebugStr((lexical_cast<wstring, short>(iDaten)).c_str());
}

-
Thomas
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey Thomas!



Stehe derzeit vor genau dem selben Problem. Da der Thread ja scho etwas älter ist, gehe ich davon aus, Du hast eine Lösung gefunden.

Würde mich also über eine Nachricht freuen.
 
Zurück
Oben