Saia DB zugriff

vollmi

Level-3
Beiträge
5.433
Reaktionspunkte
1.409
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe hier ein Kurioses Problem

Ich habe einen Wert im DB4001 Element 3
Diesen Wert überschreibe ich mit 0 Wenn in einem Register (R 2000) eine 0 Erkannt wird

Das funktioniert tadellos wenn ich das über das Watch Windows mache.
Register bekommt 0. 0 wird in DB geschrieben, und beim Auslesen ist eine 0 drin.

Ich habe im Programm aber jetzt noch ne Abfrage drin welche eine 0 aufs Register schreibt wenn dieses Register den Wert 324 beinhaltet.
Das funktioniert nicht. Sondern der inhalt des Registers wird ständig mit dem Inhalt des DB überschrieben (Flackert im Watchwindow zwischen 0 und 324) und im DB selbst bleibt der Wert 324 Erhalten und wird durch die Systemfunktion nicht mehr überschrieben.

Mache ich da einen Denkfehler?

Hier mal der relevante Programmausschnitt.

Code:
            COB    COB_Main            ; Cyclic Organisation Block Hauptprogramm
                   0

            CMP    R 2000
                   K 0
            ACC    Z
            DYN    DYNFLAG[1]
            CSF    H    S.SF.DBLIB.Library ;Library number
                   S.SF.DBLIB.SetDBItem ;Write a single DB item
                   4001                ;1 R|K IN, DB number (any DB number)
                   K 3                 ;2 R|K IN, DB item
                   R 2000 ;3 R|K IN, Value to be written
                     
            CSF    L S.SF.DBLIB.Library ;Library number
                   S.SF.DBLIB.GetDBItem ;Read a single DB item
                   4001                ;1 R|K IN, DB number (any DB number)
                   K 3                 ;2 R|K IN, DB item
                   R 2000 ;3 R OUT, Value read

    
; Hier wird das register 2000 auf 0 gesetzt wenn der Inhalt 324 ist.
               
        CMP    R 2000
                   324
            JR     Z test1

            JR     TEST2
test1:
            LD     R 2000
                K 0
             
            INC    R 1000


TEST2:       NOP

ECOB
 
Ich bin jetzt offiziell ein DEPP.

Verständnisproblem. Wenn ich aus dem DB den Wert auslese und der ist 324, wird er auf 0 zurückgesetzt und am anfang des Programms mit dem Compare 0 verglichen und per Flankenerkennung wieder in den DB geschrieben. Nur die flankenerkennung merkt ja von dem wechsel 0 -> 324 -> 0 garnix weil ja alles noch im selben Zyklus stattfindet.

Ich habs jetzt so gemacht. Nach dem Lesen des DBs vergleiche ich mit 0, wenn ungleich null setze ich ein Flag.

Am Anfang des Programms überprüfe ich auf 324 und setze auf 0 zurück.

beim DB schreiben überprüfe ich ob gleich 0 UND Flagmerker True wenn ja setze Flagmerker zurück und schreibe 0 in DB.

Code:
            COB    COB_Main            ; Cyclic Organisation Block Hauptprogramm
                   0
              
                  
            CPB    PB_Test1            ; Soll CmdHandLokal wieder auf 0 schreiben wenn vorher Wert 324 hatte
            CPB    PB_Test2            ; Soll DB auslesen und beschreiben wenn jemand 0 auf CmdHandLokal geschrieben hat.
 

         

            ECOB

         
            PB     PB_Test1 ; Externes Programm um zu testen ob 0 von Extern auf CmdHandLokal korrekt funktioniert

            CMP    R 2000     ; Hier überprüfen ob Wert 324
                   324
            JR     Z test1                   ; Wenn Ja springen zu Wert auf 0 Setzen
            JR     TEST2
                     
test1:

            GET    Register ; enthält 0
                   R 2000
            INC    R 1000              ; Zähler incrementieren um zu prüfen ob Sprung durchgeführt wurde
TEST2:
; Ende Testprogramm
            EPB


            PB     PB_Test2

; Programm das in einem eigenen FB laufen soll.

            CMP    R 2000  ; hier überprüfen ob CmdHandLokal 0 ist
                   0
            ACC    Z
            ANH    DYNFLAG[1]          ;nur wenn sich Wert auf 0 geändert hat
            JR     H TEST4             ; springen zum DB Beschreiben
            JR     TEST3               ; sonst immer weiter zu DB lesen

TEST4:      RES    DYNFLAG[1]
            TFR    R 2000 ; Dieses nur einmal ausführen wenn jemand 0 ins CmdHandLokal geschrieben hat.
                   DB4001
                   K 3
            INC    R 1001
