
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Dieter, Eine einzelne Impulsbreite kannst Du prinzipiell messen, indem Du in einer Schleife solange eine Variable hochzählst, wie das Signal anliegt. Da bekommst Du mit der M-Unit 2 Auflösungen weit besser als eine Millisekunde - ob das reicht und genau genug ist, mußt Du probieren. An Deinem Programm ist mir aufgefallen, daß sich die Variablen TEMPVAL und Q evtl. den Speicher teilen, und daß Du beim Errechnen des höherwertigen Bytes (x) und des niederwertigen Bytes (y) verschiedene Formeln einsetzt (ich weiß nicht ob die letzte dieser Art korrekt ist gegenüber den anderen). Das kann man aber auch einfacher erreichen, indem man mit Absicht den gleichen Speicherplatz verwendet (außerdem solltest Du bei allen Variablen dahinterschreiben, wo sie gespeichert werden): define myWord word[1] define hiByte byte[1] define loByte byte[2] wenn Du myWord einen Wert zuweist, dann enthalten hiByte und loByte automatisch die entsprechenden Anteile. Gruß Carsten > > Hallo > Ich habe ein Problem mit meiner M2 Unit > Ich möchte mit einer M2 Unit ein Tachosignal und ein Drehzahlsignal in Zahlenwerte umsetzen > Als Pegelwandler (auf TTL) werden zwei Optokoppler benutzt > Die M Unit zählt die Impuklse Freq1 und Freq2 werden Gestartet wobei der Drehzahlmesser (Frq2) > Zweimal gezählt wird und der Tacho (Frq1) nur einmal > Die Werte werden dann in zwei Speicher geladen für jeden Kanal 16 Bit > Ein anderer Rechner liest die Speicher aus > > > 'Frquenzmesser > > define Q word > define D byte > define T byte > define S byte > define H byte > define E byte > define X byte > define Y byte > define Z byte > define L byte > define M byte > define DATA byte > define TEMPVAL byte[1] > define CA word 'Ergebniss Counter 1 > define CB word 'Ergebniss Counter 2 > define BUS BYTEPORT[1] > > define LE1 port[09] 'Lash 1 Counter 1 > define LE2 port[10] 'Lach 2 > define LE3 port[11] 'Lach 3 Counter 2 > define LE4 port[12] 'Lach 4 > define BYSI port[16] 'Redy Signal > > BEEP 400,25,10 > BEEP 400,25,10 > > #INIT > '--UMLEITUNG DER PRINT-FUNKTION AUF DAS CONFIG-MODULE - > print"#ON_CONFIG#"; 'UMGELEITET > get TEMPVAL 'den aktuellen Wert lesen > put (TEMPVAL or &B0000110) 'Bits setzten und zurück schreiben > print"#OFF#"; 'Umleitung abschalten > > LE1=0 : LE2=0 : LE3=0 : LE4=0 > BUS=0 : BYSI=0 > PULSE LE1 : PULSE LE2 > PULSE LE3 : PULSE LE4 > > PUT 12 > PRINT "Fequenzmessung:" > PRINT "V 26,11,2004" > > '-------------------------------------------------------------------------------------------------- > > #LOOP > 'Start Counter 1 u 2 > CA=0 : CB=0 > FREQ1=0 : FREQ2=0 > TIMER=0 > BYSI=1 > WAIT TIMER=25 '25 > CB=FREQ2 > if FREQ1=9000 then FREQ1=0 > if FREQ2=9000 then FREQ2=0 > ' > X=(CB / 256) : Y=CB -(X*256) > ' > BUS=X : PULSE LE3 > BUS=Y : PULSE LE4 > ' > BYSI=0 > > ' > 'Start Cunter 2 > CB=0 > FREQ2=0 > TIMER=0 > BYSI=1 > WAIT TIMER=25 > CB=FREQ2 : CA=FREQ1 > if FREQ1=9000 then FREQ1=0 > if FREQ2=9000 then FREQ2=0 > ' > X=CB / 256 : Y=CB - (X*256) > ' > BUS=X : PULSE LE3 > BUS=Y : PULSE LE4 > ' > X=CA / 256 : Y=CA - (X/256) > ' > BUS=X : PULSE LE1 > BUS=Y : PULSE LE2 > ' > BYSI=0 > > GOTO LOOP > > END > > '------------------------------------------------------------------------------------------------ > > #CONV > T=0 : H=0 : Z=0 : E=0 > T=Q/1000 > H=(Q-(T*1000))/100 > Z=(Q-(T*1000)-(H*100))/10 > E=(Q-(T*1000)-(H*100)-(Z*10)) > RETURN > > Die Sache läuft ganz gut der Drehzahlmesser läuft stabiel > Der Tacho fängt bei ca 50 Km/h an zu springen ( bei gleicher Geschwindigkeit) > Die Eingangssignale sind sauber ein parallel angesclossener Travlelpilot zeigt eine kontionierliche > Geschwindigkeit an > Schlisst man ein Signalgenerator an bleibt die Anzeige stabiel > > > Da beim Geschwindikkeitssignal nur ein sehr niedrige Frequenz anliegt < 100 Hz > sollte man vieleicht nur die Signalbreite der einzelnen Impulse messen > Kann das die M2 Unit > Oder kann man das Programm verbessern > > Dieter Kalkofen > > > > |
| Antwort schreiben |