Kalibracja licznika

0

Wiatm
Mam sobie kalibracje licznika w postaci par liczb (np 1,3 2,4 3,6 4,9 ...) dziala to w ten sposob ze jak licznik pokaze jakas liczbe to uzytkownik zobaczy odpowiednio zmieniona liczbe (np licznik pokazuje 2 uzytkownik widzi 4, licznik 3.5 uzytkownik 7.5)

czy jest jakis algorytm, komponent... do robienia takich rzeczy?
chcialbym podawac dwuwymiarowa tablice i wartosc do zkalibrowania i jako wynik otrzymywac odpowiednio zmieniona wartosc...

moze jakies przyblizanie za pomoca funkcji (tylko jak wybrac wlasciwa?)

wiem ze prosze o wiele :-8
ale jestem w potrzebie.

0

a nie możesz dać żeby do wyniku dodawał jakąć wartość??

0

ale problem polega na tym ze to nie jest stala wielkosc ktora moznaby dodawac... to nawet nie musi byc funkcja liniowa, ani nawet zadna elementarna...:|

0

a co z randomize ??

0

Nie rozumie o co ci chodzi.. czy te pary liczb masz już przygotowanei chodzi Ci o samą funkcje zmieniającą ? .. czy jak?

Bo jeśli funkcja to bardzo prosto:

function ChangeNumber(A: Integer): Integer;

Możesz wyjaśnic ?

0

Kiedyś też miałem taki problem, gdyż skala przedziału tak jak u Ciebie, nie była liniowa. Ja miałem 100 pozycji rozwiązałem to przy pomocy case.

A to z helpa:

case I of
  1..5:          Caption := 'Low';
  6..9:          Caption := 'High';
  0, 10..99:  Caption := 'Out of range';
else
  Caption := '';
end;

DOPISANIE

Te 35 l sugeruje mi Daewoo Matiz

0

wyglada to tak ze jest licznik ktorego wskazania mieszcza sie w przedziale [0,1]
(np 0.1, 0.43, 0.21 ...). Jest to wskaznik paliwa. Teraz te ulamki nalezy zamienic na litry. jednak nie jest to takie proste.

