Step 7 Adressierungsarten Hexadezimal

breiti

Level-1
Beiträge
21
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi
Entschuldigt bitte, habe aber eine wahrscheinlich ganz einfache Frage, stolpere aber immer wieder über dieses Thema.

Ich möchte eine Uhrzeit aus der Echtzeituhr mit einer bestimmten Uhrzeit (Sonnenaufgang/Untergang) vergleichen, sodass ich erkennen kann ob jetzt Tag oder Nacht ist.

Da aber die dzt. Uhrzeit in Hex ist und der Sonnenaufgang in Word ist geht sich das nie aus.
Ich mache es dzt so:

LDB>= #SonnenaufgangBYTE:LB2, Stunde:SMB103
UB<= #SonnenuntergangBYTE:LB5, Stunde:SMB103
= Tageslicht:V1747.0

In der SMB103 ist die aktuelle Stunde, In der LB2 - LB5 ist der Sonnenaufgang/Sonnenuntergang in diesem Monat.
Hier kommt wenn aktuell 12:00 ist eine 18
 
Hi,

wie es aussieht benutzt Du eine S7-200 - richtig?

Um das Format der Uhrzeiten zu kennen und dann zu sehen, was man besser machen kann, bräuchte man mehr Informationen:
Woher bekommst Du die aktuelle Uhrzeit? Wie kommt die in den SMB103???
Woher bekommst Du die Sonnenaufgang/Sonnenuntergangszeiten? Wie ist das Format im Speicher?
Benutzt Du eine spezielle Bibliothek?
Kannst Du uns vielleicht am Besten das Format Deiner Uhrzeitpuffer zitieren? In der normalen S7-200-Dokumentation finde ich nichts, was zu Deinen Angaben passt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

Die aktuelle Uhrzeit bekomme ich mittels

Ja es ist eine S7 226 Rel 2.01
LD Immer_ein:SM0.0
TODR Jahr:SMB100

Die Uhrzeit (vergangene Minuten) wird mittels Datenbaustein in Variablen VW1700 (und folgend) geschrieben.
Dann ermittle ich aufgrund des Monats den ca. Sonnenaufgang/Untergang des Monats. Dann DIV ich die Minuten durch 60, sodass ich die Stunde bekomme. Diese Stunde ist dann INT

LD Immer_ein:SM0.0
MOVW #SonnenaufgangMINUTEN:LW6, #SonnenaufgangSTUNDE:LW0
UENO
/I +60, #SonnenaufgangSTUNDE:LW0
UENO
MOVW #SonnenuntergangMINUTEN:LW8, #SonnenuntergangSTUNDE:LW3
/I +60, #SonnenuntergangSTUNDE:LW3

Ich habe keine Bibiliothek

Das Format in der SMB103 ist Byte (kommt aus der Uhr) im Hex Format. Wenn ich einen Vergleich mache funktioniert es:
LDB= Stunde:SMB103, 16#07 - da ich dezitiert auf den Hex verweise. Dies funktioniert aber oben nicht.

LG Robert
 
Hi,
wenn ich eine Umwandlung von Hex in Int (oder Umgekehrt) hätte wäre das Thema sicherlich erledigt.

Die Umwandlung
LD Immer_ein:SM0.0
BTI Stunde:SMB103, AC1

bringt jetzt 14:00 nicht 14 sondern 20. Dies stimmt ja, aber hier kann ich es nicht brauchen.

LG Robert
 
Aha, was nicht alles geht... ich habe noch nie in SMB geschrieben. Würde ich auch nur im äußersten Notfall tun.

Wenn ich Dich richtig verstehe, dann hast Du
- in LW6 die Sonnenaufgangszeit in 0..1439 Minuten seit 0:00 Uhr
- in LW8 die Sonnenuntergangszeit in 0..1439 Minuten seit 0:00 Uhr
- in SMB103 die Uhrzeit_Stunde in BCD 0..23
- in SMB104 die Uhrzeit_Minute in BCD 0..59

Dann wandele einfach die aktuelle Uhrzeit ebenfalls in 0..1439 Minuten seit 0:00 Uhr um und vergleiche dann.
Probiere mal dieses:
Code:
//Network: Uhrzeit lesen und in 0..1439 Minuten seit 0:00 Uhr wandeln
LD     Immer_ein:SM0.0
TODR   VB100
MOVW   VW103, VW110       // Stunde(BCD) und Minute(BCD) z.B. 2359 hex
BCDI   VW110              // --> 100*Stunde + Minute DEZ z.B. 2359 dez
DIV    100, VD108         // VW110/100-->VW110(Stunde) + Div.Rest-->VW108(Minute)
*I     +60, VW110         // Stunde * 60
+I     VW110, VW108       // --> VW108: 0..1439 Minuten seit 0:00 Uhr

