Jump to content

gmd

Mitglieder
  • Gesamte Inhalte

    670
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von gmd

  1. Hier mal ein erster schritte. Habe meine hilfsfunktionen fertig mit denen ich animations namen sortieren, gruppiere, analysieren, strukturieren kann. usw. Hier ein erster ansatz, ohne den kontext des objektes ist das schwieriger, aber das ist der anfang mit dem AI. Zunaechst Neos Liste - Keyword Analysis 02-Licht Gaststube-An/Rueckwaerts-Aus || licht, gaststube, an, rueckwaerts, aus, schaltlicht, beleuchtung 02-Licht Haus An/Aus || licht, haus, an, aus, schaltlicht, beleuchtung 02-Licht hinten An/Aus || licht, hinten, an, aus, schaltlicht, beleuchtung 02-Licht links An/Aus || licht, links, an, aus, schaltlicht, beleuchtung 02-Licht oben An/Aus || licht, oben, an, aus, schaltlicht, beleuchtung 02-Licht rechts An/Aus || licht, rechts, an, aus, schaltlicht, beleuchtung 02-Licht rechts An/Aus/Unsichtbar || licht, rechts, an, aus, unsichtbar, schaltlicht, beleuchtung 02-Licht Saal An/Aus || licht, saal, an, aus, schaltlicht, beleuchtung 02-Licht vorn An/Aus || licht, vorn, an, aus, schaltlicht, beleuchtung 02-Licht vorn und links vorn An/Aus || licht, vorn, links, an, aus, schaltlicht, beleuchtung 02-Licht vorn unten links An/Aus || licht, vorn, unten, links, an, aus, schaltlicht, beleuchtung Wenn ich damit durch bin mache ich das gleiche mit meiner liste und der objektzuordnung inclusive. dann werde ich beide listen mit keywords in mein tool importieren und ableichen und mit grouping sorting etc .. mal versuchen ein strukture zu definieren die vernueftige gruppen bildet und das waere dann die voraussetzung fuer eine standardisierung.. Fuer meine steuerung brauche ich das so oder so auch wenn ich nicht vorhatte das fuer alle objekte zu machen, aber auf ein paar mehr eintraege kommt es wirklich nicht an. Nur eins hier zur klarheit - dies sind NUR Schalter .. nicht die alten animationen. gruss gmd
  2. MarkoP, Es gibt eine liste aller verwendeten objekte im MBS mit search, aber vielleicht kann ich die hier helfen. Meine app ist leider nicht fremdinstallierbar bisher, aber wenn du mir deine anlage als entwurf hochlaedst kann ich mal meinen "EbenenSieb" drueberlaufen lassen. Ich kann alle selektierten objekte in eine gruppierte liste einlesen. und auch von dort einzeln selektieren. Wenn deine toene eindeutige namen haben und sie sollte ich sie finden, brauche allerdings einen katalog eintrag in meiner app fuer die toene. Waere also gut wenn du mir eine kleine testanlage machst die deine toene enthaelt. Waere vielleicht eine idee ein plugin daraus zu machen . Ich habe das gebaut um virtuelle ebenen zu verwalten und objekte oder gruppen ein und auszublenden. Gruss gmd
  3. Hallo, Thema Animationen. Habe mir die ersten tools gebaut mit denen ich das thema sortieren, generalisieren der Animationen angehen will. Ich kann die "Schalter" eines Fahrzeugs automatisch ermittel und abspeichern. Habe das mal fuer all diesel loks getan, als testdaten. Habe eine edit funktion gebaut mit der ich die erzeugten listen importieren kann. Verschiedene dartsellungen helfen eine idee zu bekommen wie ich das thema am besten angehe. Als naechstes ergaenze ich funktionen die keywords (Schlagworte) zuordnen koennen, semi automatisiert, un dann kann ich diese struktur nach allen richtungen zerlegen. Ich knn auch transformations listen erstellen die fuer jedes modell auflisten, welche animation wie umbnannt werden koennte, wenn man sich denn auf die standardisierten namen geeinigt hat. Die schlagworte sind dann ein anfang. Wenn ich soweit bin die schlagworte (erster ansatz) zugeordnet zu haben, werde ich in einem neuen therad die ergenisse praesentieren und hoffentlich eine diskussion anregen. Auch geplant ist ein abgleich meiner animationsnamen mit der liste von Neo. Wenn jemand noch anregungen hat, bitte tut euch keinen zwang an. Mal sehen ob ich hier ein ergebnis erzielen kann. Das thema ist messy und komplex, und ohne tools wohl kaum zu einem befriedigenden ergebnis zu bringen. Gruss Gmd
  4. Das ist ein entwicklungs projekt, nicht commercial und in der entwicklung befindlich. Ob es jemals funktioniert weiss ich nicht, wird man sehen. Es ist open source und wenn du C#,Python,MySql,Avalon,NLua,Syncfusion und ein paar weitere libraries kennst und mit ein paar hundert klassen umzugehen weisst, dann kann ich dir gerne eine version auf meinen server legen. Visual Studio 2022, .Net 8.0 und Ef6 ist voraussetzung. wenn es funktioniert ist es frei fuer jeden, und ich poste weil ich feedback bekomme und dadurch weitere ideen. Gruss Gmd
  5. Hallo mal wieder, habe meine datenstruktur weiter verfeinert und einige editierungsfunktionen fertiggestellt. Irgendwie habe ich das gefuehl, dass einige der leser vielleicht noch nicht so ganz mein "Bigger Picture" sehen. Fuer mich selbst habe ich ein Beispiel Scenario beschrieben, um meine Datenstruktur darauf hin zu untersuchen inwieweit das abbildbar ist, und dabei dachte ich dass das vielleicht fuer einige auch weitere einsicht in die zielsetzung meine app gibt. Also hier ist der Text: Animations/Steuerungs Beispiel: Ein Dieselfernverkehrszug faehrt auf einen Durchgangsbahnof zu und die Betriebssteuerung verarbeitet MbsEvents und prueft Bedingungen um den zug in das dafuer vorgesehene Gleis zu lenken. Die Steuerung hierfuer verwendet die gleichen Daten (MbsTrigger, MbsCondition,EventSequence und Virtual Event). Diese sind nicht auf die Animationssteuerung beschraenkt. Die Steuerung regelt die Weichen und den Seitenschutz als auch die Einfahrgeschwindigkeiten je nach Zugart, das ist ebenfalls nicht teil der Animationssteuerung. Wir definieren Virtuelle Events Bahnhof-Einfahrt-Preview: Ereignis/Bedingung - Die Fahrstrasse zum Zielsignal ist gesetzt Ereignis/Bedingung - Zug passiert Einfahrt Vorsignal Der Event loest eine einfache Animationssequenz aus, ebenfalls eine Animation aus der App. Companion Animation: Abspielen Ankunfstansage - Die Ansage ist dem Zug (Erstellt im Zugdesigner) zugeordnet und dem Bahnhof (Definiert in den Basisdaten und Fahrplan) Die Ansage wird bei Bedarf automatisch generiert und synthesiert mit Gerauschen der entsprechenden Umgebung. Das sind kein vorgefertigten audio snippets, das wird "on the fly" erzeugt. MbSAnimation/Aktion: Der Imbisswagen faehrt auf den Bahnsteig. MbSAnimation/Aktion: Einige wartende Fahrgaeste treten vom Bahnsteig zurueck MbSAnimation/Aktion: Zwei Gepaecktraeger machen sich bereit. Bahnhof-Einfahrt: Ereignis/Bedingung - Einfahrgleis passiert Abspielen Ankunfstansage: Die zweite Ansage wird gemacht, Zug faehrt ein MbSAnimation/Aktion: Kleiner Gepaeckwagen mit Post faehrt am hinteren Ende des Bahnsteigs in Bereitstellung Bahnhof-Halt: Ereignis/Bedingung - Haltegleis erreicht MbSAnimation/Aktion: Diesel Auspuff abgestellt MbSAnimation/Aktion: Tueren Oeffnen MbSAnimation/Aktion: Engine off - oder auch nicht (Definition durch Delay und Gesamtdauer je nach Fahrplan) MbSAnimation/Aktion: Personen steigen aus MbSAnimation/Aktion: Personen steigen ein Abspielen Abfahransage: Ansage ueber Fahrziel und Stationen (Daten aus dem Fahplan) usw. Kein Ereignis oder Bedingung ist einem physischen Objekt mit festem Namen zugeordnet. Die Steuerung uebernimmt die Analyse der Mbs Events und transformiert generische Definitionen zu Anweisungen an tatsaechliche Objekte. Wenn die Ereignisse und Bedingungen entsprechend definiert sind und der Aufbau der Anlage die entsprechenden logischen Elemente enthaelt, dann benoetigt das obige Scenario nur eine einmalige Definition und funktioniert fuer alle Bahnhoefe. Die Bewegung von Personen zum Beispiel muss dabei nicht mit Fahrspuren realisiert sein, das waere viel zu aufwendig. Das automatische Erkennen und Definieren der Steuerelemente uebernimmt die Funktion BlockErkennung, damit nicht alle Elemente haendisch definiert werden muessen. Die Standardisierung der Animationen ist hier ein Teil des Gesamtproblems. Die Definitionen sind auch unabhaengig von einzelnen Anlagen solange die entsprechenden trigger und objekt als Typen/Namen vorhanden sind, was die BlockErkennung uebernimmt oder unterstuetzt. Vielleicht wieder ein Schritt weiter zur besseren Erklaerung, hoffe ich. Gruss Gmd
  6. Hallo, eine woche ueber 40 grad zu hause und ich bin froh dass ich hier im sueden bin, milde 24, leichtes lueftchen durch den caravan, sehr angenehm. Heute nun mal ein paar erklaerungen zum thema animationen. Ich mach das hier um den anderen thread nicht zu sehr belasten. Die diskussion hat mir gezeigt dass ich erst mal einiges erklaeren muss zum verstaendnis was ich eigenlich mit den animationen beabsichtige . Das Mbs und die EV sind auf ereignisse ausgerichtet und alles passiert nur ueber ereignisse, timer, schalter usw. Wenn man also etwas bewegen oder blinken lassen will dann ordnet man das einem oder mehreren ereignissen zu. Wenn man flexible sein will dann macht man sich ein paar scripte die verschiedene animation zusammenfassen und bei bestimmten ereignisse getriggert werden. So weit so gut. Das ganze passiert aber auf einer sehr niedrigen ebene und benoetigt ziemlich viel definitionsaufwand, insbesondere wenn die animationsnamen verschieden sind fuer verschiedene objekte im grunde aber das gleiche tun, also ein mapping stattfinden muss. Die definition im Mbs ist was man bottom up nennen kann, also elementare ereignisse verknuepfen zu einem groesseren ablauf. Ich hoffe das ist erst mal soweit klar. Ich denke aber prinzipiell anders, da mir der definitionsaufwand einfach zu hoch ist fuer dutzende, wenn nicht hunderte von animationen die steuerung zu definieren. Bei einer belebten anlage, und das sollen sie ja sein, kann das sehr umfangreich werden. Also ist die idee eine andere. Wenn man ein bestimmtes produkt kaufen will und jedes geschaeft oder website abklappern muss, dann kann das muehsam sein. Betrachten wir mal nicht die bots oder portals sondern nur den fall, dass alle produktanbieter innerhalb von kurzer zeit (sagen wir 1 stunde) ein angebot in gleichem format an uns schicken, sodass wir einfach nach bedingungen auswaehlen koennen, preis, lieferbarkeit etc. Nennen wir das mal top down. Nun uebertragen auf das Mbs und die steuerung bedeutet das, wir definieren virtuelle ereignisse, z.b. zug haelt am personenbahnsteig, das kann eine summe von elementaren ereignissen sein, zug betritt gleis, kontakt ausgeloest, antrieb ausgeschaltet usw. Nun haben wir definitionen vorbeitet, die eine folge von aktionen beinhalten die ausgeloest werden sollen wenn ein bestimmtes virtuelles ereignis stattfindet. Diese definitionen sind zunaechst einmal prinzipiell vom fahrzeug, lok oder wagen unabhaengig, und muessen auch nicht and jeden bahnhof, gleis oder fahrzeug angehaengt werden. Da wir einen typ definiert haben der wiederum typen von animationen enthaelt, koenen die automatisch ablaufen wann immer die bedingungen fuer das gegebene virtuelle ereignis eintritt. Nun sind nicht alle animationen bei allen objekten vorhanden oder heissen unterschiedlich. Dafuer haben wir einen mapper der die animationsnamen je nach objekt uebersetzt oder auch falls nicht vorhanden auf eine andere animation umlenkt. Prinzipiell kann ich damit generalisiert alle moeglichen situationen beschreiben und das laufzeitsystem interpretiert die elementaren ereignisse und waehlt aus welche animationstypen anwendbar sind. Theoretisch kommt man allein mit typen aus und braucht keine einzelfaelle zu definieren, aber auch das will ich moeglich machen fuer meine app. Also wenn nun die animationsnamen vereinheitlicht werden dann ist dass toll, ist aber fuer mich keine vorraussetzung. Ich passe mich and den status quo an und wenn die dadurch gewonnen erkenntnisse zur standardisierung helfen, umso besser. Hier mal einen auszug aus meiner spezifikation fuer das animation management, naemlich die eigenschaften eines fahrzeuganimationstyps und dazu erweiterte timing parameter. General Attributes for Vehicles float? Duration Approximate duration of animation sbyte? IsNight Used during night hours (Default Y) sbyte? IsDay Used during daylight hours (Default Y) sbyte? HasSound Animation creates sound (Default N) sbyte? MovingOnly Only played while vehicle is moving (Default N) sbyte? StoppedOnly Only played when vehicle has stopped sbyte? CompleteBeforeMoving Animation has be to completed before vehicle moves (Default n/s) sbyte? StartAfterEngineOff Animation starts after engine was switched off (Default n/s) string Direction Specifies directional use of animation (Default F+B) sbyte? HasRepeat Specifies if extended timing information is required (Default N) string? Delay Delay(h.m.s.ms) after event before animation is started (Default n/a) Timing Parameters sbyte? IsLoop Automatic replay of animation (Default N) sbyte? IsRandom Random start of animation when loop is specified (Default n/s) float? MinPause Minimum pause between random start (Default 0) float? MaxPause Maximum pause between random start (Default 0) sbyte? IsInterval Specifies fixed repeat interval (Default N) float? PauseInterval Time between starts when fixed interval (Default 0.0.100.0) int? Count Defines number of repeats (Default 0) string? Period Defines the maximum time span for Count of repeats (Default 0.10.0.0) sbyte? Timed Defines if the animation is started at a specific time string? Days Defines days of the week (Default M,T,W,T,F,S,S) string? Time Defines the time of the animation start (Default hh:mm:ss) float? Duration The length of played animation or repeats of animation if shorter (Default 0.0.0 hh:mm:ss) This makes the churchbell ring every hour for 5 minutes starting at 12 noon, every day IsLoop = "Y", IsInterval="Y", PauseInterval="0.1.0.0", Count="12", Period = "0.24.0.0", Timed="Y", Days="M,T,W,T,F,S,S" , Time="12:0:0" Duration="0.5.0" Ob das ausreicht wird sich zeigen, aber damit habe ich begonnen. Und hier noch ein bildchen, habe kein strenges ER diagramm gezeichnet, etwas weniger wissenschaftlich Ich hoffe dass das nachvollziehbar war und vielleicht auch meine prioritaeten erklaert. Gruss Gmd
  7. Ist schon mal eine idee fuer typen, gemeinsam sollte da doch eine brauchbare liste rauskommen. Gruss Gmd
  8. das ist doch schon mal ein anfang .. I habe meine typisierung fast fertig, dh eigenschaften fuer jede animation, wie tag,nacht, intervall, dauer und etliche weitere eigenschaften. Warted einfach mal ab was ichdamit mache. Die liste is ein einfang und eine vorlage. Ich werde meine animation/fahrzeug liste erstellen und dann damit abgleichen, ds bedeutet hinter jeder animation mit deinen eintraegen den name eine modells, welches zutrifft. Was daruas entsteht ist eine vergleichsliste weleche animationen gleiches tun aber anders heissen, damit kann ich besser steuern und die modellbauer oder wer auch immer will kann das vereinheitlichen. Die typen wuerden ja eine erste standardisierung liefern. Mal sehen wie weit ich komme, habe noch andere dinge zu erledigen zur zeit, aber trotzdem noch genug zeit mich damit zu beschaeftigen. Gruss Gmd
  9. Das ist mir nicht genug, sorry. Ich verwende liebe komplette daten auch wenn sie nicht standardisiert sind, und werde daraus einen standard fuer mich ableiten. Ich bin ja auch nicht auf einfach oder mehrfachschalter angewiesen und es ist fuer mich auch nicht wichtig ob ein modell alle funktionen hat, ich muss einfach nur wissen ob eine funktion vorhanden ist und wie sie heist. Wenn daraus etwas allgemein verwendbares entsteht, oder zumindest anregungen gibt, dann ok, aber ich warte nicht bis eine solche diskussion abgeschlossen ist. Es kostet mich nicht mehr als ein paar stunden die liste zu erstellen die ich brauche als sample. Muessen ja nicht alle sein, und wenn das zu einem brauchbaren ergenis fuehrt koenen wir weiter diskutieren. Wenn ich die fahrzeug zuordnung habe kann ich die animationen typisieren und wenn ich sie typisiert habe kann ich einen moeglichen standard ableiten. Das ist meine normal vorgehensweise. gruss Gmd
  10. Das hast du misverstanden, ich meine nur ob eine animation richtungsabhaengig ist, pantograf, tueren, stirnlicht usw. aber nicht rauch, abgase, kabinenlicht etc .. bei der typisierung geht is um eigenschaftstypen. Gruss Gmd
  11. Neo, zunaechst einmal danke, ABER .. lol die liste ist ja keine zuordnung von schalter zu modellen und das ist ja das entscheidende. Ich bin dabei eine datenstruktur aufzubauen und animationen zu typisieren und mit eigenchaften zu versehen, die dann als steuerungsparameter verwendet werden koennen. Bin gerne bereit hier input zu erhalten. Animationen koennen eigenschaften haben, was noch fehlt sind richtungsbedingungen, ich betrachte zunaechst einmal nur fahrzeuge. Typen dienen zur schnelleren definition von eigenschaften und steuerfunktionen. Mal sehen was daraus wird, werde regelmaessig berichten und du kannst ja deinen input dazu geben, happy to oblige. Nun was machen wir mit dem problem der fahrzeugzuordnung, wieder zurueck zum AI ? klingt schlimmer als es ist und die fehlerquote ist gering. Gruss Gmd
  12. Neo, danke, Ich hatte das ja bereits erwaehnt war aber nicht sicher ob du dazu bereit bist. Natuerlich ist das die beste loesung , frage ist nur in welcher form. Warte auf die liste und mal schauen was ich daraus machen kann. Gruss Gmd
  13. nur zur illustration. Ich habe begonnen das zu implementieren, habe die db tabellen definiert und eine kurze anforderungsbeschreibung mit den db tabellen fuer den ai gemacht und das bekam ich zurueck: you have created these lists from images ['01 Dach ausblenden'] ['02 Spitzenlicht vorne'] ['03 Spitzenlicht hinten'] ['04 Schlusslicht vorne'] ['05 Schlusslicht hinten'] ['06 Führerstandsbeleuchtung'] ['07 Tür rechts'] ['08 Tür links'] I want to store them in this table public partial class Vehicleanimation { public ulong Id { get; set; } public string Name { get; set; } public ulong? TypeId { get; set; } public string Description { get; set; } public ulong? FollowedBy { get; set; } public ulong? AnimationOwnerId { get; set; } public virtual Objektreferenz AnimationOwner { get; set; } public virtual Vehicleanimation FollowedByNavigation { get; set; } public virtual ICollection<Vehicleanimation> InverseFollowedByNavigation { get; set; } = new List<Vehicleanimation>(); public virtual Vehicleanimationtype Type { get; set; } public virtual ICollection<Vehicleanimationparameter> Vehicleanimationparameters { get; set; } = new List<Vehicleanimationparameter>(); } I want to link them individually to a type public partial class Vehicleanimationtype { public ulong Id { get; set; } public string TypeName { get; set; } public string Description { get; set; } public virtual ICollection<Vehicleanimationparameter> Vehicleanimationparameters { get; set; } = new List<Vehicleanimationparameter>(); public virtual ICollection<Vehicleanimation> Vehicleanimations { get; set; } = new List<Vehicleanimation>(); } and each animation can have properties(parameters) public partial class Vehicleanimationparameter { public ulong Id { get; set; } public ulong? TypeId { get; set; } public ulong? AnimationId { get; set; } public float? Duration { get; set; } public sbyte? IsLoop { get; set; } public sbyte? IsNight { get; set; } public sbyte? IsDay { get; set; } public sbyte? HasSound { get; set; } public sbyte? HasRepeat { get; set; } public float? Interval { get; set; } public sbyte? MovingOnly { get; set; } public sbyte? StoppedOnly { get; set; } public sbyte? CompleteBeforeMoving { get; set; } public sbyte? StartAfterEngineOff { get; set; } public virtual Vehicleanimation Animation { get; set; } public virtual Vehicleanimationtype Type { get; set; } } thiese parameters can be used as a preset for a type (template for the animation parameters) and for each individual animation Animations are linked with vehicles via the table ObjectReference Thast part of the prject, Now lets start with an edit funktion for the types with the ability to enter presets for each type Best is to use a syncfusion data grid and NOTE most parameters are TINYINTS with -1 not applicable 1 = true 0 = false do you need anything else ? I want the View in xaml UserControl and the Viewmodel which I load into a dockingmanager ChatGPT said: ChatGPT To create an edit functionality for Vehicleanimationtype that includes presets for animation parameters using a Syncfusion DataGrid, we will need the following: ViewModel: A VehicleanimationtypeEditViewModel with properties to manage Vehicleanimationtype and its associated Vehicleanimationparameter entries. UserControl: A XAML view for editing types and entering presets using a Syncfusion DataGrid. Command Logic: Commands for adding, saving, and deleting entries. Data Binding: Bindings between the ViewModel and the DataGrid for CRUD operations. Implementation Plan 1. ViewModel: VehicleanimationtypeEditViewModel csharp CopyEdit using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Syncfusion.Data.Extensions; using System.Collections.ObjectModel; public class VehicleanimationtypeEditViewModel : ObservableObject { private readonly DBContextManager _dbContextManager; public VehicleanimationtypeEditViewModel(DBContextManager dbContextManager) { _dbContextManager = dbContextManager; LoadTypes(); LoadParameters(); } public ObservableCollection<Vehicleanimationtype> VehicleanimationTypes { get; set; } = new(); public ObservableCollection<Vehicleanimationparameter> AnimationParameters { get; set; } = new(); private Vehicleanimationtype _selectedType; public Vehicleanimationtype SelectedType { get => _selectedType; set { SetProperty(ref _selectedType, value); LoadParametersForType(value); } } private void LoadTypes() { var types = _dbContextManager.DbContext.Vehicleanimationtypes.ToList(); VehicleanimationTypes = new ObservableCollection<Vehicleanimationtype>(types); } private void LoadParameters() { var parameters = _dbContextManager.DbContext.Vehicleanimationparameters.ToList(); AnimationParameters = new ObservableCollection<Vehicleanimationparameter>(parameters); } private void LoadParametersForType(Vehicleanimationtype type) { if (type != null) { var parameters = _dbContextManager.DbContext.Vehicleanimationparameters .Where(p => p.TypeId == type.Id) .ToList(); AnimationParameters = new ObservableCollection<Vehicleanimationparameter>(parameters); } } [RelayCommand] private void SaveType() { _dbContextManager.DbContext.SaveChanges(); LoadTypes(); } [RelayCommand] private void AddType() { var newType = new Vehicleanimationtype { TypeName = "New Type" }; VehicleanimationTypes.Add(newType); _dbContextManager.DbContext.Vehicleanimationtypes.Add(newType); } [RelayCommand] private void DeleteType() { if (SelectedType != null) { _dbContextManager.DbContext.Vehicleanimationtypes.Remove(SelectedType); VehicleanimationTypes.Remove(SelectedType); SelectedType = null; } } } 2. XAML: VehicleanimationtypeEditView.xaml xml CopyEdit <UserControl x:Class="YourNamespace.Views.VehicleanimationtypeEditView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:syncfusion="http://schemas.syncfusion.com/wpf" mc:Ignorable="d"> <DockPanel> <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="5"> <Button Content="Add Type" Command="{Binding AddTypeCommand}" Margin="5"/> <Button Content="Save" Command="{Binding SaveTypeCommand}" Margin="5"/> <Button Content="Delete" Command="{Binding DeleteTypeCommand}" Margin="5"/> </StackPanel> <syncfusion:SfDataGrid x:Name="TypeGrid" AutoGenerateColumns="False" ItemsSource="{Binding VehicleanimationTypes}" SelectedItem="{Binding SelectedType, Mode=TwoWay}" Margin="5"> <syncfusion:SfDataGrid.Columns> <syncfusion:GridTextColumn HeaderText="ID" MappingName="Id" IsReadOnly="True"/> <syncfusion:GridTextColumn HeaderText="Type Name" MappingName="TypeName"/> <syncfusion:GridTextColumn HeaderText="Description" MappingName="Description"/> </syncfusion:SfDataGrid.Columns> </syncfusion:SfDataGrid> <TextBlock Text="Presets for Selected Type:" Margin="5"/> <syncfusion:SfDataGrid x:Name="ParameterGrid" AutoGenerateColumns="False" ItemsSource="{Binding AnimationParameters}" Margin="5"> <syncfusion:SfDataGrid.Columns> <syncfusion:GridTextColumn HeaderText="ID" MappingName="Id" IsReadOnly="True"/> <syncfusion:GridNumericColumn HeaderText="Duration" MappingName="Duration" /> <syncfusion:GridCheckBoxColumn HeaderText="IsLoop" MappingName="IsLoop" /> <syncfusion:GridCheckBoxColumn HeaderText="IsNight" MappingName="IsNight" /> <syncfusion:GridCheckBoxColumn HeaderText="IsDay" MappingName="IsDay" /> <syncfusion:GridCheckBoxColumn HeaderText="HasSound" MappingName="HasSound" /> <syncfusion:GridCheckBoxColumn HeaderText="HasRepeat" MappingName="HasRepeat" /> </syncfusion:SfDataGrid.Columns> </syncfusion:SfDataGrid> </DockPanel> </UserControl> 3. Docking Manager Setup Load the VehicleanimationtypeEditViewModel into a docking manager using your existing infrastructure. For example: csharp CopyEdit var editView = new VehicleanimationtypeEditView { DataContext = new VehicleanimationtypeEditViewModel(dbContextManager) }; dockingManager.Children.Add(editView); Das ist fertig lauffaehiger code, nicht immer correct aber mit ein paar korrekturen spart man jede menge tipparbeit und bekommt den optimierten code. Meine produktivitaet mit dem AI ist faktor 10 wenn nicht mehr. Wenn das zuviel ist hier dann bitte sagen und ich loesche den post. gruss Gmd
  14. und hier der screenshot vom chat. gruss Gmd
  15. t seems my environment for processing the image has reset, and I don't have access to the necessary language data files for Tesseract. Let me fix this and retrieve the text for you. Here is the extracted text from the image in the requested format: plaintext CopyEdit ['Steuerung'] ['Maschinen-Abgase links'] ['Maschinen-Abgase rechts'] ['Maschinen-Lüfter'] ['Beleuchtung hinten'] ['0- aus'] ['Beleuchtung vorn'] ['Licht hinten'] ['0- aus'] ['Licht vorn'] ['0- aus'] ['O'] ['Antrieb einschalten'] Let me know if you need any corrections or further assistance! ich habe nur das image in meinen chat gepostet, habe einen batch fuer sowas gruss Gmd PS: und mit besseren instruktionen kann man dann auch nur die wirklich relevanten teile filtern .. bin dabai das alles zu implementieren, gib mit 2-3 tage
  16. ok, dann ist es meine wahrnehmung, ich habe kein "Siemens"-deutsch mehr seit vielen vielen jahren gelesen und erst recht kein IT-deutsch. So, wenn du das sagts dann ist das ja eine positive aussage, die ich dann danked annehme und lerne . Ich habe mein Lua Action Center jetzt mit den gleichen oberflaechen mechanismen in die main app integriert (Docking Panels) und mal ein bildschirm layout ausprobiert fuer die konstruktionsphase, nicht die betriebsphase. Ich will eine automatische fensteranordnung fuer verschiedene situation vorsehen, dann ist das weniger aufwand die fenster zu positionieren. Die fenster sind von oben links im uhrzeigersinn: Abschnitteditor, MbsAnlage in arbeit , GBS editor, Main App mit blockerkennung etc. , Zugdesigner und Lua Action Center. Das sind die hauptkomponenten mit ihren teilsichten. Jetzt geht es an die weitere verfeinerung der einzelnen funktionen und em runtime system fuer die scripts. Gruss Gmd
  17. Das erkennen und das pflegen ist aufwending, wenn man nicht externe hilfe in anspruch nimmt(damit meine ich die schnittstelle). Das Mbs kennt ja alle schalternamen fuer jedes objekt, die koennte Neo ja zugaenglich machen, bleibt aber die konsolidierung der namen zu einheitlichen funktionen. Da gibt es natuerlich viele funktionen die nicht fuer viele modelle vorhanden sind aber das kann man auch regeln. Also hier die beschreibung meines vogehens: Ich erzeuge meine objekt seitenbilder in meiner app auf aehnliche weise, daher kommt die idee. Meine App hat den katalog aller modelle und kann sie automatisch auf einer testanlage plazieren und einzel selektieren. Das fuehrt dazu dass die schalter im steuerungsfenster angezeigt werden. Das steuerungsfenster wird an einer bestimmten stelle des bildschirms positioniert und es wird ein screenshot gemacht und unter dem modellnamen abgespeichert. Das geht vollautomatisch. Dann lade ich die benannten files in badges in den AI und der macht fuer mich die listen. Hier ein einzelner dialog, das habe ich weiter automatisiert. Damit erhalte ich listen wie diese: ('DH 500 Ca') ['01 Dach ausblenden'] ['02 Spitzenlicht vorne'] ['03 Spitzenlicht hinten'] ['04 Schlusslicht vorne'] ['05 Schlusslicht hinten'] ['06 Führerstandsbeleuchtung'] ['07 Tür rechts'] ['08 Tür links'] ('MAK1202-1205') ['Kabinenbeleuchtung'] ['Lifter'] ['Rotlicht-hinten'] ['Rotlicht-vorne'] ['Spitzenlicht-hinten'] ['Spitzenlicht-vorne'] ('V200') ['Frontlicht_rot'] ['Frontlicht_weiss'] ['Kabinenbeleuchtung hinten'] ['Kabinenbeleuchtung vorne'] ['Maschinenbelüftung'] ['Maschinenraum_Beleuchtung'] ['Rücklicht_rot'] ['Rücklicht_weiss'] ['x- Info'] Die wird in die Db geladen. Das habe ich als vorbereitung fuer mein konzept getestet, habe die anforderungen und das konzept beschrieben und wollte anfangen zu programmieren, habe aber zuerst den post gemacht der dann in diesem thread gelandet ist. Der naechste schritt ist eine groessere schnittmenge an animationen zu ermitteln, die standardisierte liste zu erstellen und dann die animationen zuzuordnen. Das geschieht mit hilfe eines grids. Der AI erkennt die zusammenhaenge recht gut und liefert 90%-95% der zuordnungen. Das programm speichert diese und in dem grid kann man das kontrollieren,. Ich habe auch eine testfunktion geplant in der man ein objekt auswaehlt(in meinem katalog), das wird auf der anlage positioniert und die animationen werden automatisch durchgespielt. Alles das ist nur ueber die schnittstelle sinnvoll zu loesen und funktioniert nicht im Mbs direkt, dazu sind einfach nicht genuegend funktionen vorhanden und das uebersteigt auch die zielsetzung, da persistenz (datenspeicherung) gebraucht wird und wesentlich mehr funktionalitaet (user interface) als Lua breitstellt. Viele funktionen werden immer nur sinnvoll ueber externe programme machbar sein. Hier noch ein beispiel: Ich habe mich ein paar stunden mit fahrstrassen beschaeftigt, aber auch hier sind ausgefeilte steuerungen nur extern machbar. Fahrstrassen sind eine gute idee und ein sehr effizientes konzept fuer die EV schnell, komplexere strecken zu schalten, aber blocksicherung und effektive nutzung eines verzweigten netzes sind muehsam. Je laenger die fahrstrasse, um so mehr wird blockiert. Ich kann halt eine fahrstrasse bestehend aus 5 bloecken nicht von 3 zuegen befahren lassen. Eine komplexe steuerung ist auch hier nur extern moeglich, deshalb schreibe ich ja mein programm. Gruss Gmd
  18. Es gibt einen schleichweg den ich nutze {"jsonrpc": "2.0", "method": "layout.invokeUserEvent", "params": {"event": {"_class": "event", "name": "Benutzerdefiniert"}, "params":{"guid":"F38B36A9-E8A0-4943-B3D8-00D78185EDA9"}}, "id": 1} Man kann ein responder plugin bauen das auf eine variable reagiert und einen namen bekommt, ueber eine liste von namen und guids verfuegt und die guid in einer variablen ablegt, was ueber eine benutzerdefiniertes ereignis erfolgt. Die schnittstelle liefert die guids und das plugin kann die sammeln. So kann ich mir das vorstellen, ich mache das in meiner app fuer andere zwecke. Gruss Gmd
  19. Hallo nochmal heute, Ich habe ueber weitere Lua ansteuerung nachgedacht und bin dabi auf folgenden sachverhalt gestossen. Beispiel: habe einen zug mit Railjet 4xx Bmpz und einen anderen mit DE Bvmz 185 das sind 4 achs wagen mit reichlich animationen Will man nun in einem bahnhof die tueren oeffnen muss ich die animationen gemaess den einzelnen modellen ansteuern. Sie sind ja nicht standardisiert und ich finde das hoechst aufwendig. Ich habe einen weg gebaut die animationsmoeglichkeiten der einzelnen fahrzeuge automatisch zu ermitteln und erzeuge folgende listen. Beispiel fuer Loks: Da werden natuerlich auch verschiedene namen fuer die gleich sache verwendet ('DH 500 Ca') ['01 Dach ausblenden'] ['02 Spitzenlicht vorne'] ['03 Spitzenlicht hinten'] ['04 Schlusslicht vorne'] ['05 Schlusslicht hinten'] ['06 Führerstandsbeleuchtung'] ['07 Tür rechts'] ['08 Tür links'] ('MAK1202-1205') ['Kabinenbeleuchtung'] ['Lifter'] ['Rotlicht-hinten'] ['Rotlicht-vorne'] ['Spitzenlicht-hinten'] ['Spitzenlicht-vorne'] ('V200') ['Frontlicht_rot'] ['Frontlicht_weiss'] ['Kabinenbeleuchtung hinten'] ['Kabinenbeleuchtung vorne'] ['Maschinenbelüftung'] ['Maschinenraum_Beleuchtung'] ['Rücklicht_rot'] ['Rücklicht_weiss'] ['x- Info'] Ich moechte nun eine standardisierung der animationen durchfuehren und habe eine problembeschreibung und loesungsentwurf gemacht, allerdings in englisch. Bevor ich nun losprogrammiere hier die frage ob sich jemand schon mal gedanken gemacht hat das zu generalisiren. Waere ja auch was fuer das Mbs das zu standardisieren. Ich moechte also aktionen ausloesen wie: Front beleuchtung gemaess fahrtrichtung Tueren auf/zu in fahrtrichtung Tueren auf/zu in gegenrichtung Innenbeleuchtung an/aus usw. Zu jedem dieser aktionen koennen dann auch mehrere animationen gehoeren und sind fuer alle gleich. Wenn einzelne funktion nicht vorhanden sind dann passiert halt nichts. Hat jemand irgendetwas in dieser richting getan oder angedacht ? Gruss Gmd
  20. Nochmal Hi, anbei ein kleines benutzerhandbuch fuer mein Lua Action Center. Ich habe generell begonnen programmdokumentation mit dem AI zu machen. Das funktioniert gut, fuer code sowohl fuer handbuch, nicht perfect aber gut genug fuer mein schwaches gedaechtnis :).. Ich diktiere ein paar schlagworte mit spracheingabe und der AI macht daraus ein handbuch in jeder sprache, ich fuege ein paar bilder hinzu und done !. Was auch hilft sind die posts hier, ich mache sie teil der eingabe und sie bereichern die ausgabe. Das deutsch klingt etwas geschwollen, aber das liegt vielleciht an meiner wahrnehmung da ich eigentlich sehr wenig deutsch lese oder schreibe ausser hier. Gruss Gmd LuaActionCenter_Manual_Deutsch.pdf
  21. Hallo, Heute mal etwas ueber die schnittstelle. Habe mich eine weile damit beschaeftigt, allerdings noch nicht mit der neuen funktion von kuerzeln. Jedenfalls ist einiges an vorbereitung noetig die neue schnittstelle bequem zu bedienen. Mit der alten ist es ja einfach ein kommando per telnet abzusetzen, man tippt es einfach ein und das parsing war auch wesentlich einfacher. Die neue schnittstelle ist geschwaetzig (zu viele zeichen werden uebertragen fuer das was wirklich passiert), aber das ist halt die konsequenz wenn man Json strukturen baut, die auch noch lesbar sein sollen. Ich bin kein freund von json als protokoll format, ok zum abspeichern und laden von strukturdaten aber als schnittstellenprotokoll nicht geeignet, wenn man hohen durchsatz erreichen will. Nun ja das ist halt meine meinung. Da ich das nun mal nicht aendern kann und die alte schnittstelle ja irgendwann verschwinden soll, habe ich mir erst mal eine umgebung gebastelt mit der ich die schnittstelle etwas bequemer bedienen und testen kann, auch als vorbeitung aines laufzeitsystems fuer die ereignisauswertung und steuerung die dem AI als schnittstelle dienen soll. Hier ein fenster, das ich Lua Action Centre nenne. Es dient verschiedenen zwecken. Begonnen hat alles mit dem problem lua scripte ueber die schnittstelle zu schicken. Das ist muehsam, mit einem editor die nachricht erstellen, ok man kann copy und paste benutzen, und dann per telnet zu senden und als antwort einen nicht so aussagefaehigen parameter error zu bekommen. Das kann nerven .. Also erster schritt: Lua zu installieren und scripte zu erstellen mit syntax check, und wenn wir schon dabei sind mit komplettierungsfunktion fuer syntax , funktionen und objekte. Dann eine funktion das script zur uebertragung vorzubereiten ( kommentare entfernen und zue pruefen dass konventionen eingehalten werden), die nachricht zu erzeugen, zu schicken und die antwort anzuzeigen. Ausserdem zum test von steuerungen is es ja gut die protokollierung zu haben, hier natuerlich ueber die schnittstelle, und verdichtete darstellung oder original nachricht zu sehen und zu filtern nach event und auch nach objekt or mehrfach fuer mehrere objekte, und die gefunden nachrichtenteile auch hervorzuheben, zur leichteren erkennung. Das hilft alles beim testen von komplexeren steuerungen. Und weil das alles so gut geht dann noch eine bibliothek an scripten die dann fuer verschiedene zwecke verwendet werden koenen, zur laufzeit dynamisch parametrisiert werden, oder auch einfach in den editor geladen werden koennen um tiparbeit zu sparen. Damit ist erst mal das muehsal der schnittstelle drastisch reduziert und ich kann mich der tatsaechlichen steuerung widmen. Ich kann Lua innerhalb meines programms ablaufen lassen, d.h. die steuerscripte kann ich in Lua schreiben oder generieren, allerdings mit erweiterter funktionalitatet. Das Mbs implementiert funktionen fuer fahrstrassen, die ja auf einer "hoeheren" ebene ablaufen als ein signal or gleis event. Ich habe funktionen definiert die auf bloecke wirken und kann sie direct in Lua ansprechen. Dies wird durch einen preprozessor realisiert, der dann die entsprechende laufzeitfunktion aufruft, da das kommando nicht direkt von Lua in meiner app verarbeitet werden kann. Das gilt ja auch fuer alle funktionen die das Mbs betreffen und ueber die schnittstelle gesteuert werden. Dafuer sind die script snippets gemacht die dann vom laufzeitsystem verwendet werden um diese Lua funktionen auszufuehren, indem ein script ueber die schnittstelle geschickt wird und die antwort and Lua zurueckgegeben wird. Im grunde kann ich die gesamte event behandlung des Mbs damit nachbilden und in meiner app verwenden und ablaufen lassen, und natuerlich weitere komplexere funktionen anstossen. Ich habe noch keine entgueltiges bild vor augen, wie die aufteilung zwischen Lua im Mbs und Lua innerhalb der app aussehen wird. Wenn ich kann werde ich viele generische scripte im Mbs hinterlegen, die dann zur laufzeit verwendet werden. Dies sind allerdings nicht objekt oder evnet gebunden, sondern sind generisch, typgebunden und werden zur laufzeit parametriesiert. Gruesse und frohes schaffen. Gmd
  22. Neo, Danke fuer die schnelle antwort und bestaetigung. Gruss Gmd
  23. Neo, habe noch ein paar fragen zur behandlung von scripten die ueber die schnittstelle uebertragen werden. Bisher habe ich die erfahrung gemacht, dass die scripte sofort ausgefuehrt werden. Kann ich scripte an ereignissen festmachen ? Das folgende script is wirkungslos wenn das Fahrzeug nicht auf dem genannten gleis steht. local v = layout:getEntityByName('ABC') local g = layout:getEntityByName('haltegleis') if v:isLocatedOn(g) then v.currentSpeed = 0 end Ich meine, das ist ja zunaechst logisch, da hier keinerlei ereignis verknuepft ist wie in der EV und das MBS ja nicht alle scripte aktiviert sondern erst das ereignis und dann das script ausfuehrt. Ist folgende annahme richtig: Wenn ich ereignisgetriebene ablaeufe abbilden will, dann geht das nur ueber die ereignisnachrichten der schnittstelle. Alternative kann ich ja variableen versorgen (aus der EV) die ich mir scripten auslese, das ist eine art asynchrone kommunikation. Ich kann ueber die schnittstelle nur scripte absetzen die unmittelbare bedingungen prueft und/oder aktionen ausloest, ist das so richtig ? Was genau bedeutet die id am ende the Json message ? Waere toll wenn ich scripte laden koennte, die mit ereignissen oder modulen verknuepft sind, optimal natuerlich wenn ich die dann auch in der lokalen EV sehen koennte. Aber das ist wohl ein "pipe dream" oder ? Ich habe Lua fuer meine app implementiert und kann scripte erstellen, syntax checken und dann als Json message schicken. Habe eine bibliothek von templates mit denen ich die ereignisse, die ich von der schnittstelle bekomme nachbilde und dann schaltaktionen verschicke. Waere halt toll wenn ich die verarbeitung zwischen meinem steuerteil und der EV aufteilen koennte. Gruss Gmd Edit: Hier noch ein bildchen von meinem kleinen Lua tool
  24. Neo, Bin ein ganzes stueck weiter mit der neuen schnittstelle. Habe Lua in meinem programm installiert und kann beliebige scripte erzeugen, syntax checken und per message uebertragen und ausfuehren. Du hast gefragt was mir fehlt .. das wichtigste was ich vermisse ist ein rename Ich koennte das quellobjekt loeschen und ein neues and die stelle setzen, wenn ich einen namen angeben koennte. Derzeit sehe ich keine moeglichkeit per script ein objekt umzubenennen. Transformationen, selektion, etc. alles ok so wie ich das derzeit beurteilen kann. Es reduziert sich also zu einem "Umbenennen" {"jsonrpc": "2.0", "method": "editor.createEntity", "params": "F38B36A9-E8A0-4943-B3D8-00D78185EDA9", "id": 1} {"jsonrpc": "2.0", "method": "editor.deleteEntity", "params": {"_class": "entity", "name": "Gleis 1"}, "id": 1} Gruss Gmd Edit: Hatte gerade eine idee .. local v = getEntityByName("ABC").name v.name="EBC" das sollte ja gehen. Werde ich gleich mal testen. Edit2: ja das geht so .. also, das bedeutet dass ich alle meine funktionen mit der neuen schnittstelle erledigen kann. Waere trotzdem schoen hier einen namen angeben zu koennen {"jsonrpc": "2.0", "method": "editor.createEntity", "params": "F38B36A9-E8A0-4943-B3D8-00D78185EDA9", "id": 1} Es waere hilfreich ist aber nicht entscheidend, objekte auf ebenen zu legen oder zwischen ebenen umzusortieren. Ist einfach hilfreich automatisiert groessere anlagen zu strukturieren und dies struktur dann auch lokal im MBS zur verfuegung zu haben. Ok, das wars, damit ist dieses kapitel ziemlich abgeschlossen.
  25. tue was du moechtest mit den dateien, kein problem. Das urheberrecht hat Neo fuer den inhalt sowieso. Erstellt mit saxon-he java command line app. Download here Der AI kann dir helfen das einzurichten, wenn du dich ueberwinden kannst. Den frame fuer das XSLT file hat der AI gemacht die styles und tabelle etc. habe ich ergaenzt. Wie du sagst, geschmacksache. Gruss Gmd
×
×
  • Neu erstellen...