-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Beiträge - knuetterich

#1
Hallo Leute,

hat sich hier was getan?
Ich komme einfach nicht weiter.
Gibt es mittlerweile einen Baustein für eine Wago 750-841, um einen EHZ mittels optischer Schnittstelle (Lesekopf von Volkszähler)
über RS232 auszulesen?
#2
Hallo Leute,

ich möchte das Thema noch einmal aufgreifen.
Gibt es mittlerweile einen Baustein für eine Wago 750-841, um einen EHZ mittels optischer Schnittstelle (Lesekopf von Volkszähler)
über RS232 auszulesen?


Gruß
#3
Zitat von: mattsches in 14. Januar 2015, 22:36:11
Hallo Ralf,

ich mache das mit meinem EMH (EnBW) und meiner Beckhoff mit einem Schmalspur-(nur die beiden Zähler 1.8.0 und 2.8.0 sowie die aktuelle Leistung werden ausgelesen) Baustein so:

FUNCTION_BLOCK EMH_Meter
VAR_INPUT
bTrigger : BOOL; (* externer Trigger für Ausgabe der aktuellen Zählerdaten *)
END_VAR
VAR_OUTPUT
rIncomingEnergy : REAL; (* Bezugszähler in kWh *)
rOutgoingEnergy : REAL; (* Einspeisezähler in MWh *)
rAvailablePower : REAL; (* aktuell verfügbare Leistung in W; positiv: Einspeisung, negativ: Bezug *)
bNewDataReceived : BOOL; (* new data received from meter *)
END_VAR
VAR
KL6Control_COM2 : SerialLineControl;
bError_COM2 : BOOL;
udErrorId_COM2 : UDINT;

fbReceiveData : ReceiveData;

aPrefix : ARRAY[0..7] OF BYTE := 16#1B, 16#1B, 16#1B, 16#1B, 16#01, 16#01, 16#01, 16#01;
aSuffix : ARRAY[0..5] OF BYTE := 16#1B, 16#1B, 16#1B, 16#1B, 16#1A, 16#01;
aReceiveData : ARRAY[0..511] OF BYTE := 256(0);

pValueFromMeter : POINTER TO DINT;
aValueFromMeter : ARRAY[0..3] OF BYTE;

rBufIncomingEnergy : REAL; (* Puffer für Bezugszähler in kWh *)
rBufOutgoingEnergy : REAL; (* Puffer für Einspeisezähler in MWh *)
rBufAvailablePower : REAL; (* Puffer für aktuell verfügbare Leistung in W; positiv: Einspeisung, negativ: Bezug *)

END_VAR

(* COM2-Schnittstelle ansteuern *)
KL6Control_COM2(
Mode := SERIALLINEMODE_PC_COM_PORT,
pComIn := ADR(Com2InData),
pComOut := ADR(Com2OutData),
SizeComIn := SIZEOF(Com2InData),
TxBuffer := TxBuffer_COM2,
RxBuffer := RxBuffer_COM2,
Error => bError_COM2,
ErrorID => udErrorId_COM2);

(* Telegramm aus Empfangspuffer holen, Erkennung mittels Präfix und Suffix *)
fbReceiveData(
pPrefix:= ADR(aPrefix),
LenPrefix:= 8,
pSuffix:= ADR(aSuffix),
LenSuffix:= 6,
pReceiveData:= ADR(aReceiveData),
SizeReceiveData:= SIZEOF(aReceiveData),
Timeout:= t#700ms,
Reset:= ,
RXbuffer:= RxBuffer_COM2,
DataReceived=> ,
busy=> ,
Error=> ,
RxTimeout=> ,
LenReceiveData=> );

bNewDataReceived := FALSE;

(* Daten aufbereiten, wenn empfangen *)
IF fbReceiveData.DataReceived THEN
bNewDataReceived := TRUE;