//Network: liegt die aktuelle Uhrzeit zwischen Sonnenaufgang und Sonnenuntergang?
LDW>=  VW108, #Sonnenaufgang:LW6
UW<=   VW108, #Sonnenuntergang:LW8
=      Tageslicht:V1747.0

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
echt a Wahnsinn!

Mit BCDI hatte ich es auch probiert, jedoch als IN hatte ich das Byte genommen
Der Kernpunkt war nun diese Zeile
BCDI VW110

DANKE DANKE

:D
 
Hi hucki,
warum ich die Bibliothek nicht verwendete? Weil ich noch keine Erfahrung damit habe ;-(
Da ich jetzt mehr Zeit habe und damit verbringen möchte, werde ich mich da reinsaugen. Hast du bezüglich Bücher usw. Vorschläge welche ich mir zulegen sollte?
Dzt. mache ich alles laut den Handbüchern von Siemens und der online Hilfe. Stehe da natürlich schnell an.
Dzt. läuft schon einiges bei meiner Haustechnik.
Heizungsregelung (ohne PID), Lichtsteuerung, Alarmanlage, Bewässerungsanlage, TD200er Tableau
Jetzt kommt noch eine Zusammenschaltung von 2Stück 226er, da ich mit den Ein-und Ausgängen nicht mehr auskomme und die Anzahl der Verbindungskabel zu Ende geht. Weiters werde ich demnächst einen LOG einsetzen um Auswertungen in Excel zu machen.
Was ich dzt. "verbrochen" habe kann ich dir gerne schicken - aber lache nicht zuviel darüber. Wie soll ich es senden?
LG Robert
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ich dzt. "verbrochen" habe kann ich dir gerne schicken - aber lache nicht zuviel darüber.
Ich hab' nicht nach Deiner Lösung gefragt, um darüber zu lachen, sondern um mir andere Wege anzusehen und zu schauen, in wie weit es meine Art zu programmieren vlt. verbessern kann.


Ich hab' in meinem "Programmiererleben" erst ein reales Projekt (für meinen Arbeitgeber) vorliegen gehabt. Alles andere, was von mir z.B. hier im Forum so rumschwirrt, ist für mich nur virtuell und diente eben dem Nichtvergessen und Weiterentwickeln. Das ist auch das Einzige, was ich Dir empfehlen kann - immer wieder an irgendwelchen Beispielen mal eigene Programme zu schreiben, auch wenn Du's real nicht unbedingt benötigst.

Irgendwelche Bücher hatte ich nicht. Meine größte Hilfe nach der Einführung durch einen dreimonatigen S7-Kurs war und ist dieses Forum. Ich möchte da neben vielen, vielen anderen vor allem mal PN/DP hervorheben, der einen oft mit viel Geduld an seinem Wissen teilhaben läßt. Ist nicht umsonst (und m.W.n. auch nicht das erste Mal) "User des Jahres".


In diesem Thread hatte ich mich so dann auch an 'ner Rollladensteuerung mit 'ner S7-200 versucht und wie man weiter unten dann sieht, mit mehr gesammeltem Wissen auch noch mal mit anderer Herangehensweise neu gestaltet. Meine eigenen Rollläden werden aber noch konventionell und in Zukunft über EIB/KNX gesteuert.


Hab' vor ca 11 Jahren einen AutoCAD-Kurs gemacht und seitdem fast nichts mehr gezeichnet. Ich denke, ich hatte das in dem halben Jahr wirklich gut drauf und jetzt steh ich im Prinzip wieder da, wo ich vor dem Kurs war, nur weil ich nicht dran geblieben bin. Das soll mir mit dem SPS-Programmieren nicht passieren. Deshalb bin ich hier im Forum oft mit dabei.
 
Zuletzt bearbeitet:
Hi,
war auch mit einem Zwinkern gemeint - wie soll ich dir mein Projekt senden?

Sitze eben über der Rolladensteuerung und versuche mich reinzudenken.
LG Robert
 
Wenn es Dir nichts ausmacht, häng' es hier einfach als Anhang an einen Post.
In der erweiterten Ansicht der Antwort ist unter dem Eingabefeld ein Button für "Anhänge verwalten". Dort kannst Du das Projekt z.B. als gepacktes zip-Archiv hochladen.

So kann jeder mit Interesse darauf zugreifen, ohne Dich jedes Mal belästigen zu müssen.
 
Hab' gerade mal reingesehen.
Da hast Du Dich ja schon ordenlich reingekniet.
Da werd' ich wohl noch etwas brauchen, vor allem bei den vielen Berechnungen.


Was mich jetzt schon mal interessieren würde, ist die von Dir als "normalen" Speicherbereich benutzen Sondermerker SM.... Das ist Harald ja auch schon aufgefallen:
Aha, was nicht alles geht... ich habe noch nie in SMB geschrieben. Würde ich auch nur im äußersten Notfall tun.
Wie bist Du auf diese Verwendung gekommen? Hast ja da auch anscheinend mit Überschneidungen weitestgehend Glück gehabt (wenn man mal von SMW136 absieht). Sonst verwendest Du doch auch den eigentlich dafür angedachten Variablenbereich V....



Ein paar Sachen sind mir schon aufgefallen, die sicher Deinem Beginn mit der Programmierei geschuldet sind:

SBR9, ab NW3 - "Immer Ein" ODER "Immer Ein" ergibt?
Da kann überall ein wenig weg. ;)

