Typisierte DataSets: EDIT am 27.08.: neue Zusammenfassung

  • VB.NET

Es gibt 61 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Typisierte DataSets: EDIT am 27.08.: neue Zusammenfassung

    Hallo,

    ich habe das Tutorial zu DataSet von EDR durchgelesen, aber ich habe eine konkrete Frage zu meinen Datensätzen: wie sind da in diesem konkreten Fall die Relationen?

    Ich habe einen Datensatz für Empfangskanäle: da gibt es eine KanalID, paar Eigenschaften und eine KanalID vom Sendekanal, die damit verknüpft sein kann (wenn da was eingestellt ist, soll, wenn auf diesem Empfangskanal was ankommt, auf dem zugehörigen Sendekanal was gesendet werden). Genau so gibt es aber umgekehrt im Datensatz für Sendekanäle eine KanalID, paar Eigenschaften udn eine KanalID vom Empfängerkanal, die damit verknüpft werden kann (wenn da was eingestellt ist, soll, wenn auf diesem Sendekanal was gesendet wird, gleichzeitig auf dem zugehörigen Empfangskanal etwas ausgeführt werden).

    Ist es eine 1:1 Relation, die laut Beiträgen hier im Forum bei DataSet nicht implementiert ist?

    Danke.

    LG

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „sonne75“ ()

    ist ein SendeKanal mit genau einem EmpfangsKanal verknüpft?

    Dann isses 1:1 und geht nicht.

    Was aber vlt. geht, dass man die beiden zusammenschmeißt, also nur eine Tabelle erstellt, die Sender und Empfänger gleichzeitig repräsentiert, also gewissermaßen einen VerbindungsPunkt, oder man könnte von Client sprechen.
    Ja, jeweils mit einem.

    Das Problem ist, dass Sende- und Empfangskanäle unterschiedliche Eigenschaften haben. Ich muss aber schauen, ob man sie vielleicht doch nicht in einem vereinen kann und in einer Boolean-Eigenschaft setzen, welcher Kanal es gerade ist.

    Was meinst du mit "Clienten"?
    Also, es ist eine Konfigurationssoftware (eine andere schon als letztes Mal).
    Ein Kunde konfiguriert ein Gerät, welcher z.B. 32 Empfangskanäle hat und 8 Sendekanäle (später werden es wohl auch 32). Man kann sie untereinander verknüpfen: entweder einem Empfangskanal einen Sendekanal hinzufügen, der was senden soll, wenn auf dem Empfangskanal was reinkommt; oder einem Sendekanal einen Empfangskanal, dann soll der Empfangskanal in einen bestimmten Modus versetzt werden (man schickt einfach Befehl über RS485 zum Gerät), wenn der Sendekanal sendet.

    Mir ist es jetzt aufgefallen, dass sie fast identische Eigenschaften haben (es kommen nur 14 DataBytes statt jetzt 4).

    EDIT: Screenshots rausgenommen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „sonne75“ ()

    also es gibt geräte,

    ein gerät hat mehrere empfangskanäle
    ein gerät hat mehrere Senderkanäle

    1 EmpfangKanal kannman mit eim senderKanal verknüpfen, und diese Verknüpfung hat eine Richtung (boolean)

    daraus ergibt sich scheint mir ein Datenmodell mit den Tabellen Geraet, Input, Output, InOutLink

    Und den Relationen
    Geraet->Input
    Geraet->Output
    Input->InOutLink<-Output

    ErfinderDesRades schrieb:

    1 EmpfangKanal kannman mit eim senderKanal verknüpfen, und diese Verknüpfung hat eine Richtung (boolean)

    Es gibt 2 Richtungen, nur wenn ein Empfangskanal mit einem Senderkanal verknüpft ist, heisst es nicht, dass es auch in die umgekehrte Richtung geht, die Verbindungen sind jeweils unidirektional.

    ErfinderDesRades schrieb:

    daraus ergibt sich scheint mir ein Datenmodell mit den Tabellen Geraet, Input, Output, InOutLink

    Und den Relationen
    Geraet->Input
    Geraet->Output
    Input->InOutLink<-Output


    Könntest du mir ein Beispiel dafür geben, ich kann gerade nicht viel damit anfangen. :( Vor allem, was dann im "Gerät" steht.
    dassis nur ein grob entwurf. Mach die Tabellen erstmal so hin, und mach die DataRelationen entsprechend.

    Dir sind glaub genügend Tutorials und Beispiele bekannt, wie man Tabellen anlegt, und eine DataRelation dazwischen.

    Was sonst noch in Geraet steht weiß ich doch nicht - das weißt du.
    Auch die weiteren Eigenschaften der Kanäle sind mir nicht bekannt (und interessieren mich auch nicht soo).

    Und InOutLink hat eine Richtung - habichschon gesagt - mach mw. eine Spalte "ToSender" As Boolean, und wenn die True ist, ist die Richtung in Richtung sender, und andernfalls andersrum.

    Mach die Tabellen erstmal hin, orientiere dich am besten an Benamungs-Schema für DB-Entitäten, und achte auch drauf, Nullable Spalten möglichst zu vermeiden (stattdessen immer Defaultwerte setzen).
    Danke schön, habe ich es jetzt gefunden.
    Ich habe jetzt noch mal mit dem Kollegen gesprochen, es ist wohl viel einfacher als ich dachte. Ich muss die interne Verknüpfung gar nicht vornehmen, sondern diese nur als Info betrachten, die ich dann später an das Gerät übermittle.
    Ich kann also einfach eine übergeordnete Tabelle "Gerät" haben und 4 untergeordnete (sind noch 2 plötzlich dazu gekommen, typisch mittelständisches Unternehmen, die Anforderungen wechseln sich ständig) Tabellen, jeweils über ID verbunden.

    Ich werde mich jetzt einarbeiten und durchprobieren, melde mich dann.

    Danke schön schon mal!!
    Leider komme ich nicht mehr weiter.

    Es gibt nur ein einziges Gerät (Device) (während das Programm läuft), es hat bestimmte (einmalige) Eigenschaften. Das Device hat 32 Empfangskanäle, 32 Senderkanäle und 32 Stellantriebskanäle. Zu jedem dieser Kanäle kann (muss nicht) je ein Sensor, Empfänger oder Transceiver zugeordnet werden.

    Ich habe jetzt die zugehörigen Eigenschaften in einem DataSet abgebildet, leider weiß ich nicht, wie ich jetzt die Kanäle dem Device zuordne, denn es ist ein einziger Datensatz für ein Device vorhanden und da sollen alle Kanäle drin sein...

    Und wie die Relation von den jeweiligen Geräten (Sensoren, Empfängern und Transceivern) zu den Kanälen ist - denn einem Kanal kann ein Gerät zugeordnet werden, aber während des Betriebes (sprich, es wird jeweils ein neuer Datensatz für ein Gerät angelegt, die Datensätze für alle Kanäle sind schon vorhanden).

    EDIT: Habe es überarbeitet, siehe unten

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sonne75“ ()

    Ich konnte es nochmal auftrennen:

    Zu jedem Gerät (Sensor, Empfänger oder Transceiver) gehört ein Profil, welches in einer Textdatei abgelegt ist (von einer externen Firma festgelegt). Da stehen dann bestimmte Parameter drin, unter anderem was die einzelne DatenBytes (DB) bedeuten (in jedem Profill können sie etwas anderes bedeuten, z.B. Temperatur, Feuchtigkeit usw), deswegen noch die Bezeichnung.

    Hier sind das neue Screenshot und das neue DataSet:




    EDIT: Mir fällt auf, die DB kann man auch raustrennen, werde mich gleich dran machen.
    Dateien
    • DataSet1.zip

      (3,03 kB, 138 mal heruntergeladen, zuletzt: )
    Leider wird es immer komplizierter. Das Profil ist sehr variabel aufgebaut. Ausser den ersten 3 Bytes (RORG, Func und Type) gibt es nur Gemeinsamkeiten, dass es Data Bytes gibt. Aber was sie bedeuten, ist sehr unterschiedlich.
    Es kann so sein:

    oder so:


    Es gibt also unterschiedliche Funktionen, die Bereiche, in denen die Daten dieser Funktionen stehen, können unterschiedlich sein. Und noch dazu gibt es ab und zu eine Funktion, die mit einer anderen verknüpft ist (Availability von einer Funktion). Wie kann man das denn in einem Datenmodell abbilden? Denn mein muss das alles während der Ausführung wissen, um die Datenbytes mit sinnvollen Werten (schon umgerechnet, und da muss dann stehen, dass es Temperatur usw ist) zu füllen?

    Mir raucht gerade der Kopf. ;(
    Ich kann deinen Ausführungen nicht folgen
    Es gibt nur ein einziges Gerät
    ... denn einem Kanal kann ein Gerät zugeordnet werden
    ich denk, es gibt nur ein Gerät?

    , aber während des Betriebes (sprich, es wird jeweils ein neuer Datensatz für ein Gerät angelegt, die Datensätze für alle Kanäle sind schon vorhanden).
    ergibt garkein Sinn

    sonne75 schrieb:

    Es gibt nur ein einziges Gerät (Device)


    Es gibt ein Hauptgerät "Device" (Gateway, der diese Sende- und Empfangskanäle hat), bei dem können sich andere Geräte (Sensoren, Empfänger ...) anmelden, einer pro Kanal. Jedes "Untergerät" besitzt ein Profil, der unterschiedliche Funktionen beinhalten kann.
    Jo, klare Benamung ist eins der vielen As und Os, dies inne Programmierung gibt.
    Also ich nenne dein Hauptgerät mal Gateway, und die Geräte dann Device, ok?

    Und wegen der Namensverwirrung blicke ich nicht, wofür nu ein Profil zuständig ist: für den Gateway oder für die Devices?
    Und bei dir klingts, als seien die Profile ühaupt nicht einheitlich, also dass man da ühaupt kein Datenmodell draus abstrahieren kann, wenn da jeder Hersteller iein anneres Zeugs inne Doku schreibt.

    Aber vlt. sind sie doch in dem Sinne einheitlich, dass sie Namen für die Channels festlegen?
    Ok, die Geräte sind Device, sie können Sensoren, Empfänger und Transceiver sein (je nach Kanal).

    Die Profile sind im Device hinterlegt, sie bestimmen, was für ein Typ das ist (z.B. Temperatursensor von 0 bis 40 Grad, oder von 10 bis 30 Grad, oder ein Lichtsensor, oder ein Temperatur und Feuchtigkeitssensor, in dem Fall gibt es an einer Stelle in den DataBytes noch Information, ob Temperatur tatsächlich übertragen wird oder nur Feuchtigkeit) und dann wird im Profil noch beschrieben, an welchen Stellen in den Datenbytes diese Informationen (Wert und ob eine Funktion vorhanden ist) stehen.

    Diese Profilbeschreibungsdatei (es gibt einen Haufen möglicher Profile, in einer kompliziert verschachtelten XML-Datei, ich werde nur die relevanten Informationen in eine andere Datei zusammenstellen) werden von extern geliefert, da gibt es also nichts daran zu verändern.

    2 Beispiele habe ich im Beitrag 14 angehängt. Es kann aber noch passieren, dass es mehr als 4 Datenbytes stehen, es können maximal 14 sein.

    EDIT:
    Und bei dir klingts, als seien die Profile ühaupt nicht einheitlich, also dass man da ühaupt kein Datenmodell draus abstrahieren kann, wenn da jeder Hersteller iein anneres Zeugs inne Doku schreibt.

    Aber vlt. sind sie doch in dem Sinne einheitlich, dass sie Namen für die Channels festlegen?


    Die Profilstruktur ist von einer Alliance festgelegt, bei der viele Hersteller beteiligt sind.

    Einheitlich ist, dass es diese ersten 3 Kennungsbytes gibt (ORG, FUNC, TYPE) und dass es Datenbytes gibt, in den die Informationen drin stehen. Welche Informationen und wo sie verteilt sind, steht je für ein Profil in so einer Tabelle.
    Ja, klar, ich habe ja schon eine Profil-Tabelle angelegt (nur nicht vollständig, weil Funktionen noch nicht drin sind; sollte man vielleicht eine Funktion-Tabelle anlegen?), ich brauche jeweils noch den "Title" von diesem Byte (da steht z.B. "Temperatursensor"), zur Anzeige dem Kunden.

    Mehrere Geräte können dasselbe Profil haben, es gibt z.B. viele Temperatursensoren im gleichen Bereich. Sie unterscheiden sich anhand der "SensorID" (ist bei mir in je einer Tabelle für Geräte dabei), sie besteht aus 4 Byte.

    EDIT: So, habe gesehen, dass "SensorID" missverständlich ist, die Geräte unterscheiden sich anhand "SensorIDLong".

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „sonne75“ ()