Benötige Hilfe bei Bitzugriff auf ein Byte ( Codesys 2.3 )

DeltaMikeAir

User des Jahres 2018; 2023
Beiträge
22.151
Reaktionspunkte
7.353
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wie die Überschrift schon andeutet, habe ich ein Problem bei einem Bitzugriff auf einen Eingangsbereich.
Im Anhang kann man schön sehen, dass %IB2 auf 50 steht, alle %IX2.x sind aber auf 0.

Ich nutze die Eingangssignale, da ich eine Steuerung mit Hilscher Profibus Slave Karte habe, mit der
ich mit einer S7-300 kommuniziere. Die Verbindung steht und alle Werte kommen auch an ( Word oder Byteweise ).
Nur den Zugriff auf Bits bekomme ich nicht hin.

Danke für eure Hilfe.

CoDeSys 2.3, Steuerung steht auf "LÄUFT"
Problem.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Oliver und Danke für deine Bemühungen,

ich habe jetzt einmal zum beobachten den Bereich von %I0.0 bis %I0.31
und siehe da, das %IB2 liegt auf %IX0.16 - %IX0.23

Anscheinend funktioniert der Zugriff D-Wordweise.

Danke noch einmal!
 
Hallo noch einmal,

ich benötige noch einmal Hilfe beim Datenaustausch eines PC´s mit Hilscher Profibuskarte und einer S7-300.

Die Kommunikation läuft, Daten werden übermittelt. Alles gut. Nun möchte ich auf der PC Seite eine DINT Variable
zur S7-300 übertragen.
z.B.
%QD10 := MeineDINTCodesysVariable;

Nun das komische. Es ist ja eine 32 Bit Variable. Auf der S7 Seite ändern sich aber die Werte in 3 Int´s, eigentlich dürften es ja nur 2 sein.
Irgendwie komme ich nicht drauf was da los ist.

So sieht das ganze dann aus:
Codesysseite S7 Seite
DINT wird gesendet ( 2Int ) 3 Int kommen an

Es gibt keine Überlappungen aus anderen Zugriffen. Es stehen gerade nur noch diese paar Zeilen drin. Wenn ich die Adresse von %QD10 auf 20
ändere, werden die 3 INTs bei Adresse 20 beschrieben :-(
Die Hilscher Karte ist in CoDeSys integriert, man kann nicht viel einstellen ( nur PB Adresse, Anzahl der Daten + Startadresse ). Kein Intel/Motorola.....


Vielleicht habt ihr einen Tipp.


Software Seite 1:
CoDeSys 2.3

Software Seite 2:
Step7 V5.5
CPU 315-PN/DP

Verbindung über Profibus und Hilscher PB Karte.
 
Was für eine Kommunikation läuft denn da zwischen PC und S7-300? Profibus-DP Master/Slave? Oder eine S7-Verbindung?
Was ist das für eine Anwendung, die da auf dem PC läuft? (da wird doch sicherlich nicht das Codesys-Programmiersystem mit der S7-300 kommunizieren)
Was für eine Profibus-Schnittstelle ist in der S7-300? Ein CP 342-5?

Ein DINT kann 3 INT überlappen, wenn er (z.B. auf einer ungeraden Adresse) am zweiten Byte des ersten INT beginnt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen Harald,

zu deinen Fragen:
-Es läuft eine Master / Slave Verbindung ( S7 ist Master, Slave als GSD in der HW-Config eingefügt )
-Es ist eine Verpackungsmaschine mit einer alten Elau Max4 Steuerung. Diese wird mit Epas-4 programmiert,
was im Prinzip CoDeSys 2.3 entspricht.
-Die Profibusschnittstelle ist die integrierte ( CPU 315 PN/DP 315-2EH14 )

Danke für deinen Tipp mit der ungeraden Adresse. Ich habe nach deiner Vorgabe einmal skizziert, wie das Problem wohl zustande kommt.
DintByte0 Int0Byte1
DintByte1 Int1Byte0
DintByte2 Int1Byte1
DintByte3 Int2Byte0

Irgendwie komme ich noch nicht mit dem Adressierbereich der ElauSteuerung zurecht.
Wenn ich etwas auf %QW10 schiebe und etwas anderes auf %QW12, so kommt
es an der S7 mit mehreren Worten Lücke an anstatt keiner oder einer.

Ich werde mich noch durch die alten Anleitungen lesen müssen.
Wenn ich weiter komme, schreibe ich.
 
Guten Morgen,

%QD5 := 4294967295 senden, dann kommt auf der S7 Seite bei ED18 65535 und auf dem ED22 -65536 an.
%QD6 := 4294967295 senden, dann kommt auf der S7 Seite bei ED22 65535 und auf dem ED26 -65536 an.


interessant ist dann, wenn ich z.B. 50000 auf das QW5 schreibe, dann kommt es bei der S7 auf EW10 an.

OK. Langsam verstehe ich es. Auf der Codesys Seite scheint die Adresse QD5 nicht die Zieladresse zu sein
sondern 5 * 4 (Bytes pro QD) = EW20 + Bytes tauschen wegen Motorola/Intel = Adresse S7 EW18

Eine weitere Frage noch. Ich möchte von der Elau Seite einen String mit 20 Zeichen an die S7 übergeben.
Gibt es hierfür einen Baustein oder eine Funktion ähnlich wie slicen

Also den String byteweise auf die Ausgänge schreiben.


Vielen Dank für eure Unterstützung
 
Zurück
Oben