SBR51, NW1
Code:
[FONT=Courier New]...
O      Z2
R      M1.2, 1
R      M1.3, 1[/FONT]
kann man einkürzen durch
Code:
[FONT=Courier New]...
O      Z2
R      M1.2, [COLOR="#FF0000"]2[/COLOR][/FONT]
Die Zahl gibt an, wieviel Bits in direkter Folge gesetzt/rückgesetzt werden sollen.
Das ist 'ne bequeme Sache, die ich mir manchmal bei der "großen" S7-300/400 wünsche.

Gleiches Netzwerk - man kann in einem Netzwerk mehrere Setzen und Rücksetzenbefehle ausführen. Ich würde Dir aber im Interesse späterer Lesbarkeit dazu raten, die Netzwerke möglichst einfach zu halten und immer nur eine Zuweisung bzw. Setzen/Rücksetzen zu machen, auch die Merker mit Symbolik zu versehen und insgesamt mehr zu kommentieren, damit Du auch in einem Jahr noch weißt, was Du Dir da gedacht hast.
Was Du jetzt in den Kommentarzeilen stehen hast, wäre für mich eher der Netzwerktitel (direkt hinter Netzwerk x schreiben).


Und wie gesagt, wenn das alles bei Dir schon so läuft, dann nochmal:
Kann mich noch an mein (oben erwähntes) erstes Projekt erinnern. Das war ein ähnlicher Umfang und wenn ich daran denke, was mich das an Lernzeit gekostet hat, bis da endlich was lief.
 
Anhang anzeigen SMBs.rarHi,
Ich programmiere immer in FUB, weil a Büdl sagt mir mehr - kommt auch von früher als ich die Module in Hardware mit den 74er Bausteinen von Texas Instruments zusammenbauen mußte. Da gab es fast die gleichen Symbole. Und mit den "Immer Ein" kann man optisch leicht zusammenfassen was zusammengehört. Nun weiß ich auch dass man auch dies waagrecht zusammenfassen kann.

Das mit dem "R M1.2, 2" ist mir neu. Kann ich dies auch in FUP darstellen - bei mir kommt immer "Unzulässig"

Ja das mit den Kommentaren hast sicherlich recht, bin nun schon öfters drübergefallen - aber beim Programmieren gibt's auch ein probieren, zumindest bei mir. Und da kommt leider die Doku öfters zu kurz - leider.

