TIA Siemens 1214 Siemens PAC 2200 Zähler

Zuviel Werbung?
-> Hier kostenlos registrieren
@revve hab auf den Request mal ein 1 Hz Clock geleget. Das war dann leider das selbe Ergebniss.

Ich werde parallel nochmal das Demoprojekt versuchen, verstehe aber nicht warum man über den Client dann keine Werte bekommt. Scheinbar
haben das ja einige schon so am laufen.

Grüße Andreas
 
Sofern nicht anderweitig belegt ändere die Conn_ID auf 1
Adressen:
40001 = 0
Der PAC2200 beginnt bei 1, nicht 0.

Also versuche einmal 40002 als Adresse anzugeben, die Data_Len bleibt auf 2.

Den Req nicht mit einem Clock verknüpfen sondern mit einem Done AND NOT Busy AND Start, wobei Start ein Merker sein soll den Du beim Beobachten aktivierst und der bei einem Error zurückgesetzt wird (R).

Wenn die Daten geändert wurden dann die CPU bitte auf STOP und wieder RUN bringen. Durch Änderung der Conn-IDs und oder viel Spielerei kann sich da was aufgehangen haben.

Sofern nun "nichts" im RCV steht dann sollte aber der Status verschiedene Werte annehmen. Um das zu filtern im Folgenetzwerk eine positive Flanke durch Error triggern lassen und den Status mittels Move in eine Variable kopieren. Dann wird der letzte Fehler gespeichert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
CPU bitte auf STOP und wieder RUN bringen.
Das habe ich schon mehrfach probiert.

Also versuche einmal 40002 als Adresse anzugeben, die Data_Len bleibt auf 2.
Habe ich auch schon geändert auf 40023 was bei einem Offset +1 bei meinem Datenblatt die Spannung L1-N wäre.

Sofern nun "nichts" im RCV steht dann sollte aber der Status verschiedene Werte annehmen.
Der Status steht aktuell immer auf 0000. Da ändert sich nichts.
Um das zu filtern im Folgenetzwerk eine positive Flanke durch Error triggern lassen und den Status mittels Move in eine Variable kopieren. Dann wird der letzte Fehler gespeichert.
Das würde aber nur funktionieren wenn ich am Error Ausgang mal eine 1 bekommen würde, was ja aktuell nicht der Fall ist?

Grüße Andreas
 
Ich denke das sollte über den Req Eingang passieren den ich jetzt Testweise mit dem Clock 1Hz belegt habe passieren.
Enable ist dauerhaft 1.

Den MB_Client habe ich aktuell im OB1.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das habe ich schon mehrfach probiert.
Sollst Du nur nach dem Ändern der Einstellungen der Verbindungssteuerung machen und auf jeden Fall wenn es nicht funktioniert um einen "frischen" Start zu gewährleisten.

Habe ich auch schon geändert auf 40023 was bei einem Offset +1 bei meinem Datenblatt die Spannung L1-N wäre.
Was für ein Datenblatt hast Du da?
Meines: https://cache.industry.siemens.com/...tt_917541/v1/MAN_L1V30415167A-04_de_de-DE.pdf
1659243286318.png
23 ist hier die Scheinleistung L3, aber die rufst Du nicht ab. Anleitung MB_Client und dort MB_Mode nochmal durchlesen in der TIA-Hilfe.

Der Status steht aktuell immer auf 0000. Da ändert sich nichts.
Das würde aber nur funktionieren wenn ich am Error Ausgang mal eine 1 bekommen würde, was ja aktuell nicht der Fall ist?
Der ändert sich in jedem Fall wenn Du REQ triggerst. So schnell kannst Du nur einfach nicht gucken und der PC nicht abrufen.
Änder es ab wie ich schrieb.

Was ich mich frage: Hast Du meinen Beitrag einfach nur auseinandergenommen oder hast Du es mal getestet? Ich mein, mir kann es egal sein, alle PAC-Geräte lese ich mit einem eigenen FB aus den ich geschrieben habe und der funktioniert, da können auch gerne 100 in einer Anlage sein. Also bei mir gehts.
 
@escride1
scheinbar war es tatsächlich die Conn-ID.
Jetzt bekomme ich zumindest im Monitor mal Daten gelesen.
sondern mit einem Done AND NOT Busy AND Start, wobei Start ein Merker sein soll den Du beim Beobachten aktivierst und der bei einem Error zurückgesetzt wird (R).
Das verstehe ich nicht so recht.
Am Request Eingang einen Und Baustein mit 3 Eingängen? Busy Negieren? Done nicht Negieren? Und einen Merker der als Startimpuls (Steuern auf 0 oder 1) dient?

