ständig neue werte aus DB auf den ausgang legen

ich sehe es ...
Code:
UN Zeit_abgelaufen
SPB Ende
 
L Index   // Index erhöhen
L 8
+I
T Index
 
L Index   // vergleichen ob max erreicht
L 480
<I
SPB _001
 
L 0   // wenn ja, dann wieder von vorn
T Index
 
_001: L Index
SLD 3
L AR1
 
L DBD [AR1,P#0.0]   // Doppelwort [Index] holen 
T AD 0
L DBD [AR1,P#4.0]   // Doppelwort [Index +4] holen 
T AD 4
 
Ende: nop 0
// und Neustart der Zeit
 
Das sollte so funktionieren ... (DB-Aufruf fehlt noch ...)
Wenn du es an den Start bringst, dann schau dir auch an, was es macht - dann wird die Sache mit den Pointern auch klarer. Hast du es jetzt verstanden ?

Ach ja, Index ist natürlich keine TEMP-Variable sondern ein MW oder DW oder so ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... Ja ...!!!

Und ich habe nicht das Adress-Register selbst erhöht, weil ja vielleicht andere (noch folgende) Programmteile auch noch damit herumspielen und es dadurch im nächsten Zyklus bestimmt nicht mehr den passenden Wert hat ...

Ansonsten, wenn noch etwas unklar ist, dann frag ...
 
okay....



L Index // Index erhöhen
L 8
+I (wird hier auch um 8 erhöht, damit ich dann immer um 8Byte springe?)
T Index
 
... damit das Ganze immer nur einmal pro Zeit-Intervall und nicht pro SPS-Zyklus ausgeführt wird. Das Zeit-Intervall kommt hier von deinem Timer. Wäre die Anweisung :
Code:
UN Zeit_abgelaufen
SPB Ende
nicht da, dann würde das in jedem Zyklus der SPS passieren (also alle ca. 10 ms). Das wäre dann ja ein bißchen schnell oder ...:rolleyes:
 
ich habe 64 Ausgänge und alle Ausgänge sollen eine bestimmes Bitmuster abfahren (bzw. Relais ansteuern) Bitmuster steht in einem DB.
Den Datenbaustein habe ich in C/C++ erstellt mit 64 bis ca. 16000 bits (Bitfolge 10110011..usw.) und in eine Textdatei als AWL-Quelle geschrieben und in Step 7 übersetzt. Die Bitfolge enthält ein bestimmtes Schaltmuster für die Relais. Die Relais schalten Widerstände und Spulen in einem Niedespannungsnetzmodell. Diese sollen Verbraucher darstellen.
Ich generiere Zufalls "1" und "0" um unvorhergesehene Zustände in einem Netz zu simulieren.

...........so die kurze fassung!

grup mcpaul
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo LL,

das Programm funktioniert gut, nur dass bei der ersten Schleife nicht die Werte mit der Adresse 0.0 sondern erst 4.0 geholt werden.
Die nächten Schleifen wiederum fängen bei 0.0 an, nur die erste halt nicht!
Woran liegt das? Ansonsten läuft es prima!!

AUF DB 10
UN Zeit_abgelaufen
SPB Ende

L Index // Index erhöhen
L 4
+I
T Index

L Index // vergleichen ob max erreicht
L 480
<I
SPB _001

L 0 // wenn ja, dann wieder von vorn
T Index

_001: L Index
SLD 3
L AR1

L DBW [AR1,P#0.0] // Wort [Index] holen
T AW 0
L DBW [AR1,P#2.0] // Wort [Index +2] holen
T AW 2

Ende: nop 0
// und Neustart der Zeit


gruß McPaul
 
das Programm funktioniert gut, nur dass bei der ersten Schleife nicht die Werte mit der Adresse 0.0 sondern erst 4.0 geholt werden.
Die nächten Schleifen wiederum fängen bei 0.0 an, nur die erste halt nicht!

Du musst die Reihenfolge im Programmcode etwas ändern:

AUF DB 10
UN Zeit_abgelaufen
SPB Ende

L Index
SLD 3
L AR1

L DBW [AR1,P#0.0] // Wort [Index] holen
T AW 0
L DBW [AR1,P#2.0] // Wort [Index +2] holen
T AW 2

L Index // Index erhöhen
L 4
+I
T Index

L Index // vergleichen ob max erreicht
L 480
<I
SPB Ende

L 0 // wenn ja, dann wieder von vorn
T Index

Ende: nop 0
// und Neustart der Zeit

Gruß Kai
 
hier noch ein vorschlag.
einziger unterschied liegt in "SLD 5" anstatt SLD 3"


// -->- Adrresse incrementieren

u takt // 10s takt, den kannste selber erzeugen?
spbn CNT1
L Adresse
L 1
+ I
T Adresse
CNT1: nop 0


// -->- grenzwerte

...

// -->- DW ausgeben

L Adresse
ITD
SLD 5 // SLD 3 = Anpassung an Byteadressierung; SLD 2 = 2x2=4 --> Anpassug DW-Adresse
LAR1

...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die tollen Vorschläge!
Ich habe mal den Vorschlag von Kai ausprobiert und es funktioniert super!
Leider befasse ich mich mit Pointern erst seit zwei Tagen und meine Kenntnisse sind eher dürftig. Deinen Vorschlag Markus werde ich aber auch noch studieren. Danke dafür!!!

Gruß McPaul:ROFLMAO:
 
Zurück
Oben