2 Bits schreiben mit LibNoDave

Earny

Level-1
Beiträge
422
Reaktionspunkte
38
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
es gelingt mir nicht, zwei Bits gleichzeitig in die CPU mit Hilfe von LibNoDave zu schreiben. Wenn ich die Bits mit zwei einzelnen Anweisungen schreibe, klappts.

Was muss ich hier korrigieren, damit es funktioniert?
Ich will mit einem Aufruf den M30.0 einschalten und den M30.1 ausschalten.

Code:
[COLOR=#0000ff]Private[/COLOR] [COLOR=#0000ff]Sub[/COLOR] btnKugelhahnOeffnen_MouseDown([COLOR=#0000ff]ByVal[/COLOR] sender [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Object[/COLOR], _
[COLOR=#0000ff]ByVal[/COLOR] e [COLOR=#0000ff]As[/COLOR] System.Windows.Forms.MouseEventArgs) _
[COLOR=#0000ff]Handles[/COLOR] btnKugelhahnOeffnen.MouseDown
[COLOR=#0000ff]Dim[/COLOR] bits(1) [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Byte[/COLOR]
bits(0) = 1
bits(1) = 0
[COLOR=#008000]'M30.0 = 30x8 = 240; M30.1 = 30x8+1 = 241[/COLOR]
res = dc.writeBits(libnodave.daveFlags, 0, 240, 1, bits)
[COLOR=#0000ff]End[/COLOR] [COLOR=#0000ff]Sub[/COLOR]


Gruß
Earny
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Rainer,
mein alter OPC-Server kann das. Man kann mit einem einzigen Aufruf der Objekt-Methode S7Data1.ReadMultiVariables(..., ..., ..., ...) die Werte beliebiger Bits in einem Byte lesen.
Ich habe deshalb nochmal bei Hergenhahn nachgelesen. Es git eine FAQ.txt-Datei da steht auch drin, dass der gleichzeitige Zugriff auf mehrere Bits nicht funktioniert. Schade.

Gruß
Earny
 
Wozu denn unbedingt Bits schreiben und lesen, man könnte in diesem Falle ja auch das Byte lesen, Änderungen vornehmen und das dann zurückschreiben. Vorausgesetzt, es passiert inzwischen nichts in der Steuerung. Aber das könnte man ja bei Bedarf auch sicherstellen, indem man die Schnittstelle (Daten) zwischen SPS und libnodave entsprechend gestaltet.
 
@Ralle:
Das halte ich für äußerst gefährlich. Sicherzustellen, dass innerhalb dieser langen Kommunikationszeit (1 x Lesen und danach 1 x Schreiben) keines der anderen Bits von der SPS geändert wird ist in der Regel schwierig (außer es handelt sich um eine reine Schnittstelle PC -> SPS). Dann lieber zwei Schreibaufträge absetzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Ralle:
Das halte ich für äußerst gefährlich. Sicherzustellen, dass innerhalb dieser langen Kommunikationszeit (1 x Lesen und danach 1 x Schreiben) keines der anderen Bits von der SPS geändert wird ist in der Regel schwierig (außer es handelt sich um eine reine Schnittstelle PC -> SPS). Dann lieber zwei Schreibaufträge absetzen.

Da hast du völlig recht, daher auch der Hinweis, die Schnittstelle entsprechend zu gestalten, z.Bsp. einen Schreib- und einen Lesebereich etc.
Andererseits, wenn es nicht tausende Bits sind, geht das schon mit hintereinander schreiben.
 
Hallo Ralle,
hallo Rainer,
das Lesen und Schreiben von 2 oder mehreren Bits eines Bytes mit LibNoDave klappt jetzt. Ich Schreibe für jedes einzelne Bit einen Aufruf. Das kostet möglicherweise etwas Zeit bei der Kommunikation, aber ist doch sicherer, als wenn man ganze Bytes schreibt.

Jetzt habe ich aber noch Probleme mit dem Lesen von Wörtern.

Gruß
Earny
 
Zurück
Oben