TEST3:

            
            TFR    DB4001
                   K 3
                   R 2000
                     
            CMP    0
                   R 2000 ; hier überprüfen ob CmdHandLokal 0 ist
            ACC    N
            SET    DYNFLAG[1]

            EPB

mfG René
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo vollmi,

darf ich fragen (hat nichts mit deinem problem zutun, programmiere selbst seit ca. 10 Jahren Saia-Steuerungen) weshalb du das in il programmierst?

Die Frage zielt auf den Programmierstil ab und soll keine Wertung der Qualität abgeben.

Ich selbst versuche bei Saia im Fupla zu bleiben, bei Bedarf programmiere ich mir FBoxen welche das nötige tun.
 
Bisher habe ich Saia auch immer in Fupla programmiert. Für HLK ist das super, vor allem weil die Fuplabibliotheken für HLK, Kommunikation etc. wirklich mächtig sind.

Allerdings ist das derzeitige Projekt so dermassen umfangreich was die Anzahl Unterstationen angeht das ich alles im Text halte und so dann eine Anweisungsliste habe die man dann automatisch aus der Datenpunktliste exportieren könnte.

Auch Suchen ersetzen von Datenpunkten geht in IL wesenlich besser von der Hand (in Notepad++) Als wenn man das in Fupla machen müsste.

Aber ich gebe zu IL von Saia ist IMHO wesentlich komplexer zu programieren als z.B. AWL bei Siemens. Man stolpert da immer über Sachen die man nicht erwartet.

z.B. das

Code:
LD Testregister
Testregister3

Einem nicht den inhalt von Testregister3 in Testregister läd, sondern die Absolute dynamische Adresse.

für das andere braucht man Put oder Get.

Für daten Rumschupsen gibt es gefühlte 20 Befehle, um einen Vergleich anzustellen nur einen Befehl, welcher dann dafür mit diversen Statusbits ausgewertet werden muss.

mfG René
 
jo, ist wohl wahr, aber was die adressierung angeht hab ich keine probleme, mit welchem pg5 arbeitest du? readressierung in fupla geht zu mindest in pg52.0 und pg52.1 total einfach.

Geht wie mit Excel.

Was die Libs angeht ist saia im bereich hlk zwar mächtig und umfangreich, kommunikation mache ich aber komplett mit selbstgeschriebenen sbus-bausteinen, transferieren tu ich nur arrays (hab mir dazu ne lib gebaut die das händeln von arrays so stark vereinfacht, das man nicht mehr drüber nachdenken muß. funktioniert so wie das alarming-prinzip fürs sweb von den fboxen her.


setzt du sweb ein?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich nutze 5.2.0.220. Hm wie man readressiert sozusagen wie das umverdrahten bei Siemens hab ich noch nicht rausgefunden, vor allem wenn die Adresse dann dynamisch ist.

Ich nutze auch sWeb und ich kanns kaum erwarten bis Editor v5 gegen v8 tauschen. Was haben sie wohl mit v6 und v7 gemacht ^^

Aber auch die sWeb alarming mach ich oft in IL, weil die Alarmbearbeitung direkt aus Excel Macroartig rausgehauen wird und ich dann alles in einem Textfile habe.

Ich fänds also schon super wenn Saia sich mal um einen SCL Editor kümmern würde.

mfG René
 
der c-editor wird wohl so schnell nicht kommen.

v8 kommt bald mit pg 5.2.1.0 (rev 100?).

ich hab ihn schon, aber im moment finger weg davon.

was ist mit v.6 und v7 geschehen?

nichts, v5 war eine entwicklung des schweizer programmierers Peter Brückner (IniNet) auch bekannt als spidercontrol, und ist exakt das selbe. EDIT: Also Sweb v5 und spidercontrol sind identisch, v8 ist eine neuentwicklung von Matt Harvey, SBC CH)

Saia hat sich dazu entschlossen die entwicklung selbst zu machen, die namensgebung ist kaufmännischer natur.

ein umverdrahten wie du es meinst gibt es bei saia nicht, aber wenn du mit fxp´s arbeitest kannst du die anlagen mit prefix-tausch replizieren. bis zur io-ebene klappt das wunderbar wenn man sich schon beim variablen-generieren der ios gedanken darüber macht, manko hierbei ist der importdialog. aber das wird nie mehr besser werden.

was das alarming mit il angeht, habe ich einfach folgende bauchschmerzen, es müßen 5 weitere mitarbeiter verstehen.
 
Zuletzt bearbeitet:
Hehe na dann war es wohl gut ging der neue Editor erst jetzt in die Pilotphase.
Ich persönlich komme mit dem 5er einigermassen zurecht, auch wenn mir etwas die Uebung fehlt. Trotzdem will ich von den Textterminals wegkommen.

Ich hoffe allerdings das sich Saia mit V8 nicht zuviel vorgenommen hat. Wäre schön wenn die Schwächen von V5 nicht ergänzt sondern verbessert werden.