Und nun noch zu den SMB´s
Das hatte ich sicherlich irgendwo gelesen, ansonsten hätte ich gar nicht gewußt das es dies gibt. Gemacht hatte ich dies sicherlich gleich zu beginn (Anfang 2005), da die Uhrzeit brauche ich immer.
Warum hast du den SMW136 besonders hervorgehoben? Den habe ich auch verwendet. Soll ich die SM´s gar nicht verwenden, bzw jetzt wieder umschreiben? sind die gefährlich?
Soweit ich noch im Hinterkopf habe, sind die SM´s besondere Variablen, welche über alle Unterprogramme verwendet werden können. Aber dies können doch e alle? WIe du im Anhang siehst verwende ich einige SM´s
LG Robert
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich programmiere immer in FUB, weil a Büdl sagt mir mehr
Ich programmier auch lieber mit Bildern, allerdings in KOP. Aber AWL läßt sich hier im Forum nunmal leichter posten. Deshalb Ansicht auf AWL umschalten, für's hier Posten kopieren, ansonsten hier vorgeschlagene Änderungen eintragen, Ansicht wieder auf FUP/KOP zurückschalten und freuen (hoffentlich).:D


Und mit den "Immer Ein" kann man optisch leicht zusammenfassen was zusammengehört.
Ist richtig, aber ein "Immer EIN" reicht doch. Also wieder nach AWL umschalten, Zeile mit O "Immer_Ein" löschen, zurückschalten - schick.
(Weiß gerade nicht, wie man in FUP normalerweise überflüssige Eingänge löscht, nutzte ja KOP.)


Das mit dem "R M1.2, 2" ist mir neu. Kann ich dies auch in FUP darstellen - bei mir kommt immer "Unzulässig"
Ja, dort wo am Baustein jetzt am Eingang N die 1 steht, halt die 2 eintragen.
Ist, wie gesagt, 'ne Besonderheit der S7-200. Aber in meinen Augen eine sehr nützliche.


Ja das mit den Kommentaren hast sicherlich recht, bin nun schon öfters drübergefallen - aber beim Programmieren gibt's auch ein probieren, zumindest bei mir. Und da kommt leider die Doku öfters zu kurz - leider.
Zu zwingen, im eigenen Interesse. Muss ich bei mir auch machen. Aber man kommt sonst immer wieder an Stellen, wo man sich fragt: "Was hast Du 'Depp' Dir da nur gedacht?!" :confused:
Glaub's mir, ich spreche aus eigener Erfahrung.
;)



Und nun noch zu den SMB´s
Das hatte ich sicherlich irgendwo gelesen, ansonsten hätte ich gar nicht gewußt das es dies gibt. Gemacht hatte ich dies sicherlich gleich zu beginn (Anfang 2005), da die Uhrzeit brauche ich immer.
Warum hast du den SMW136 besonders hervorgehoben? Den habe ich auch verwendet. Soll ich die SM´s gar nicht verwenden, bzw jetzt wieder umschreiben? sind die gefährlich?
Soweit ich noch im Hinterkopf habe, sind die SM´s besondere Variablen, welche über alle Unterprogramme verwendet werden können. Aber dies können doch e alle? WIe du im Anhang siehst verwende ich einige SM´s
SM... sind Sondermerker, über die die CPU Sonderfunktionen bereitstellt bzw. diese Sonderfunktion dort durch den Nutzer einstellen läßt. Such' mal nach SM in der Hilfe von MicroWin, da werden Dir die ganzen Funktionen aufgelistet. Die Symbole zu den Sondermerkern findest Du auch in der Symboltabelle "S7-200 Symbole"

Das SMW136 hab' ich erwähnt, weil Du das Symbol "SollvorlaufAB" dafür erstellt hast. In der Symboltabelle USR1 ist deshalb vorne in der Zeile 104 so ein doppelter Adressanhänger zu sehen. Der weist auf Bereichsüberschneidungen hin. (Deshalb ist es mir aufgefallen)
Dieses SMW enthält sonst einzelne Bits zum Einstellen des 3. schnellen Zählers HSC3. Das kann man natürlich auch in einem Rutsch mit dem Übertragen eines Wortes machen, aber Deine Symbolik sagte irgendwie was anderes.

Du kannst alle globalen Speicher (Merker M..., Variablen V..., Akkus AC.. und ja, auch Sondermerker) über alle Unterprogramme hinweg benutzen - halt global. Nur lokale Variablen, die man im Kopf über den Netzwerken deklariert, gelten nur im jeweiligen Baustein (SBRx oder OB1). Nur wie gesagt, die Sondermerker sind als Schnittstelle zu besonderen CPU-Funktionen gedacht und werden auch zum Teil in jedem Zyklus von der CPU verändert. Da hast Du bisher also einfach Glück gehabt, das Du nicht solche Speicherbereiche erwischt hast.

