Timer



  • Klar kann ich Dir einen Timer empfehlen:

    UINT SetTimer(

    HWND hWnd, // handle of window for timer messages
    UINT nIDEvent, // timer identifier
    UINT uElapse, // time-out value
    TIMERPROC lpTimerFunc // address of timer procedure
    );

    erhältlich im Helpfile.

    Ich verstehe aber Dein Problem nicht. Wenn ich 128 Dinger überwachen will, sende
    ich in einer Schleife an Alle etwas ab und warte auf die Ergebnisse. Laß die
    Netzwerkkarte / Schnittstelle einen Interrupt auslösen der den Status dann
    aktualisiert - das wäre bestimmt einfacher.

    Die Windows-Timer kannst Du dabei vergessen, ich glaube da gibt's eh nur 3 ...



  • Scheppertreiber schrieb:

    Die Windows-Timer kannst Du dabei vergessen

    präzises timing ist schon immer ein sorgenkind im hardware und softwaredesign gewesen. ich würde dabei aber nicht so weit gehen, und dies als "das kannst du vergessen" abstempeln 🙂



  • Leider doch. Spezioell die 86er-Prozessoren brauchen da ewig, dann hängt noch der
    ganze Windows-Overhead hintendran. In diesem Fall würde ich das nicht so aufziehen.

    Es gibt nunmal bei Windows keine garantierten Antwortzeiten (dafür wurde es auch
    nicht gemacht, Linux nebenbei auch nicht).

    Aber: braucht er das überhaupt ? Wenn's das OS/die Hardware nicht hergit würde
    ich das anders aufziehen (s.o.).
    Gruß Joe.



  • Hallo,

    das Node Guarding das ich implementieren muss, hat eben diese Zeitanforderungen. Ich muss jeden der 0...127 Netzwerknoten im Netz abpollen, ob die Knoten noch verfügbar sind und diese müssen innerhalb eines Zeitintervalls (Life Time) antworten. Zudem erwarten die Netzwerkknoten dass ich sie ebenfalls innerhalb der Life Time abpolle, damit die sicher gehen können, das ich nicht abgestürzt bin.

    Bei dieser Zeitanforderung kann ich sicherlich noch etwas Genauigkeit herausnehmen, wenn es auf die MIllisekunde genau nicht zu realiseren ist.

    Ich habe mir überlegt dass der Nutzer, der den Node Guarding Service verwendet die Guard Time nicht als 16 bit Wert in Millisekunden angeben kann, sondern z. B. als 12 bit-Wert. Ich müsste den Wert dann immer mit 16 multiplizieren. Dann wäre der Wert der Guard Time immer ein Vielfaches von 16 Millisekunden.

    Gruß



  • Also, wenn ich das richtig verstanden habe geht es um eine permanente
    Verbindungserhaltung und -prüfung. Jedes Teil schaut dauern nach ob alle
    anderen noch leben.

    zB Teil A sendet an B "Huhu" und erwartet innerhalb einer festgelegten Zeit
    eine Antwort. Kommt die nicht gibt's eine Fehlermeldung.

    Dein Programm schickt dabei an alle eine Aufforderung, die Teile immer nur
    eine an Dein Programm.

    Das Senden der Aufforderung ist keinn Problem, einfach senden und die Zeit
    merken. Die Antwortzeit sollte dann ein IRQ in diese Tabelle schreiben. Ein
    parallel laufendes Programm schaut da nach ob ein timeout überschritten wurde
    und mault ggfls.

    Beim Empfang in einem IRQ würde ich direkt ein Echo absetzen.

    In C geht das relativ einfach, ich habe diese Konstruktion mal in einem RS485
    Netz eingesetzt. Einfach in die Tastatureingabe geklemmt und gut ist es.



  • Hallo,

    du bist nah drann.

    Die Software due ich schreiben soll ein Hardware-Steuergerät das über den CAN-Bus mit anderen Steuergeräten kommuniziert per Software simulieren.

    Dabei stellt eine Instanz der Software ein Steuergerät dar.

    Ein Hardware-Steuergerät (hier eine Instanz der Software) kann entweder die Rolle des Masters oder die eines Slaves annehmen und kann einen bestimmten Zustand besitzen. Dabei gibt es vier verschiedene Zustände und max 128 Steuergeräte, wober nur einer der Master sein kann.

    Der Master sendet jetzt periodisch (Periode = Guard Time), einen Request über den CAN-Bus an einen Slave. Der CAN-Bus wird durch ein spezielles USB-Device (CANcase XL von Vector).

    Jeder Slave der ein Request vom Master erhält muss einen Resonse an den Master senden. Diese Response enthält unter anderem den Status des Slaves. Dieser muss mit dem vom Master erwarteten Zustand übereinstimmen:

    Folgende Fehler können auftreten:

    Master:

    Slave antwortet nicht innerhalb Life Time
    Slave meldet falschen Zustand

    Slave

    Master schickt keine Request innerhalb der Life Time.

    Hmm mit IRQ kenn 9ich mich gar nicht so gut aus. Zum Senden und Empfangen muss ich die Treiber Bibliotheke des oben genannten USB-Geräts verwenden. Über eine empfangene Nachricht werde ich z. B. über einen Handle informiert.

    Gruß



  • hehehe ...

    Genau diesen Kram wollte ich ins Mopped einbauen weil's mich halt interessiert.
    Wären diese CAN-Dinger nicht so teuer hätte ich das schon drin.

    Einfach eine geile Vorstellung: CAN-Bus in der Dnepr, alles auf einen kleinen
    Webserver und per Händi live von der linken Spur *gröööööl* *prost* !

    Im Ernst: Im CAN-Protokoll müßte die Verbindungsunterhaltung drinnen sein, sonst
    wäre der Mist nicht nur teuer sondern unbrauchbar.



  • Hallo,

    welchen Header benötige ich denn für den von dir genannten Timer ? Ist das <windows.h> ?

    Gruß



  • grep SetTimer *.h



  • also jetzt bin ich irgendwie überfordert 🙂 Wenn ich so Linux Kommandos sehe kommen bei mir ganz böse Erinnerungen hoch ... Könntest du mir bitte den Namen der Datei nennen ? 🙂 Vielen Dank 🙂



  • grep.exe

    Es geht auch die "Suche und finde was"-Funktion des Windows Explorers.
    Mannomann, das ist doch nun wirklich einfach. Ich arbeite auch nur mit
    Windows. grep ist bei jedem C-Compiler dabei.





  • Scheppertreiber schrieb:

    grep.exe

    Es geht auch die "Suche und finde was"-Funktion des Windows Explorers.
    Mannomann, das ist doch nun wirklich einfach. Ich arbeite auch nur mit
    Windows. grep ist bei jedem C-Compiler dabei.

    Wir sind hier bei Windows, nicht in der Frickelküche, also lass deine Tools von 1960 in der Hosentasche stecken!



  • Was bedeutet eigentlich "selbstherrlicher Dummkopf" auf Deutsch ?
    Oder was willst Du damit sagen ?



  • Scheppertreiber schrieb:

    grep SetTimer *.h

    lol wie dumm is der Vorschlag bitte?



  • Scheppertreiber schrieb:

    Was bedeutet eigentlich "selbstherrlicher Dummkopf" auf Deutsch ?
    Oder was willst Du damit sagen ?

    Lasse mich raten, du trägst Hosenträger und hast einen Vollbart und ein System V T-Shirt an. Sprich der durchschnittliche Unix Nerd. Aber nun hören wir doch auf hier den Thread zuzuspammen.



  • Als nachdenkliches Indiviuum rätsele ich noch über "Frickelküche". Was könnte
    der vereehrte Herr Vorposter damit meinen ?



  • berniesbutt schrieb:

    Scheppertreiber schrieb:

    Was bedeutet eigentlich "selbstherrlicher Dummkopf" auf Deutsch ?
    Oder was willst Du damit sagen ?

    Lasse mich raten, du trägst Hosenträger und hast einen Vollbart und ein System V T-Shirt an. Sprich der durchschnittliche Unix Nerd. Aber nun hören wir doch auf hier den Thread zuzuspammen.

    Hi Bernds Hintern,

    Vollbart - ei logo. Ich habe ein normales T-Shirt an, da steht drauf "Ich fahre
    keine BMW". Ich habe noch nie ein System V in den Fingern gehabt und schlage mich
    mit größerem Kram unter Windows herum. Ein Nerd bin ich auch nicht. Ich muß ja
    von meinen Programmen leben.

    Ich habe mich heute hier eingeloggt um mal mit anderen C-Programmierern sachen
    auszutauschen und auch mal interessante Leute kennzulernen. Schaunmermal.

    Wqas soll eigentlich diese OS-basherei ? Bringt nichts. C ist C. Das OS ist egal,
    wenn's zickt schreibt man halt eins. Ist nicht so schwer, dafür gibt es C.



  • Interessante Leute gibts hier nicht, nur Witzfiguren.



  • Uns beide eingeschlossen ? *prost*


Anmelden zum Antworten