(* aktuelle Werte aus empfangenem Byte-String auslesen *)
(* Byte-Reihenfolge ist gegenüber Codesys gedreht! *)
pValueFromMeter := ADR(aValueFromMeter); (* Zeiger auf Zwischenspeicher vorbereiten *)

(* Bezugszähler: Bytes 156-159 *)
aValueFromMeter[0] := aReceiveData[159]; (* Bezugszähler in 0,1 Wh *)
aValueFromMeter[1] := aReceiveData[158];
aValueFromMeter[2] := aReceiveData[157];
aValueFromMeter[3] := aReceiveData[156];
rBufIncomingEnergy := DINT_TO_REAL(pValueFromMeter^)/10000; (* skaliert auf kWh *)

(* Einspeisezähler: Bytes 180-183 *)
aValueFromMeter[0] := aReceiveData[183]; (* Bezugszähler in 0,1 Wh *)
aValueFromMeter[1] := aReceiveData[182];
aValueFromMeter[2] := aReceiveData[181];
aValueFromMeter[3] := aReceiveData[180];
rBufOutgoingEnergy := DINT_TO_REAL(pValueFromMeter^)/10000000; (* skaliert auf MWh *)

(* aktuelle Leistung: Bytes 284-287 *)
(* positiver Wert=Bezug, negativer Wert=Einspeisung *)
aValueFromMeter[0] := aReceiveData[287]; (* aktuelle Leistung in 0,1 W *)
aValueFromMeter[1] := aReceiveData[286];
aValueFromMeter[2] := aReceiveData[285];
aValueFromMeter[3] := aReceiveData[284];
rBufAvailablePower := DINT_TO_REAL(pValueFromMeter^)/10*-1;
END_IF

(* Daten ausgeben, wenn angefordert *)
IF bTrigger THEN
rIncomingEnergy := rBufIncomingEnergy;
rOutgoingEnergy := rBufOutgoingEnergy;
rAvailablePower := rBufAvailablePower;
END_IF



Hallo mattsches,

ich habe mal versucht deinen Code auf einer Beckhoff umzusetzen.
Dabei bekomme ich eine Fehlermeldung, dass die Variablen "Com2InData", "Com2OutData", "TxBuffer_Com2" und "RxBuffer_Com2" nicht existieren.
Kannst du hier weiterhelfen?

Gruß
Ralf
#4
Hallo mattsches,

erstmal vielen Dank für Antwort.  :)
Ich habe mir mittlerweile den Lesekopf (RS232) von Volkszähler bestellt.
Die RS232-Karte 750-650 habe ich leider noch nicht.
Wenn die Komponenten an Bord sind, werde ich mal tüfteln.

Der FB könnte bei mir so ähnlich aussehen, jedoch ist natürlich die Bibliothek zwischen Beckhoff und Wago unterschiedlich.
Ich benötige wohl die Bibliothek Serial_Interface_01.lib.

Ich suche noch nach Beispielen die auf meine Anwendung passen.

Gruß
Ralf
#5
Hallo Leute,

ich möchte das Thema noch einmal aufgreifen.
Gibt es mittlerweile einen Baustein, um einen EHZ mittels optischer Schnittstelle (Lesekopf von Volkszähler)
über RS232 auszulesen?


Gruß
Ralf
#6
Hallo Gregor,

ich benutze sowohl Step7 V5.5 Classic als auch TIA-Portal V12 Professional (seit Montag).
Nachdem ich die Bibliothek in V12 Professional geöffnet hatte, funzte alles sofort.
Kompliment!!

Ich verwende die Bibliothek momentan für ein S7-1200 Projekt.
Dabei musste ich feststellen, dass einige Bausteine aus der Bibliothek Fehler hervorrufen.
Das liegt daran, dass einige dieser Bausteine (Datums- u. Zeitfunktionen) den S7-300/400-Datentyp DATE_AND_TIME verwenden.
Die S7-1200 kennt diesen Datentyp aber nicht. Statt des DATE_AND_TIME Datentyp wird hier der Datentyp DTL verwendet (das versteh wer will...Siemens eben  :-[).
Der Datentyp DTL hat 12 Byte anstatt 8 Byte beim DATE_AND_TIME Typ.

Der Datentyp DTL ist folgendermaßen aufgebaut:

Wort 0:   Year (UINT)
Byte 2:   Month (USINT)
Byte 3:   Day (USINT)
Byte 4:   Weekday (USINT)
Byte 5:   Hour (USINT)
Byte 6:   Minute (USINT)
Byte 7:   Second (USINT)
Dwort 8: Nanosecond (UDINT)

Gibt es hierzu schon eine Bibliothek speziell für die S7-1200 die in den Datums- u. Zeitfunktionen den Datentyp DTL verwenden?

Wäre über Hilfe echt dankbar!!

Gruß
Ralf
#7
Hallo Stefan,

vielen Dank für die schnelle und konstruktive Hilfe!!  :)

Hatte jetzt endlich mal Zeit deinen FB500 zu testen.

Nach dem Test, musste ich allerdings feststellen, dass das Problem immer noch besteht.
Daraufhin habe ich die Bausteinkonsistenz geprüft und siehe da...es fehlten noch einige Bausteine aus der OSCAT-Bibliothek.
Die SPS zeigte mir vorher aber keine Fehler an.
Nachdem ich diese eingefügt hatte, funktionierte alles einwandfrei (na also..geht doch  ;D).

Nochmals DANKE!!

Gruß
Ralf
#8
Hallo Gregor,

ich muss zu diesem Thema nochmal nachfragen...
Wenn ich dich richtig verstehe, muss ich bei diesem Baustein (T_PLC_MS) nichts mehr hinzufügen, oder?

Gruß
Ralf
#9
Zitat von: samus in 13. September 2012, 10:51:29
Hallo!

ich habe leider ein Problem die Bibliothek in Step 7 Basic v11 einzufügen um den Baustein sun_time bei einem Projekt mit einer S7 1200 SCPU zu nutzen. Immer  wenn ich die Bibliothek einfüge und einen  Baustein öffnen will bekomme ich die Fehlermeldung das Step 7 Professional nicht installiert ist und kein Baustein kann geöffnet werden.
Könnte mir da vielleicht jemand  behilflich sein?

Hallo Gregor,

ich habe dasselbe Problem wie Samus. Bei mir kommt auch diese Fehlermeldung.
Das V11 Basic kein SCL kann, kann ich nicht bestätigen. Habe selbst schon Bausteine in SCL geschrieben.
Aktuell habe ich die Version V11 SP2 Upd5.

Gibt es hierzu vielleicht neue Erkenntnisse?

Gruß
Ralf

#10
Hallo zusammen,

ich beschäftige mich seit kurzem mit der OSCAT-Bibliothek für S7.
Dabei ist mir ein Problem mit dem FC402 aufgefallen.
Ich lese die Systemzeit der SPS mit dem SFC1 (Read_CLK) aus und lege den Ausgabewert an den FC402 (UTC_TO_LTIME) an.
Den Ausgabewert des SFC1 und des FC402 schreibe ich in einen Datenbaustein (DB1). Ab Byte 0 steht die Systemzeit (Weltzeit) und ab Byte 8 steht die Lokalzeit im Format DATE_TIME.
Aus der Lokalzeit lese ich das akt. Datum mit den FC6 (DT_TO_DATE) aus.
Der Rückgabewert des FC402 ist allerdings um 2 Byte nach hinten verschoben (siehe Anhang --> DB1.DBB0 und folgende). Dadurch wird natürlich auch nicht das richtige Datum ausgegeben.

Kann mir hier jemand weiterhelfen?

Ich benutze Step7 V5.5 SP2 und eine CPU317F-2 PN/DP.
Danke schon mal.

Gruß
knuetterich

[gelöscht durch Administrator]