Ich würde an Deiner Stelle auch die Mühe auf mich nehmen und das abändern.
Wenn Du Dein Programmeinstellungen auf symbolisch hast (Standard), ist das auch relativ einfach. In der Symboltabelle USR1 die Symbole nach Adresse sortieren lassen und die SM-Adressen (durch die Sortierung alle zusammen) durch eine freie Adresse im Variablenbereich ersetzen - fertig. Durch den Symbolvorrang wird überall im Programm automatisch die neue absolute Adresse übernommen.
 
Kleiner Tip,

wenn Du das hochgeladene nicht "an der Cursorposition einfügst", sondern nur auf "Fertig" klickst oder z.B. im zitierten Beitrag den ATTACH-Code wieder löschst, dann wird das Hochgeladene einfach hinten an den Beitrag angehangen.

Der Vorteil: zum Einen erscheint der Download in einem gut sichtbaren Feld und zum Anderen hast Du da auch einen Downloadzähler, der Dir etwas Aufschluss über das Interesse an dem Angehangenen gibt.


PS für die Admins:
Wäre das nicht gut, wenn die Anhänge auch beim "Einfügen an der Cursorposition" das gleiche Format hätten, wie beim bloßen Anhängen?
 
Hi,
da muß ich mal über SM (bedeutet normalerweise was unanständiges) drüberschauen - hoffentlich geht dann noch alles. Aber einmal muß es sein

So jetzt habe ich das SunPos_Calculator als Bibliothek eingebunden - HURRA die erste Bibliothek!!


LD Immer_ein:SM0.0
CALL SunPos_Calculation:SBR21, 14.166, 48.21, 0, Immer_ein:SM0.0, #tempREAL:LD20, #Zenith:LD39

War echt toll - aber irgendwie stimmt bei mir der Sonnenaufgang und Untergang heute nicht
Habe dir oben gleich die Longit (48.21) und Latitu (14.166) klar eingetragen

eigentlich sollte heute in Linz, Österreich die Sonne um ca. 20:32 untergehen (90Grad) aber bei mir sind es schon 143 Grad
meine Koordinaten sind: N 48Grad 12´36" O 14Grad 9´58" dies sollten eigentlich dann die werte wie oben sein

Konntest du da was anderes herausbringen?

Hab nochmal drübergesehen - mit Google Earth fliege ich mich mit meinen Koordinaten genau an (48.21,14.166)

LG Robert
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ach Du Schiet, das ist schon 'ne Weile her, das ich mich näher damit beschäftigt habe.
:oops:

Könnte mit Deiner Uhrzeit Zusammenhängen. Ich meine mich zu erinnern, dass die Siemens-Bibliothek mit UTC-Zeit rechnet.
Hatte im oben angegebenen Thread 'nen Test gemacht und (glaub' ich) auch was zu geschrieben.
Schau' da mal bitte nach.
 
Hi,
Ja das mit er UTC Zeit war richtig. Hab mirs mal einfach gemacht und beim Eingang "Bias_seconds" die -7200 gesetzt. Muß dann noch suchen wenn die Winterzeit kommt, dann schreib ich nur "3600" rein.

Aber wie es auch bei den Mikado Stäbchen ist, wenn man wo anzieht bewegt sich sehr viel:
1) Wie kann man (zB dein Programm von den Rollläden) als Bibliothek exportieren (das hab ich zusammengebracht) aber das importieren geht nicht. Da will er immer ein/mehrere POE generieren (na soll er doch). Das mit den Übergabe-Parametern ist mir klar. Ich möchte ja nicht wegen den Rollläden eine eigene CPU verbraten.
2) Wenn ich 2 CPU´s vernetzen will (ich habe 2x 226 und 1x 215 und 1x TD200 und ev. noch RS232) soll ich da den PROFIBUS anstreben?

Übrigens: Mit der STEP7 fahre ich per Ethernet ins System. Also die PPI ist frei für RS232. Komm ich dann auch darüber zu den anderen CPU´s ?

LG Robert
 
Zuletzt bearbeitet:
Vernetzen mit PPI, weil das ist schon onBoard.
Falls Du noch RS232 bzw. Freeport brauchst: die 226 hat doch 2 Ports - nimm einen für die PPI-Vernetzung und den anderen für die Freeport-Geschichte.

Mit einem MPI/PPI/Profibus-zu-Ethernet-Adapter wie S7LAN oder NetLink kannst Du das ganze PPI-Netz günstig an Ethernet bringen.

Harald
 
Zurück
Oben