Variablen Handle per Stream schnell Abfragen

Parallax

Level-1
Beiträge
88
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi...

nach langer Zeit bins ich mal wieder...

eigentlich wollte ich am Mittwoch die Anlage endlich abschließen und nie wieder was damit zu tun haben, allerdings habe ich mal wieder ein problem...

Ich habe mittlerweile annähern 90 Handels die mit ads.createvariablehandle("Variablenname") ereugt wurden....

in einem Threat frage ich dann die einzelnen Variablen mit zum Beispiel:


sStream = New AdsStream(2)
binWriter = New AdsBinaryWriter(sStream)
sStream.Position = 0
binWriter.Write(CType(varExzenter1, Int16))
tcAds.Write(varWrite(23), sStream)
sStream = Nothing

ab und das geht auch sehr schön...

Allerdings ist mir heute aufgefallen das der Threat mittlerweile bei 90 Variablen ca 1sek braucht um alles abzufragen... sollte nun der Schaltpunkt kurz nach seiner Abfrage auftreten und die Reaktion daraus kurz davor so habe ich eine Reaktionszeit von max. 2 sekunden... das ist definitiv zu lang...

nun habe ich gehört das das neuerzeugen von streams sehr lange dauert also habe ich mir gedacht ich schreibe alle daten in einen Stream und ändere nur die Positionen... also den stream einmal mit
sStream = New AdsStream(128) erzeugt und dann nur noch jeweils

sStream.Position = 0 'Änderung der Position um +2 bei nächster Variable
binWriter.Write(CType(varExzenter1, Int16))
tcAds.Write(varWrite(23), sStream)

hingeschrieben... allerdings mag er etz gar nicht mehr...

könnte ihr mir da sagen was falsch is oder wie wie ich die abfrage wieder in eine geeignete Zykluszeit bekomme (so 100ms) währen ausreichend...

mfg
parallax
 
Wie wärs wenn du den Ads-Server entscheiden laesst, wann sich was geändert hat (Stichwort AdsNotification)

Beispiel siehe:

http://infosys.beckhoff.com/content/1031/tcadsnet/html/twincat.ads.sample03.htm

So mach ich das in Anlagen wo mehrere 100 Vars übertragen werden ... und nebenbei hole ich bei Statusänderung noch ein 2D-Array mit 2x 10000 Reals aus der CPU ...

Bisher (obwohl ich am Anfang auch skeptisch war) hat das Ohne Probleme Funktioniert ...

Viel Erfolg,
michael
 
Zuviel Werbung?
-> Hier kostenlos registrieren
danke... werd ichs wohl so machen müssen....

hoffe das das nun schneller ist weil sonst bin ich recht am arsch....

allerdings habe ich wieder ne neue frage...

bei dem beispiel stehen ja etz wieder nur das programm für c++ dabei....

ich hab nun in vb.net folgendens geschrieben:

varRead(25) = tcAds.AddDeviceNotification("VARIABLEN.EINGÄNGE.SENKEN/HEBEN", sStream, 0, 2, AdsTransMode.OnChange, 100, 0, tbData)

das funktioniert ja so ganz gut....

nur etz muss ja noch der stream irgendwie bei änderung ausgelesen werden... das bedeutet ich brauch ein event bei dem ein lesen aus Stream ausgeführt wird... leider geht das so wie in dem C++ beispiel in vb.net nicht...

wäre dankbar wenn du mir dazu noch was sagen könntest...
 
Wie wärs wenn du den Ads-Server entscheiden laesst, wann sich was geändert hat (Stichwort AdsNotification)

Beispiel siehe:

http://infosys.beckhoff.com/content/1031/tcadsnet/html/twincat.ads.sample03.htm

So mach ich das in Anlagen wo mehrere 100 Vars übertragen werden ... und nebenbei hole ich bei Statusänderung noch ein 2D-Array mit 2x 10000 Reals aus der CPU ...

Bisher (obwohl ich am Anfang auch skeptisch war) hat das Ohne Probleme Funktioniert ...

Viel Erfolg,
michael

Hast du irgendwelche Anhaltspunkte, wie lange es von der Änderung bis zu deinem Programm benötigt?
 
das problem ist mir aufgefallen als ich einen Wickler wenden wollte...

die Stellung wird von einer Nocke gegeben, was dann den befehl zum motorstopp auslöst.... allerdings wurde die nocke häufig komplett überfahren und erst dann hat der motor gestoppt... das entspricht ca einer ansprechzeit von 2 sekunden...

mittlerweile habe ich das einlesen über Notficiation gelöst und es läuft super...

allerdings kann ich per notify nicht schreiben und brauche dafür eine ähnlich schnelle methode....

ich verstehe nicht warum beckhoff in ihren dokus nur C++ Codes anzeigt aber ihre beispiel programme in VB.net geschrieben sind...

habe gestern nacht bis um halb 4 gebraucht um per try and error alles herauszufinden.... aber nun gehts ja... die frage ist jetzt nur noch wie ich genau so schnell wie mit den notifys einen ausgang beschreiben kann... den das geht ja nun nicht...

mfg
Parallax
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi ...

Also schreiben kannst du per Notify gar nicht ... da geht es ja nur darum, über Änderungen an PLC-Variablen automatisch benachrichtigt zu werden.

warum hast du Probleme mit dem Überfahren einer Nocke ? Macht das nicht Sinnvollerweise die PLC ?

oder hast du einen BKxxxx und machst dein PLC-Programm in Basic ?

michael
 
Zurück
Oben