Bei einer Funktion mit Merkern oder über die Schnittstelle TEMP programmieren?

Zuviel Werbung?
-> Hier kostenlos registrieren
Solltest Du mit indirekter Adressierung machen

Sorry, aber der TE kann bisher noch keine parametrierbare Bausteine erstellen.
Dann sollte man die indirekte Adressierung erstmal vernachlässigen.

Ich frage mich gerade, ob nicht besser erstmal einen Blick in diverse Schulungsunterlagen werfen solltest.

Das frage ich mich nicht, das hoffe ich für ihn!
Ansonsten wirds schwierig.

@EDirk
Natürlich kannst du auch in einem FB temporäre Variablen verwenden. Deine MD40 + MD50 sind dafür sehr gut geeignet.

Ich hab leider auch nicht wirklich viel Zeit.
Versuch doch erstmal selber anhand der Ausbildungsunterlagen dich in die Materie einzulesen und dann selber was zu machen.
Deine Ergebnisse kannst du ja hier posten und wir werden dir dann weiter helfen.
Alles andere macht in meinen Augen zu diesem Zeitpunkt keinen Sinn.

Gruß wolder
 
@wolder:
Du hast recht, indirekte Adressierung ist offensichtlich weit über dem Niveau des TE. Ich war gedanklich bei "wie würde ich das machen" und da ist mir Aventinus' Lösung nicht in den Sinn gekommen, einfach weil ich sie nicht wählen würde. Viel schlimmer fände ich, wenn der TE mit absoluter Adressierung im IDB rumwühlt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@wolder:
Du hast recht, indirekte Adressierung ist offensichtlich weit über dem Niveau des TE. Ich war gedanklich bei "wie würde ich das machen" und da ist mir Aventinus' Lösung nicht in den Sinn gekommen, einfach weil ich sie nicht wählen würde. Viel schlimmer fände ich, wenn der TE mit absoluter Adressierung im IDB rumwühlt.

Ich würde es auch nicht so machen weil mir die Zählerei bei den 0en zu blöd wär. Aber wenn das Thema indirekte Adressierung nicht sitzt ist es so einfacher zu verstehen denke ich.
 
Habt ihr euch mal das Datenblatt der 7-Segmentanzeige angeschaut?

Jetzt weiss ich auch warum der TE einen Zähler bis 20 hat....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich hab die Aufgabenstellung und den FC1 immer noch nicht kapiert, speziell wie M80.2 / enable programmiert ist. Das Datenblatt hab ich auch nicht durchgearbeitet.

Anhand des FC1 habe ich jetzt einen FB1 programmiert, der, soweit ich den FC1 verstanden habe, funktionieren sollte (ich habs nicht getestet). Zumindest sieht man hier übersichtlich, wie ein entsprechender FB aussehen sollte. z.B. liebe ich die Netzwerk- Struktur Eingang / Operation / Ausgang. Viele Variablen habe ich auf In/out/Stat gesetzt, den MD60 hab ich gelassen, um M61.3 daraus abgreifen zu können. Das funktioniert so, weil dieser bei jedem Aufruf von FB1 neu beschrieben wird.

Auch als Quelle angehängt zum weiterbasteln ;)

Weiterhin würde ich MB0 nur ungerne verwenden, es hat sich bei vielen Betrieben durchgesetzt:
M0.0 > Immer 0
M0.1 > Immer 1
M0.2 > Neustartmerker
M0.6 > Inbetriebnahmemerker

@EDirk:
SPS hat viel mit Logik zu tun und es ist hilfreich, wenn man die Logik (oder was man programmiert / beabsichtigt) klar in Worte fassen kann. Lobenswert, das du Kommentare eingefügt hast, aber diese sollten auch logisch und nachvollziebar sein.
 

Anhänge

  • FB1.txt
    2,2 KB · Aufrufe: 4
  • FB1.pdf
    21,3 KB · Aufrufe: 9
Einfache Erklärung:
ein Telegramm aufbau mit 20Bit.
Wenn der Enable-Ausgang 0 ist, dann sollen 20 Bit gesendet werden. Darin sind die ersten 4 Bit für die Komma-darstellung enthalten und die restlichen 16 Bit für den BCD-Code der 4 Ziffern.
Das senden wird mit clock bewerkstelligt. Durch das Takten des Clock-Ausgangs werden einzeln nacheinander die 20 Bit übertragen.

Gruß wolder
 
Danke für den vielen Input.

Indirekte Adressierung habe ich bis jetzt nie was mit zu tun gehabt.
Ich werd jetzt versuchen aus den Ganzen Anregungen das beste für heraus zu holen und die Ansteuerung der Segmentanzeige flexibler zu gestalten.

Habe vor alles in einen FB zu schreiben und die Merker durch TEMP und STAT zu ersetzen.

an der Stelle wo ich bei mir das Datensignal abfrage (M61.3) werde ich dann vorher das fertige Merkerdoppelwort in eine STAT schreiben .

Dann lege ich an den Ausgang für das Datensignal einen IN Wert an.

Diesen passe ich dann immer an. Wollte dann zB: mit dem Befehl DB1.DBX15.3 dann arbeiten . (Wäre dann die Stelle im DB wo ich abgreifen will).

Muss dann halt nur bei jedem neuen Einsatz einer weiteren Anzeige DB2.DBX15.3 oder DB3..... etc schreiben. Und dementsprechend einen DB erstellen.


Ich schreibe es mal um und lade es dann hoch, damit es verständlicher ist :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Einfache Erklärung:
ein Telegramm aufbau mit 20Bit.
Wenn der Enable-Ausgang 0 ist, dann sollen 20 Bit gesendet werden. Darin sind die ersten 4 Bit für die Komma-darstellung enthalten und die restlichen 16 Bit für den BCD-Code der 4 Ziffern.
Das senden wird mit clock bewerkstelligt. Durch das Takten des Clock-Ausgangs werden einzeln nacheinander die 20 Bit übertragen.
Danke! Kurz und präzise formuliert und jetzt hab ich es auch kapiert!
Nach diesen Angaben hab ich es umprogrammiert und getestet, es funktioniert so! (ich musste an meiner Maschine FB1000 nehmen).

Das ist sicherlich nicht die eleganteste Lösung, aber ich denke didaktisch wertvoll, ich denke EDirk kann dies hier schnell nachvollziehen.

Eleganter wäre es mit dem Zähler auf das entsprechende Bit zu verweisen und dies dann zu übertragen. Wenn ich morgen Zeit hab, probiere ich es auch noch.
 

Anhänge

  • FB1000.pdf
    24,6 KB · Aufrufe: 7
  • FB1000.txt
    3 KB · Aufrufe: 3
Ich habe nun alle Merker entfernt und alles mit TEMP und STAT realisiert.

Einzigstes Problem war mit der Stelle wo ich im MD 60 das Bit M61.3 immer abfragen will.
Habe es so gemacht das ich den Wert Datenstelle nenne und im IN immer angeben muss.

In meinem Fall ist das immer die Adresse 15.3 im Db also schreibe ich in den IN DB (Bausteinnummer).DBX15.3

So kann ich ihn nun Flexibler einsetzen.
 

Anhänge

  • FB5.pdf
    14,6 KB · Aufrufe: 6
Vielleicht bringst du noch die Abfrage, wie groß die Realzahl ist, noch mit rein.
Dann kannst du in Abhängigkeit von der Größe das Komma setzen und brauchst nicht von aussen angeben, wo das Komma stehen soll.

Gruß wolder
 
Zurück
Oben