Die Werte werden mir ja jetzt als Beobachtungswert in Hex angezeigt.
Ich bräuchte jetzt noch einen Baustein um aus dem DB die Daten als Ganzzahl anzeigen zu lassen oder?

Grüße Andreas

DB.png
 
Das verstehe ich nicht so recht.
Am Request Eingang einen Und Baustein mit 3 Eingängen? Busy Negieren? Done nicht Negieren? Und einen Merker der als Startimpuls (Steuern auf 0 oder 1) dient?
Da es läuft die Bedingungen etwas ändern:
entweder)
NOT Busy damit der REQ wenn Busy kommt neu getriggert wird. Dadurch wird ein Mehrfachaufruf vermieden.
Der Startimpuls und das Done werden am 2. &-Eingang verodert. Dadurch kann entweder der Startimpuls oder aber das Done den Baustein neu triggern wenn er einmal gestartet wurde.
oder)
Wenn Du unbedingt willst geht es natürlich auch mit einem Clock, dann aber nur die Flanke auswerten, das Busy auf jeden Fall einbinden.

in beiden Fällen sollte ein wiederholt auftretender Fehler angezeigt werden und die Kommunikation ausgesetzt, das erspart weitere Folgeprobleme durch überfüllte Verbindungen.

Die Werte werden mir ja jetzt als Beobachtungswert in Hex angezeigt.
Ich bräuchte jetzt noch einen Baustein um aus dem DB die Daten als Ganzzahl anzeigen zu lassen oder?
Theoretisch ja. Aber Du könntest genauso gut eine UDT-Tabelle erstellen mit dem richtigen Format und den richtigen Bezeichnern. Dann wird eben RcvData kein Array of Byte sondern nur das UDT.
Die einzelnen Deklarationen im UDT sind recht schnell abgetippt, eine Vorlage gibt es so nicht die ich kenne.
In 99% aller Fälle werden die Register richtig konvertiert.

Du hast ein Array of Byte. Das ist nicht richtig. Ein Register ist ein Word, also 2 Byte. Wenn ein Float dargestellt werden soll dann werden 4 Byte in 2 Registern gesendet, also 2 Word. Der MB_Client kann diese 2 Register in ein REAL schreiben, da er indirekt adressiert arbeitet.
Versuch es einfach mal: Anstelle des Arrays schreibst Du dort einen Merker als REAL deklariert hinein. Aber nur die eine Adresse lesen. Dann sollte bereits der richtig formatierte Wert dargestellt werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Cool, das funktioniert.

Habe jetzt im DB eine Variable als Merker bezeichnet und Datentyp REAL bezeichnet, das war das was du meintest?

Wenn ich jetzt meherer Werte aus dem PAC 2200 abrufen will muss ich den Baustein kopieren und die MB_DATA_ADDR und MB_DATA_PTR ändern oder?

Ich brauche also für jeden Wert einen eigenen Baustein oder gibts es da noch einen andere Lösung dafür?

Grüße Andreas
 
Du kannst einfach vom ersten bis zum letzten Wert den Du haben willst die Anzahl an Registern zählen und dann an LEN übergeben, also auch die Zwischenwerte lesen. Natürlich den Offset richtig ausrechnen.

Dann erstellst Du einen PLC-Datentyp. Dort kommen dann die Namen der Register rein mit dem Datentyp in der richtigen Reihenfolge, so in etwa:
1659273684555.png

Im DB schreibst Du nun nicht "array [0..255] of byte" sondern die UDT, meine heißt oben "Anwenderdatentyp_1"
Dann wird automatisch eine Struktur daraus und die Werte sind einzeln ablesbar:
1659273900468.png
Diese Variable, hier "Datenbaustein.sd" noch an RCV schreiben.

Der PLC-Datentyp muss mindestens so lang sein wie Du Register lesen willst, länger geht, kürzer nicht.


Wenn Du Werte weit auseinander lesen willst ist es vielleicht besser mehrere Aufrufe zu machen, aber das hängt am Ende davon ab, ob genug Zeit vorhanden ist um alles zu lesen und die Spanne mit dem Mode ausgelesen werden kann.
 
Zurück
Oben