Zum IL.
Es ist schon so das IL etwas mehr umsicht erfordert um es verständlich für andere zu halten. Dafür ist es zum Teil etwas übersichtlicher und platzsparender.

Bei Sowas in Fup:
Code:
;ALARMBIT ANSTEHEND    
AA1:        SEI    K 0
AA2:        STHX   A800
            OUT    F1602
            JR     H AM1
            INI    K 169
            JR     H AA2
            OUT    F1602
     
;ALARMBIT ANSTEHEND    
AM1:        SEI    K 0
AM2:        STHX   AQ1000
            OUT    F1601
            JR     H AQ1
            INI    K 169
            JR     H AM2
     
;ALARMQUITTIERUNG SCHALTSCHRANK    
AQ1:        SEI    K 0
            STH    DE4
            JR     L LB
AQ2:        RESX   AQ1000
            INI    K 199
            JR     H AQ2
     
;LAMPE ALARM BRAND ANSTEHEND    
LB:         RES    F1603
            STH    A801
            OUT    F1603

Würde wohl so mancher Bildschirm zusammenbrechen ;)

Toll finde ich am 5.2 auch das man XLS dateien direkt als Symbolliste nutzen kann, ohne regelmässigen import. Find ich richtig gut gelöst.

Den FBox Editor hab ich zwar, die Schulung dazu allerdings noch nicht in Anspruch genommen. Spare ich mir auf bis ich mal wirklich FBoxen machen will für ne grössere Anlage. Haben wir bei der aktuellen etwas verpasst. Da sind wir zu zweit dran und kommen da eigentlich gut anneinander vorbei.

mfG René
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Du hast zwar recht bezüglich der überischtlichkeit, aber bezugnehmend auf debugging und parametrierung der fbox-innerein ist fupla doch deutlich schicker.

zum thema sweb v8 vs. v5:

Die Bugs aus V5 sind nicht mehr existent (wie den auch, ist eine neue, andere software, die mit spidercontrol ausser dem namen nichts gemein hat da von grund auf neu programiert)

aber dafür zuhauf neue bugs, eine liste würde den rahmen sprengen.

die texterminals mache ich garnicht mehr, zu teuer und unflexibl für die heutigen anforderungen der planer / architekten. evtl. noch in industrie wegen lebensdauer
 
Bisher nutze ich die DDC libs nicht. Ich habe mir aber schon überlegt mal die Lib dazuzunehmen. Aber die HLK Bibliothek ist ansich schon ausreichend für alle Funktionen die ich benötige. Der Vorteil der DDC Lib ist soweit mir ist eher in der Datenhaltung und in der übersichtlichkeit. Also halt noch etwas mehr Klickibunti um eine Anlage zu programmieren :)

Könnte PVSS direkt auf die Objekte zuzugreifen ohne das man sich noch selber um die Strukturen kümmern müsste. Wär die DDC Lib schon lange im Einkaufswagen :)
Welche Leitsystemsoftware nutzt du denn mit der DDC lib? Visi+?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ViSi+ und WinCC, SWeb geht auch Super

Zu PVSS (WinCCOA) hab ich keine großen Erfahrungen. Bei WinCC selbst ist es so das ich die ariablen via Excel ins System hole und mit Faceplates, und Bildbausteinen arbeite, geht soweit ganz gut. Problem dabei ist aber tatsächlich das innherlab der Faceplates/Bildbausteine keine echte dynamische Adressierung möglich ist. Da Frimmelt man leider immer etwas rum.

Hatte schon überlegt auf Basis von Spidercontrol (DLL zum Zugriff auf die Datenhaltung über SymDlg52.dll und Spglib52.dll) ne Schnittstelle zu programmieren, leider gibt siemens aber die infos nicht preis die ich benötige um das system in wincc einzubinden.
 
zum thema sweb v8 vs. v5:

Die Bugs aus V5 sind nicht mehr existent (wie den auch, ist eine neue, andere software, die mit spidercontrol ausser dem namen nichts gemein hat da von grund auf neu programiert)

aber dafür zuhauf neue bugs, eine liste würde den rahmen sprengen.

Programmierst du neue Anlagen denn jetzt in V5 oder V8?

Ich hab jetzt mal ein Projekt auf PG5.2.1 hochgezogen und gleich auf V8 portieren lassen. Und muss sagen bisher gefällt mir V8 und es scheinen n paar Funktionen hinzugekommen zu sein welche vor allem Macrofunktionen beinhalten welche mich grad reizen?
z.B. mehrere aufeinanderfolgene Befehle auf Buttonpush
--> kopiere den inhalt von ppo nach container sowiso.
--> setze Container sowieso auf 1
--> und springe in Bild 2

mfG René
 
Zurück
Oben