PROBLEM: KOMMUNIKATION CP341 <----> FREMDSTEUERUNG (AB

churchill

Well-known member
Beiträge
193
Punkte Reaktionen
4
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo zusammen

Ich muss mit meiner CP341 Daten (INT und DINT) aus der Fremdsteuerung (ABB-Master Piece 200) holen (FETCH).
Die Schnittstellen funktionieren einwandfrei.

Problemstellung:
Daten im INT-Format die von der Fremdsteuerung bereitgestellt werden kann ich einwandfrei holen und 1 zu 1 in die S7 verwenden. Soweit alles o.K.

Bereitgestellte Daten im DINT-Format kann ich verrückterweise nicht 1 zu 1 übernehmen, d.h. Solange die Fremdsteuerung einen Wert von bis zu 65534 bereitstellt, holt die S7 den Wert 0 ein???? Ab einem Wert von 65535 holt die S7 eigenartige sonstige Werte, die aber nicht weit vom tatsächlichem liegen.
Es scheint ob die S7 (CP341) eingelesenen DINT-Werte nicht richtig interpretieren kann.

Hat irgend jemand von euch solche oder ähnliche Erfahrungen gemacht???
Dann bitte meldet euch, ich kann jegliche Hilfe gebrauchen.

Mit freundliche Grüssen
Churchill
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Erfahrungen habe ich danit keine, nur scheint aus Deiner Beschreibung hervorzugehen, daß die untere Hälfte Wort des 32 Wortes nicht richtig gelesen wird (immer 0 bis 65534 (sollte es vielleicht bis 65535 (0xFFFF) so sein?))
Mögliche Ursachen:
1. ABB verwendet eine andere numerische Anfangsadresse für DINT (unwahrscheinlich)- Abhilfe: von der zu lesenden Adresse 2 (byte) abziehen oder addieren.
2. ABB verwendet eine andere Anordnung des oberen/unteren 16-bit-Wortes (wahrscheinlicher) - Abhilfe:
Du bekommst den Wert z.B. in DB10:DBD12

Code:
	L DB10:DBW12	// eine Hälfte der 32-bit
	T LW 0		//  zum tauschen
	LDB10:DBW14 	//2.Hälfte
	T DB10:DBW12	// in die 1. Hälfte der 32-bit	
	L LW 0		
	T DB10:DBW14	// in die 2. Hälfte der 32-bit
3. Du müstest beides kombinieren.
4. Du liest die 16-bit Hälften (16-bit Übertragung klappt ja!) Deines DINT einzeln in die vertauschten Hälften deines Ziel-DBD ein.
 
OP
C

churchill

Well-known member
Beiträge
193
Punkte Reaktionen
4
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Zottel

zuerst einmal Danke für deine Hilfestellung.

Es ist so, ich hole/empfange diesen DINT-Wert im DB43.DBD24. Zur Beobachtung hatte ich in einem VAT einen Datenblock ab DB43.DBB20 bis DB43.DBB40 eingerichtet. Momentan wird testweise von ABB einen Wert von ungefähr 1000000 bereitgestellt.

Wenn ich diesen Bereich im VAT betrachte, kann ich folgendes beobachten:
DB43.DBB20 bis DBB26 ---> B#16#00
DB43.DBB27 ---> B#16#45
DB43.DBB28 bis DBB40 ---> B#16#00

Ich vermute immer mehr das dieses Problem auf der S7-Seite entsteht.

Anscheinend sind solche Fälle den SIEMENS-Leuten bekannt, aber eine konkrete Antwort auf dieses Problem bekomme ich von SIEMENS leider nicht!

Wäre natürlich für weitere Vorschläge sehr dankbar.

Mit freundlichen Grüssen
Churchill
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Das ist sehr seltsam. Bei einer Million sagt mein Taschenrechner
0xF4240. Bei einer Million und fünf könnte dann das letzte Byte 0x45 sein.
An welcher Stelle sagst Du der Simatic, das sie DINTs lesen soll? Einer meiner vorigen Vorschläge ging ja dahin, anstelle des DINTs 2 aufeinaderfolgende INTs zu lesen, z.B.
INT von Adresse des DINT nach DBW24 und dann noch ein
INT von Adresse des DINT+2 nach DBW26.
Mit etws Glück steht nun das DINT in DBD 24. Wenn nicht, müsste man die Halbworte tauschen (oder die Reihenfolge der Ouell- oder Zieladressen).
Um der Sache auf den Grund zu gehen, würde ich auf der ABB-Seite gezielt Datenwerte vorgeben oder einen Zähler einrichten und das Ergebnis in der Simatic beobachten.
Welcher Art ist die Kommunikation? Profibus? Modbus?
 
A

Anonymous

Guest
churchill schrieb:
von ungefähr 1000000 bereitgestellt.

Wenn ich diesen Bereich im VAT betrachte, kann ich folgendes beobachten:
DB43.DBB20 bis DBB26 ---> B#16#00
DB43.DBB27 ---> B#16#45
DB43.DBB28 bis DBB40 ---> B#16#00

DB80.DBB 9 DEZ 69
DB80.DBB 9 BIN 2#0100_0101
DB80.DBD 10 DEZ L#1000000
DB80.DBD 10 BIN 2#0000_0000_0000_1111_0100_0010_0100_0000

also der wert den du erhälst ist schon schwer komisch.
wenn man sich mal das bitmuster ansieht, so kann man deinen erhaltenen wert schieben wie man will und er taucht auf keinen fall im bitmuster von der millionen auf.

ach so: was heisst ungefähr 1000000 ???
kannst du nicht zum testen einen festen wert übergeben?
denn nur so kann man überhaupt was ermitteln.


mfg
 

volker

Supermoderator
Teammitglied
Beiträge
5.469
Punkte Reaktionen
935
Zuviel Werbung?
->Hier kostenlos registrieren
nachtrag zu meiner mail als gast

wenn man dein byte 27 mal in das bitmuster der millionen einfügt (ich denke das kann eigentlich nur das 3.byte sein) und das letzte byte auf null setzt, so erhält man folgendes.

DB80.DBD 10 DEZ L#1000704
DB80.DBD 10 BIN 2#0000_0000_0000_1111_0100_0101_0000_0000

da du von ungefähr gesprochen hast, könnte das noch passen. aber das 2.byte (welches ja erst den "hohen" wert ergibt) scheint bei dir zu fehlen.


setzt man nun den von dir erhaltenen wert in das 2.byte ein ergibt sich folgendes.
DB80.DBD 10 DEZ L#4521984
DB80.DBD 10 BIN 2#0000_0000_0100_0101_0000_0000_0000_0000

das passt ja nun ganz und gar nicht.

wie sieht denn dein vat aus, wenn du mal z.b. 2 int-werte übergibst.

mfg volker
 
OP
C

churchill

Well-known member
Beiträge
193
Punkte Reaktionen
4
Hallo zusammen

wie ich im 1. Beitrag geschrieben habe, brauch ich gar nicht mehr die Bytes od. Worte zu tauschen od. ähnliches, da ich im VAT mehrere Blöcke vor und nach meinem Ziel DBD (DB43.DBD24) eingerichtet und beobachtet habe.

Siehe mein letzter Beitrag.

Also, im Prinzip wenn ich INT-Werte makellos holen und 1 zu 1 in der S7 darstellen kann, dann sollte es auch mit einem DINT-Wert klappen.

(Kommunikationsprotokoll ist RK512)

Danke für eure Hilfestellung, wäre aber immer noch für weitere Hilfe froh!

mfG
Churchill
 
A

Anonymous

Guest
Hallo Churchill,

erstmal solltest Du nach einem Reset im Kopf ganz neutral nocheinmal Deine Adressierung anschauen. Wenn die ersten 2 Bytes 0 anzeigen, klingt das danach, dass der Bus Deinen gewünschten Wert nicht in den Adressbereich schreibt, den Du Dir vorstellst.
Kannst Du nicht nen Busmonitor anschalten und Dir das Busprotokoll anschauen??? Das hatte mir letztens bei meinem Problem geholfen.

Ein guter Testwert ist die Zahl 312718533
Im Hexformat ergibt das 12A3B4C5. Dann kannst Du wirklich alle Bytes beim Testen identifizieren.

Sandrotchka
 

sps-concept

Well-known member
Beiträge
2.235
Punkte Reaktionen
251
Zuviel Werbung?
->Hier kostenlos registrieren
Kommunikation

Hallo Churchill,

hol doch einfach mal paar Bytes mehr aus der ABB ab. 4 Bytes über und 4 Bytes unter der erwarteten Stelle. Vielleicht haste auch nen denkfehler mit der Anfangsadresse bei ABB. Dann stell mal deine neuesten Erkenntnisse hier rein

MfG
André Räppel
 
OP
C

churchill

Well-known member
Beiträge
193
Punkte Reaktionen
4
Hallo Andrè

zuerst einmal danke für deine dargebotene Hand.

Betreffend deiner Antwort: Siehe mein 2. Beitrag vom 05.09.03.
Sobald ich näheres weiss, werde ich die Lösung oder (noch besser) die entsprechende Erklärung hier in diesem Forum schreiben.

Ich bedanke mich recht herzlich für eure Tips/Hilfen. Natürlich würden mich mehrere Hilfestellungen noch mehr erfreuen.

mfG
churchill
 
Oben