Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Multiplex-Analogabfrage und hwcom-Ausgabe Kategorie: Programmierung (von Tom - 5.11.2003 19:15)
Als Antwort auf Re: Multiplex-Analogabfrage und hwcom-Ausgabe von Felix W. - 5.11.2003 17:28

Hallo Felix,

um auf die Toleranz näher einzugehen müsste ich schon Deine Wertebereiche kennen.

Aber Du kannst das ganze prozentual oder oder mit festen Werten machen z.B. um bei
meinem Beispiel zu bleiben.

Original:       if Analogwert1 !== Analogwert1_1  
                  { String zusammenbasteln und senden };
 
prozentual:   if  (Analogwert1*0.9 <= Analogwert1_1)  or (Analogwert1*1.1 >= Analogwert1_1)
                    { String zusammenbasteln und senden };
Toleranz +/- 10%

oder feste Werte: if  (Analogwert1-20 <= Analogwert1_1)  or (Analogwert1+20 >= Analogwert1_1)
                           { String zusammenbasteln und senden };

der Syntax wird zwar nicht ganz stimmen aber es ging auch nur ums Prinzip.

mfg TOM

> Hallo Tom,
>
> Danke erstmal für die Antwort!
>
> Ã?hm...
>
> Hab leider noch keine brauchbare Idee für ne Toleranz gefunden. Wie kann so was aussehen?
>
> Danke!!
>
> Felix
>
>
>
> > Hallo Felix,
> >
> > ich denke Du muÃ?t erst mal rausfinden welcher Teil Deines Programms zu langsam ist.
> > So wie ich Deiner Beschreibung entnehme gliedert sich das ganz in 4 Teile:
> >
> > 1. einlesen der Analogwerte
> > 2. verknüpfen mit den Stringvariablen
> > 3. vergleichen auf Unterschiede
> > 4. senden der geänderten Daten
> >
> > mit der Funktion system.timer() kann man hier sehr viel herausfinden:
> > z.b.
> >
> > Startzeit=system.timer();
> >
> > //code
> >
> > Endezeit=system.timer()-Startzeit;
> >
> > Die Endezeit ist dann die Laufzeit in ms.
> >
> > Du schreibst, das Du die Strings auf Unterschiede durchsuchst. Ich denke das ist sehr
> > Zeitaufwendig. Wie wäre den folgende Idee:
> >
> > Analogwert1= ... wo immer du den Wert herholst
> >
> >   if Analogwert1 !== Analogwert1_1   { String zusammenbasteln und senden };
> >
> >   Analogwert1_1=Analogwert1;
> >
> > und so weiter für alle Werte.
> >
> > Bei dieser If Anfrage kannst Du dann auch noch eine Toleranz einbauen.
> >
> > Ich denke das geht erheblich flotter als Strings zu vergleichen.
> >
> > mfg Tom
> >  
> >
> >
> >
> >
> >
> > > Hallo allerseits,
> > >
> > > habe ein Programm geschrieben, das in einem Thread ständig drei Analogmultiplexer abfragt und diese
> > > 24 Analogwerte auf einer Arrayvariablen ablegt. Dann werden diese Werte zum einen (von Potis stammend)
> > > mit einer Stringvariable verknüpft (z.B. "KOMMANDO:"+Wert in HEX) und zum anderen (von 2- oder mehrfach-
> > > Schaltern stammend)  direkt in einen String "übersetzt" (z.B. Wert < 300 = "KOMMANDO:A", Wert > 800 =
> > > "KOMMANDO:C").
> > > Im Hauptthread werden in einer Schleife diese Strings mit weiteren Steuerzeichen versehen über hwcom
> > > verschickt. Um den Datenaufwand zu verringern, werden die zu sendenden Strings mit denen des vorigen
> > > Durchlaufs verglichen und nur bei Unterschied tatsächlich verschickt.
> > >
> > > Problem: Das ganze ist ziemlich langsam!  Macht es Sinn, zum Beschleunigen des Ganzen die Analog-
> > > werte zu vergleichen statt den Strings und die Umwandlung in Strings nur bei Unterschied im Zahlenwert zu
> > > vollziehen? Wie kann man die Analog-Zahlenwerte "vereinfachen", um nicht bei jeder winzigen Spannungs-
> > > schwankung (die ja bei den Schalterwerten uninteressant ist) einen "Unterschied" zu haben?
> > >
> > > Puh, ein Haufen Material! Wenn nötig, kann ich hier auch noch Programmauszüge posten, wollt es aber
> > > erst mal so erklären!
> > >
> > > Danke im Vorraus!
> > >
> > > Felix W




    Antwort schreiben


Antworten: