Datentypen, Fehler und andere Sachen



  • Hallo zusammen,

    entschuldigt den irreführenden Titel. Es geht mir um folgendes:

    Bin an einer Sache dran und benötige mal etwas Fachkenntnis auch wenn dies nicht unbedingt was mit .Net und C# zu tun hat.

    Stellt euch eine Produktionsanlage vor - welche sagen wir 15 Stationen (UNITS) hat. Station A,B,C usw. Nun gibt es eine CSV Datei welche eine Rezeptmappe darstellt in welcher mehrere Rezepte untergebracht sind. Die einzelnen Rezepte enthalten wiederum viele Parameter für die einzelnen Rezepte.

    So wie hier:

    :IngredientName;IngredientType;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Unit;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe;Recipe
    :Names;;WS;GSS;RBS;FSC;TW;SVK;SP1;KNEL;QT1;SEK;GSF1;GSF2;RBF;SP2;FK;AHD;GSD;DE;EK;TS;AS;PA;QT2;FW;SEK1;GSF3;12,5g Milch-Praline';12,5g Florentiner;12,5g Mocca-Sahne;12,5g Herbe Sahne;12,5g Nougat;12,5g Mandel-Milch-Nuss;12,5g Rahm-Trueffel;12,5g Edel-Sahne;18,2g Schoko-Milch;18,2g Milk & Crisp;Likoer-Praline;18,2g Pfefferminz-Praline;18,2g Florentiner-Praline;18,2g Orangen-Joghurt Praline;18,2g Erdbeer-Joghurt;18,2g Nuss & Crisp;Mousse Noisette;Mousse Milch;Mousse Feinherb;Milch Haselnuss XXX;Mousse Vanille 18,2;"Pfirsich Aprikose Joghurt 18.2g";"Joghurt rein 18.2g"
    "Text";Analog;"WS_Gruppe_Statuswort";;;;;;;;;;;;;;;;;;;;;;;;;;33819136;33819136;33622528;33819136;33819136;33819136;33622528;33819136;33819136;33819136;33819136;33622528;33819136;33818112;33819136;33819136;33819136;33819136;33819136;33622528;33622528;33819136;33819136
    "Text";Analog;"WS_M1_Sollwert_Auto";;;;;;;;;;;;;;;;;;;;;;;;;;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60
    "Text";Analog;"WS_M1_SW_Auto_Max";;;;;;;;;;;;;;;;;;;;;;;;;;55;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100
    "Text";Analog;"WS_M1_SW_Auto_Min";;;;;;;;;;;;;;;;;;;;;;;;;;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20
    "Text";Analog;"WS_M1_Statuswort";;;;;;;;;;;;;;;;;;;;;;;;;;17546;17546;-31606;17546;17546;17546;-31606;17546;17546;17546;17546;-31606;17546;17546;17546;17546;17546;-31606;17546;17546;-31606;17546;17546
    "Text";Analog;"WS_M2_Sollwert_Auto";;;;;;;;;;;;;;;;;;;;;;;;;;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60;60
    "Text";Analog;"WS_M2_SW_Auto_Max";;;;;;;;;;;;;;;;;;;;;;;;;;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100
    "Text";Analog;"WS_M2_SW_Auto_Min";;;;;;;;;;;;;;;;;;;;;;;;;;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20
    "Text";Analog;"WS_M2_Statuswort";;;;;;;;;;;;;;;;;;;;;;;;;;445;17546;-31606;17546;17546;17546;-31606;17546;17546;17546;17546;-31606;17546;17546;17546;17546;17546;-31606;17546;17546;-31606;17546;17546
    "Text";Analog;"WS_M3_Statuswort";;;;;;;;;;;;;;;;;;;;;;;;;;17610;17610;17610;17610;17610;17610;17610;17610;17610;9418;9418;17610;17610;9418;17610;9418;17610;17610;17610;17610;17610;17610;17610
    "Text";Analog;"WS_M4_Statuswort";;;;;;;;;;;;;;;;;;;;;;;;;;9418;9418;17610;9418;9418;9418;17610;9418;9418;9418;9418;17610;9418;9418;9418;9418;9418;17610;9418;9418;17610;9418;9418
    "Text";Analog;"WS_M5_Statuswort";;;;;;;;;;;;;;;;;;;;;;;;;;17610;17610;17610;17610;17610;17610;17610;17610;17610;9418;9418;17610;17610;9418;17610;9418;17610;17610;17610;17610;17610;17610;17610
    "Text";Analog;"WS_M6_Statuswort";;;;;;;;;;;;;;;;;;;;;;;;;;4545;9418;17610;9418;9418;9418;17610;9418;9418;9418;9418;17610;9418;9418;9418;9418;9418;17610;9418;9418;17610;9418;9418
    "Text";Analog;"WS_Y600_Sollwert_Auto";;;;;;;;;;;;;;;;;;;;;;;;;;26;26;2.604.999.924;26;26;26;26;26;29;26;26;29;26;29;29;29;29;29;29;29;29;29;29
    "Text";Analog;"WS_Y600_Sollwert_max_Auto"
    "Text";Analog;"WS_Y600_Sollwert_min_Auto"
    "Text";Analog;"WS_Y600_Statuswort";;;;;;;;;;;;;;;;;;;;;;;;;;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606;-31606
    "Text";Analog;"WS_Y602_Sollwert_Auto";;;;;;;;;;;;;;;;;;;;;;;;;;33;34.5;29;29;33;33;34.5;29;34;29.05.2012;31.05.2012;34;34.5;34;

    Nun ist es so das an dieser Anlage immer wieder Probleme auftreten, insbesondere dann wenn Rezepte neu geladen bzw. gewechselt werden.

    Ich hab mich der ganzen Sache angenommen und bemerke folgendes:

    Bspw hier:

    "Text";Analog;"WS_Y618_Sollwert_Auto";;;;;;;;;;;;;;;;;;;;;;;;;;30;32;29;29;30;30;32;29;30;29.05.2012;31.05.2012;31.04999924;32;24.05.2012;

    Der User hat über verschiedene Operatorpanels die Möglichkeit der Parameteränderung. Dezimalstellen können eingegeben werden - allerdings wird der Punkt als Kommastelle behandelt. Wird die Mappe dann gespeichert enthalten die Variablen plötzlich ein DATUM.

    Zusätzlich findet man solche Einträge:

    "Text";Analog;;"GSS_SW_Ansaughub";;;;;;;;;;;;;;;;;;;;;;;;;7.400.555.095;7.400.000.095;9.699.999.809;19.75;7.400.000.095;

    Ein Ansaughub von 7,4 wäre üblich ist aber variabel. Wie ihr seht wird der Punkt hier als Tausendertrennzeichen verwendet. Nicht selten wird beim erneuten laden dann ein Wert von 74 übernommen und voreingestellt. Oder aber ein Wert von 0.

    Auch kommt es vor das solche Werte vorhanden sind:

    "Text";Analog;;"GSS_Temperierung_SW_Temperieren";;;;;;;;;;;;;;;;;;;;;;;;;32;32;33;32;32;32;33;32;33;3240000153;33;32.5;33;34;32;32;33;3179999924;

    Seht euch den letzten Wert an. 29 - 34 sind normal, jedoch wird ein Wert von 3179999924 gespeichert.

    So Frage an euch wäre jetzt, wer kennt sich mit solchen Sachen aus, SPS Steuerungen usw. Wo liegt das grundlegende Problem das der Programmierer gemacht hat ? Erkennt ihr ein Muster ? Welcher Datentyp wird verwendet wenn der Punkt mehrere Bedeutungen hat ? String ?



  • Die von der Anlage verwendete Datei liegt übrigens auf einem Netzwerkordner welcher von den einzelnen Panels aus erreichbar ist. Ein selbstgeschriebenes Programm stellt mir die Daten unverfälscht und geordnet dar. Idee war bei Programmstart eine Kopie der Mappe zu erstellen und ab da per Filesystemwatcher die Datei auf Änderungen zu überwachen.

    Klappt auch ganz gut. Allerdings habe ich nicht bedacht, das die Mappe bei Parameteränderung der Nutzer nicht immer gespeichert wird, sondern einzelne Werte werden nur "Übernommen" - bis der User die Mappe gezielt speichert.

    Interessant wäre auch ob einer von euch mit soetwas arbeitet und wenn, wie wird verfahren ? Wird die Mappe einmal eingelesen und bei Rezeptwechsel erneut die Datei eingelesen - oder macht man sowas über im Speicher liegende Objekte.

    Jeder machts anders, ich weiß. Aber was wäre üblich bei solchen Großanlagen ?



  • shaun1981 schrieb:

    Jeder machts anders, ich weiß. Aber was wäre üblich bei solchen Großanlagen ?

    Zu Grußanlagen kann ich dir nichts sagen, aber hier scheinen die Freigaben und Vorgehensweise komplett verkehrt zu laufen.

    Wenn keine ungültigen Daten erlaubt werden sollen, dürfen solche Dateien nicht beliebig zugreifbar/änderbar sein - man muss sicherstellen das dafür ein Programm verwendet wird, das auch die Überprüfungen macht und nur gültige Inhalte schreibt und auch parallele Zugriffe behandelt (und sei es das es diese unterbindet).

    Ich habe fast die Befürchtung bei solchen Fehlern, das hier nicht ein einzelnes Programm genutzt wird, oder zumindest keins das hierfür ausgelegt ist - oder das durch die parallelen Zugriffe die Dateien korrupiert werden.

    Das mit den Datumswerten erinnert mich an Excel: Wenn man eine CSV-Datei in Excel einliest und wieder speichert, können mit Punkt getrennte Kommazahlen auf einmal zu Datumswerten werden etc. (Je nach Systemeinstellungen...).

    Und was das zurückschreiben einzelner Werte angeht: Ich kenne mich nicht mit euren Arbeiten aus, gehe aber davon aus das bestimmte Parameter auch in logischer Abhängigkeit stehen können - dann wäre ein sofortiges Zurückschreiben von Einzeländerungen sogar verheerend.



  • An Excel hatte ich auch gleich gedacht, den Gedanken aber relativ schnell wieder verworfen da selbst die ältesten Sicherheitskopien von 2012 diese und ähnliche Fehler enthalten. Aber möglich wäre es denoch.

    Es scheint ein Main - Operator Panel zu geben auf dem die Anlagensoftware läuft - oder dessen Visualisierung. In dieser Visualisierung kann der Pfad zur Datei geändert werden.

    Alle Panels (insgesammt 6) verfügen über ein eigenes System mit SSD (auch XP) und sind - so denke ich - über einen VNC - Viewer verbunden. Die Rezeptmappe liegt auf einem Serverlaufwerk. Erstelle ich ein neues Rezept - egal an welchem Panel - existiert dies sofort auf allen anderen ebenfalls.

    Zum Thema zurückschreiben: Ja, ich weiss nicht besonders viel. Nur das oben geschriebene - und das eine Software namens "Wonderware" wohl die Kommunikation zwischen SPS und Anlage übernimmt. Oder macht das VNC ? Ich kenn mich damit zuwenig aus.

    Die Sache mit der logischen Abhängigkeit der einzelnen Parameter verstehe ich nicht wirklich. Wenn ich Parameter ändere - und diese "Übernehme" enthalten die Variablen doch sofort - den neuen Wert ?! Es gibt ja nur 2 Typen. Parameter für Werte wie °C oder mm/s oder eben An/Aus (Statusworte). Denke ich zumindest.

    Aber es ist nicht völlig abwegig - das ich meine das unsere Probleme genau durch diese Dinge entstehen ?

    Die SPS Dinger geben doch auch irgendwelche Werte zurück. Gibt der User 32°C ein wird irgendwo etwas verändert. Könnte es sein das beim Speichern die Werte der Regler/SPS etc. abgefragt werden - und diese den Wert zu genau wiedergeben ? (z.B. 32.4565543°C) und genau dadurch solch ein durcheinander entsteht ?



  • Wenn ich den Prozess identifizieren könnte, gäbe es die Möglichkeit den verwendeten Arbeitsspeicherbereich nach einer Variable "WS_M5_Statuswort" zu durchsuchen um so eine Änderung On the fly zu bemerken ?


Log in to reply