-> Hier kostenlos registrieren
Moin,
Folgendes vorweg: Ich programmiere im Moment ein Modell (Schulungsanlage) eines Hochregallagers mit 16 Stellplätzen (4 Felder, 4 Ebenen). Jedem Stellplatz ist ein Byte in einem DB zugeordnet. Das erste Bit rechtsbündig ist "1" wenn das Fach belegt ist und "0" wenn das Fach leer ist. Das Stückgut (Kunstoff- oder Aluminiumzylinder) wird mit einem "Saugnapf" aufgenommen. Die Achse längs der Fächer (links, rechts [x]) und die Achse quer zu den Fächern (hoch, runter [z]) ist mittels Schlitten, Riementrieb und Motor realisiert. Die Achse, die den Saugnapf in das jeweilige Fach bewegt , ist ein einfachwirkender Pneumatikzylinder (Ruhestellung eingefahren). Die Position in Längsrichtung wird mittels Drehgeber erfasst. Die vier Ebenen in Querrichtung haben jeweils eine eigene Abfrage (ind. Näherungsschalter). Der Zylinder (Sauger ein- ausfahren) hat zwei Endlagenabfragen. Der "Automatikbetrieb" funktioniert einwand frei. Prinzip ist eine Schrittkette an deren Beginn eine Funktion (Schleife mit indirekter Adressierung und Pointer) in dem (Global)Datenbaustein in dem (Platzstatus)Byte das "Belegtbit" abfragt und wenn es "0" ist die "Platzdaten" (Feld- und Ebenenkorrdinate sowie Zeilennummer) in einen anderen (Global)Datenbaustein (=Auftragsspeicher) schreibt und dann wird einfach eine Schrittkette abgearbeitet. Einer der Schritte ist dann eben auch das Setzen des Platzbelegtbits. Nun zu meinem Problem:
Wie realisiere ich möglichst einfach (=wenig umfangreich + elegant), dass im "Handbetrieb" Stückgutein- oder Ausgang im DB "vermerkt" wird. Sonst lagert man im Handbetrieb ein und muss immer im DB rumfuschen, da es im Automatikbetrieb sonst kracht.
Mein Gedankengang:
Ich kann 16 mal abfragen: x-koordinate, z-koordinate, y-ausgefahren, FP Vakuumkontrolle ====> Setze Bit
und dann 16 mal: x-koordinate, z-koordinate, y-ausgefahren, FN Vakuumkontrolle ====> Rücksetze Bit
Auch möglich wäre eine Schleife. Die aber bereitet mir dahingehend Kopfschmerzen, dass ich zunächst z.B. die x-Koordinate Abfrage (4 verzweigung) und anschließend für jede Verzweigung noch einmal die z-Koordinate abfrage (sind auch wieder 16).
Wie kann ich das möglichst einfach, wenig umfangrei und elegant realisieren?
Vielen Dank schon einmal im vorab!
Folgendes vorweg: Ich programmiere im Moment ein Modell (Schulungsanlage) eines Hochregallagers mit 16 Stellplätzen (4 Felder, 4 Ebenen). Jedem Stellplatz ist ein Byte in einem DB zugeordnet. Das erste Bit rechtsbündig ist "1" wenn das Fach belegt ist und "0" wenn das Fach leer ist. Das Stückgut (Kunstoff- oder Aluminiumzylinder) wird mit einem "Saugnapf" aufgenommen. Die Achse längs der Fächer (links, rechts [x]) und die Achse quer zu den Fächern (hoch, runter [z]) ist mittels Schlitten, Riementrieb und Motor realisiert. Die Achse, die den Saugnapf in das jeweilige Fach bewegt , ist ein einfachwirkender Pneumatikzylinder (Ruhestellung eingefahren). Die Position in Längsrichtung wird mittels Drehgeber erfasst. Die vier Ebenen in Querrichtung haben jeweils eine eigene Abfrage (ind. Näherungsschalter). Der Zylinder (Sauger ein- ausfahren) hat zwei Endlagenabfragen. Der "Automatikbetrieb" funktioniert einwand frei. Prinzip ist eine Schrittkette an deren Beginn eine Funktion (Schleife mit indirekter Adressierung und Pointer) in dem (Global)Datenbaustein in dem (Platzstatus)Byte das "Belegtbit" abfragt und wenn es "0" ist die "Platzdaten" (Feld- und Ebenenkorrdinate sowie Zeilennummer) in einen anderen (Global)Datenbaustein (=Auftragsspeicher) schreibt und dann wird einfach eine Schrittkette abgearbeitet. Einer der Schritte ist dann eben auch das Setzen des Platzbelegtbits. Nun zu meinem Problem:
Wie realisiere ich möglichst einfach (=wenig umfangreich + elegant), dass im "Handbetrieb" Stückgutein- oder Ausgang im DB "vermerkt" wird. Sonst lagert man im Handbetrieb ein und muss immer im DB rumfuschen, da es im Automatikbetrieb sonst kracht.
Mein Gedankengang:
Ich kann 16 mal abfragen: x-koordinate, z-koordinate, y-ausgefahren, FP Vakuumkontrolle ====> Setze Bit
und dann 16 mal: x-koordinate, z-koordinate, y-ausgefahren, FN Vakuumkontrolle ====> Rücksetze Bit
Auch möglich wäre eine Schleife. Die aber bereitet mir dahingehend Kopfschmerzen, dass ich zunächst z.B. die x-Koordinate Abfrage (4 verzweigung) und anschließend für jede Verzweigung noch einmal die z-Koordinate abfrage (sind auch wieder 16).
Wie kann ich das möglichst einfach, wenig umfangrei und elegant realisieren?
Vielen Dank schon einmal im vorab!