Jesli licznik pokazuje 0.5 to wcale nie oznacza ze jest pol baku paliwa:(
aby sie dowiedziec ile tak na prawde w nim jest, nalezy spojrzec na tabelke z kalibracja. W tej tabelce jest przedstawione jak nalezy interpretowac dane wskazania...

| 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 |
--------------------------------------   ... itd.
| 1L   | 3L   | 6L   | 10L  |  20L | 35L  |

jednak licznik wskazuje z duzowieksza dokladnoscia (np 0.456) wiec trzeba jakos to przeliczyc na litry.

tabelke ta mozna przedstawic za pomoca wykresu.
laczac punkty otzrymamy jakies tam przyblizenie tej kalibracji

ja zalozyme na poczatku ze jest to zaleznosc liniowa i wyznaczylem sobie wzor prostej przechodzacej przez pierwszy(0.1 , 1) i ostatni(0.6 , 35) punkt.
no i posiadajac ten wzor, podstawialem do niego wskazania licznika i otrzymywalem rzeczywista zawartosc baku.

problem sie komplikuje kiedy zaleznosc nie jest liniowa a ilosc punktow ja wyznaczajacych jest spora... :(

w dodatku operacje ta jest wykonywana dynamicznie i wielokrotnie dla roznych danych wiec nie moze trwac dlugo:(:(:(

Chyba najbardziej odpowiadalby mi algorytm zwracajaca wzor funkcji przechodzacej przez dane punkty...

uff to sie napisalem...

0

| 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 |

| 1L | 3L | 6L | 10L | 20L | 35L |

Twoja metoda na wyznaczeniu punktu początkowego i końcowego jako punktów funkcji liniowej jest jak najbardziej zła. Nie wiemy jak się zachowują te przeliczenia w pomiarach pomiędzy danymi. Ale można sobie wyznaczyć wzór funkcji liniowej pomiędzy jednym a drugim danym przeliczeniem, dzieki czemu możemy okreslic wartosc paliwa (oczywiscie tylko szacunkową).

Np. dla wskazania 0.32 .. ile litrów?

Można przyjąć przelicznik jako f(x) = (6 / 0.3) * x - gdyż jest ono najbliżej ..

Teraz za x = 0.32 .. .. 6,4 L.

Oczywiście jest to tylko wartość szacunkowa.. nie jestes w stanie dokładnie określić tej wartości..

0

Tego typu funkcje mozna opisywac krzywymi Bezziera. Wpisz w google'a to cos znajdziesz.
Wiele programow graficznych do rysowania wykresow ma taka opcje - zeby gladko polaczyc kropki.

0

jednak wydaje mi sie ze moja metoda jest lepsza... bo moja funkcja pokrywa sie w <ort>dwóch </ort>punktach z rzeczywista kalibracja a Twoja tylko w jednym...

0

Dobra.. obaj się troche pospieszyliśmy. Chodziło mi raczej o wyznaczenie wzoru ale z punktów pomiędzy szukaną wartością.. a zamiast tego wyznaczyłem od zera.. ale co nie zmienia faktu, wyznaczeniu z punktu początkowego i końcowego jest do d...

0

Standardowy problem z tabela kalibracyjna... Ech gdzie te czasy laborek z fizyki...
No dobra do rzeczy nie bardzo rozumiem w czym az taki problem. Przecież masz tabele z wszystkimi punktami kalibracyjnymi, wiec możesz zastosowac metode przybliżeń odcinami prostych. To znaczy zakładasz ze pomiedzy dwoma kolejnymi punktami masz liniowa zaleznosc, z tabeli wyliczasz dla kazdej kolejnej pary punktow wspolczynniki równania prostej i po krzyku. Wystarczy wtedy porownac wartosc wskazywana z punktami w tabeli kalibracji i wziac do obliczen odpowiednie wspolczynniki prostej i już.
Metoda druga to dopasowanie jakiejs funkcji do tabeli i wyliczanie wprost ze wzoru tej funkcji odpowiedniej wartości. Na "oko" twoja funcja ma cos wspolnego z exponetą wiec może warto pokusić się o wyliczenie jej współczynników pokombinuj w excellu albo innym takim.

0

policzylbym sobie te wspolczynniki o ktorych mowisz, tylko ze niestety program ma wykonywac ok 40 takich obliczen... i nie jes to glowny cel programu ani nawet poboczny, wiec zasadniczo powinien byc niezauwazalnie krotki:(

no ale coz... chyba robie ztymi odcinkami laczacymi kolejne dwa punkty,
no chyba ze ktos ma lepszy pomysl...:)
pozdrawiam

0

To jeszcze raz, przecież możesz raz je sobie policzyć i wpisac do jakiejs tablicy i wiecej tego nie robic, ba mało tego przecież tabela kalibracyjna sie nie zmienia wobec czego te wspolczynniki tez pozostana stale wiec na upartego mozesz to policzyc na kalkulatorku i krtce papieru i wpisac do programu jak tablice stalych i tylko uzywac. Powinno to znakomicie przyspieszyc program.

pozdrawiam i powodzenia [cya]

0

To już było, ale napiszę to w postaci algorytmu (kodu nie napiszę, pomęcz się trochę :) ):

  1. Sprawdzasz aktualne wskazanie licznika
  2. Sprawdzasz, czy w tabelce nie ma dokładnie tego wskazania
  3. Jeśli jest, to przechodzisz do punktu czwartego, jeśli nie, to do szóstego
  4. Odczytujesz wartość z tabelki
  5. Przechodzisz do końca
  6. Znajdujesz dwa najbliższe punkty w tabelce (niższy i wyższy)
  7. Wyliczasz przybliżoną wartość dla danej wejściowej zakładając, że wykres w odcinku między znalezionymi punktami jest liniowy
  8. Koniec.
    Ta operacja powinna być dość szybka (oczywiście to nie ASM, nikt nie prosi cię o korzystanie ze skoków, po prostu schemat było najprościej tak napisać).

1 użytkowników online, w tym zalogowanych: 0, gości: 1