<b>Problem :</b> Spontant skulle jag gjort såhär, men det finns säkert bättre sätt: Bra du är inne på samma tankegångar som jag. Jag tycker följande är mer intuitivt: mmm... Niklas den är nog fae.... optimal Tack. Tack för Era tips. Så här blev det (Delphi kod Sampler.dll)Hur skulle du göra ?
Jag har ett Delphi/Vb prog som samplar inkommande pulser från en sensor.
Pulserna kommer linjärt i propotion till ett flöde, max 2000 Hz.
Eftersom olika processorer kommer att ge olika svar på antal så vill jag följande.
Det kommer en 1/hög. Nästa mätning fortfarande hög, samma puls.
den vill jag inte räkna. Nästa också hög , samma puls den vill jag inte räkna.Osv.
Dvs jag vill inte räkna den nya höga förrän det har kommit en 0/låg.
Osv samma som ovan. Detta gör jag under 1 sek . Kör med GetTickCount.
Har själv gjort en krånglig <b>If</b> lösning men tycker inte den är optimal.
Hur skulle Ni principtänka och lösa ? Sv: Hur skulle du göra ?
Dim Värde As Boolean
Dim SenasteVärde As Boolean
Dim Antal As Integer
While villkor
Värde = LäsVärde
If Värde AND NOT SenasteVärde Then
Antal = Antal + 1
SenasteVärde = True
End If
SenasteVärde = Värde
Wend
/JohanSv:Hur skulle du göra ?
Dvs hitta en bra binär AND OR eller som du skriver AND NOT lösning.Sv: Hur skulle du göra ?
Value = getValue
Do While ...
NewValue = getValue
Do While NewValue = Value
Loop
count = count+1
Loop
getValue är en funktion.Sv:Hur skulle du göra ?
Skall prova bägge i min Delphi DLL som lämnar till VB det du kallar för getValue.
PelleSoft är Guld
<b>Edit:</b> Nääää jag gör ju hela jobbet i Delphi DLL:en och ger VB korrekt antal pulser som kom under 1 sek.
<b>Brasklapp:</b>
Som vanligt en DLL skall vara <b>"standalone"</b> garvar åt all som gör DLL:er som i sin tur
behöver andra DLL:er för att klara sitt jobb. Delphi gör jobbet GULDSv: Hur skulle du göra ?
Som Ni ser är det mycket lätt att läsa om man kan VB
<code>
'Funktionen läser adress 889 pinne 13 och räknar antal pulser under en sekund
' GetPuls returnerar en Long(Integer i Delphi) antal höga läge på signalen.
Function GetPuls(AddrVal :Integer ; Pin :Integer) : Integer;StdCall ;
Var
' Dim i Vb
cntHigh : Integer ;
NewSignal : Byte ;
OldSignal : Byte ;
Sek : Dword ;
Begin
' 1 sekund 1000 ms
Sek := GetTickCount + 1000 ;
cntHigh := 0 ;
NewSignal := DlPortReadPortUchar(AddrVal) ;
While GetTickCount < sek do begin
If NewSignal <> OldSignal Then Begin
OldSignal := NewSignal ;
' i VB cntHigh = cntHigh + 1
inc(cntHigh) ;
End;// 'If
NewSignal := DlPortReadPortUchar(AddrVal) ;
End; // 'While
'heltalsdivision
GetPuls := cntHigh div 2 ;
End; ' första Begin
</code>