Elektroda.pl
Elektroda.pl
X
OptexOptex
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Delphi] Katalog usterek

...KUBA... 04 Sty 2008 11:59 17902 74
  • #31
    tzok
    Moderator Samochody
    Źle kojarzysz, to jeden plik txt (dla kazdej marki) o strukturze:
    Code:
    kod-"opis"
    
    kod-"opis"

    Zresztą już wszystko zostało powiedziane, teraz tylko autorowi pozostaje poskładać to w całość.
  • OptexOptex
  • #32
    Smilox
    Poziom 18  
    A nie łatwiej i prościej byłoby do wszystkiego zaprząc Excela tylko? Na poszczególnych arkuszach wypisujesz kody i opisy, a na pierwszym robisz dwie listy rozwijalne: jedna do wyboru auta, a druga do wyboru kodu. Do tego potrzeba minimalnej wiedzy, a efekt końcowy dość ciekawy.
  • #33
    Remeknapr
    Poziom 33  
    tzok napisał:
    Zresztą już wszystko zostało powiedziane, teraz tylko autorowi pozostaje poskładać to w całość.

    Nie wszystko zostało powiedziane. Aby napisać program trzeba mieć wszystkie potrzebne dane i założenia, a autor jest wstrzemięźliwy w udzielaniu informacji. Wspomina, że ma dane min. w plikach Word'a, ale na pytanie, czy jest w nich tylko tekst, czy może też inne rzeczy już nie odpowiada. Do otwarcia właściwego pliku, odnalezienia w nim szukanego rekordu i wreszcie wysłania go na ekran są potrzebne bardziej rozbudowane mechanizmy, niz te w poradach. Mówię tu o C++, czy asemblerze. Nie komentuję porad dotyczących języków skryptowych, bo nie mam o nich pojęcia.
  • #34
    tzok
    Moderator Samochody
    Zamiana z DOC czy RTF na plain text to żaden problem... autor pyta jak to zrobić w Delphi (Object Pascal) i dostał odpowiedź.

    Delphi na pewno nie jest językiem skrytowym i zapewniam, że świetnie się do tego zadania nadaje. Zapewniam też, że mechanizm podany w poradzie jest wystarczający do przesukiwania pliku tekstowego o strukturze jaką opisał autor, choć nie zawiera obsługi błędów i trzeba zadbać by w pliku nie było pustych linii ani niepotrzebnych spacji. Nie patrz na to jak na bazę danych bo to nią nie jest, idealną strukturą do wczytania takiego pliku była by tablica asocjacyjna (translacyjna) ale z tego co wiem brak jej w Delphi (można sobie oczywiście samemu zdefiuniować ale uważam, że sekwencyjne przeglądanie pliku jest wystarczająco dobrą i zważywszy na ilość danych najbardziej poprawną metodą).

    Przykładowy, sprawdzony i działający kod (jako, że to przykład, oczekuje danych w pliku 'test.dat' o strukturze jak była opisana, tj. kod to pierwsze 4 znaki a opis jest od znaku 7 do długości bufora - 1):
    Code:
    unit CodeChecker;
    

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      TForm1 = class(TForm)
        txtErrorCode: TEdit;
        txtErrorDescription: TEdit;
        btnCheck: TButton;
        procedure btnCheckClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    function fCheck(ErrNo: Integer; Brand: String): String;
    var
      TxtFile : TextFile;
      Code: Integer;
      buffer : string;
    begin
      AssignFile(TxtFile, Brand+'.dat') ;
      Reset(TxtFile) ;
      while not EOF(TxtFile) do
      begin
       ReadLn(TxtFile, buffer) ;
       // parser
       Code:=strtoint(copy(buffer,1,4));
       if Code=ErrNo then
       begin
          Result:=copy(buffer,7,length(buffer)-7);
          Break;
       end;
       // koniec parsera
      end;
      if EOF(TxtFile)=True then Result:='Brak opisu';
      CloseFile(TxtFile) ;
    end;

    procedure TForm1.btnCheckClick(Sender: TObject);
    begin
        txtErrorDescription.Text:=fCheck(strtoint(txtErrorCode.Text), 'test');
    end;

    end.
  • OptexOptex
  • #35
    Remeknapr
    Poziom 33  
    tzok napisał:
    Zamiana z DOC czy RTF na plain text to żaden problem...

    Pod warunkiem, że w pliku *.doc nie ma rysunków, hiperłączy i innych bajerów, które autor chciałby zachować i wykorzystać. A od tego zależy wybór edytora do otwierania plików, co trochę komplikuje sprawę.

    Cytat:
    autor pyta jak to zrobić w Delphi (Object Pascal) i dostał odpowiedź. Delphi na pewno nie jest językiem skrytowym i zapewniam, że świetnie się do tego zadania nadaje.

    Nigdy nie twierdziłem, że się nie nadaje. Taki programik można napisać praktycznie w każdym języku.
  • #36
    tzok
    Moderator Samochody
    Te tabele to coś takiego:
    Code:
    P0031    
    
    Front oxygen (A/F) sensor heater circuit low input

    P0032    
    Front oxygen (A/F) sensor heater circuit high input

    P0037    
    Rear oxygen sensor heater circuit malfunction

    P0038    
    Rear oxygen sensor heater circuit high input

    P0065    
    Air assist injector solenoid valve malfunction

    P0066    
    Air assist injector solenoid valve circuit low input

    P0067    
    Air assist injector solenoid valve circuit high input

    P0100    
    Mass Air Flow Sensor Circuit Malfunction

    P0101    
    Mass Air Flow Sensor Circuit Range Problem

    P0102    
    Mass Air Flow Sensor Circuit Low Input

    PO103    
    Mass Air Flow Sensor Circuit High Input

    P0105    
    Pressure Sensor Circuit Malfunction

    P0106    
    Pressure Sensor Circuit Range Problem

    PO107    
    Pressure Sensor Circuit Low Input

    PO108    
    Pressure Sensor Circuit High Input

    P0111    
    Intake air temperature sensor circuit range/performance problem

    P0112    
    Intake air temperature sensor circuit low input

    P0113    
    Intake air temperature sensor circuit high input

    P0115    
    Engine Coolant Temperature Sensor Circuit

    P0116    
    Engine Coolant Temp Sensor Circuit Low Input


    Nie ma tam żadnych obrazków, ani odnośników.
  • #38
    tzok
    Moderator Samochody
    Jeśli doprowadzisz wszystkie pliki do jednolitej formy to będzie ok, tu masz:
    <kod>TAB<opis>CR+LF
    a mój program jest dla:
    <kod>-"<opis>"
  • #39
    Remeknapr
    Poziom 33  
    ...KUBA... napisał:
    w załączniku podaje przykładowy "spis" kodów do opla


    Skompilowałeś kod podany przez tzok?
  • #40
    ...KUBA...
    Poziom 23  
    nie to są kody błędów do opla
  • #41
    Remeknapr
    Poziom 33  
    ...KUBA... napisał:
    nie to są kody błędów do opla


    Pytałem, czy próbowałes kompilować kod podany przez tzok:
    Code:
    unit CodeChecker; 
    

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      TForm1 = class(TForm)
        txtErrorCode: TEdit;
        txtErrorDescription: TEdit;
        btnCheck: TButton;
        procedure btnCheckClick(Sender: TObject);
      private
        { Private declarations }
    ..............


    Ale nieważne. Ja napisałem. Na załączonym obrazku okienko działającego programu. Odpowiada Ci taka forma?

    [Delphi] Katalog usterek
  • #42
    ...KUBA...
    Poziom 23  
    bardzo fajne, mi to jak na razie zbytnio nie wychodzi... ale można tak wprowadzać kody 3 i 4 cyfrowe??
  • #43
    Remeknapr
    Poziom 33  
    ...KUBA... napisał:
    bardzo fajne, mi to jak na razie zbytnio nie wychodzi... ale można tak wprowadzać kody 3 i 4 cyfrowe??


    Wszystko można. Trzeba tylko napisać odpowiednią procedurę. Wrzuć wszystkie materiały (mogą być na PW), abym wiedział jakie jeszcze mogą być problemy. Czy np. wszystkie opisy są takie jak na obrazku, czy mogą być dłuższe, kilkuzdaniowe. To wszystko ma znaczenie. Pytałem, czy sprawdzałeś podany wyżej kod. Ja nie mogę, bo nie mam Delphi.
  • #44
    ...KUBA...
    Poziom 23  
    sprawdziłbym ale nie wiem jak dobrać/ustawić komponenty... i na jakiej zasadzie wczytywane są kody z pliku... ok to zaraz będe wysyłał...
  • #45
    tzok
    Moderator Samochody
    Komponenty zaznaczasz (klikasz) a następnie klikasz na formularzu w miejscu gdzie chcesz go umieścić.
    Pod mój kod masz 2 textBoxy o nazwach (name): txtErrorCode oraz txtErrorDescription; oraz jeden Button o nazwie btnCheck.
  • #46
    Remeknapr
    Poziom 33  
    ...KUBA... napisał:
    sprawdziłbym ale nie wiem jak dobrać/ustawić komponenty... i na jakiej zasadzie wczytywane są kody z pliku... ok to zaraz będe wysyłał...

    Co właściwie chcesz zrobić? Napisać program nie mając pojęcia o programowaniu, czy chcesz nauczyć się tego od podstaw? Od tego są szkoły, książki, tutoriale itp.
  • #47
    ...KUBA...
    Poziom 23  
    jak wstawiać komponenty to ja już wiem, tylko nie za bardzo wiedziałem jakie mają mieć nazwy, i jakie to mają być dokładnie ...

    Remeknapr napisał:
    Co właściwie chcesz zrobić? Napisać program nie mając pojęcia o programowaniu, czy chcesz nauczyć się tego od podstaw? Od tego są szkoły, książki, tutoriale itp.

    a co do nauki to na razie uczyłem się pisać programy w szkole na turbo pascal, i za niedługo przechodzimy na delphi... a ten programik to jest mi troche potrzebny, i chciałem napisać z waszą pomocą...
  • #48
    Remeknapr
    Poziom 33  
    Widzę, że nie masz chęci współpracować. Obiecanych materiałów nie podałeś. Pełnych informacji też niechętnie udzielasz. Aby móc napisać pewnie, bezbłędnie działający program niezbędna jest wiedza z jakimi materiałami ma pracować. Musi wiedzieć ilucyfrowy jest kod, jak długie są opisy usterek, jaki jest format danych itd. Wyboru właściwego algorytmu może program wykonywać na podstawie:

    - wpisanej marki samochodu
    - zaznaczenia marki radiobuttonem
    - zaznaczenia ilości cyfr kodu radiobuttonem
    - wpisania ilości cyfr w okno

    Wybór metody zależy od właściwości materiałów i preferencji użytkownika. Widzę, że nie jesteś w stanie samodzielnie napisac takiego programu. Byłem gotów zrobić to dla Ciebie, ale nie chcesz. W takim razie ja się wyłączam. Załączam obrazki ilustrujące opisane problemy.
    [Delphi] Katalog usterek
    [Delphi] Katalog usterek
  • #49
    ...KUBA...
    Poziom 23  
    przepraszam że nic nie pisze ale jakoś niezbyt mam czas... a co kodu to przedział od 3 do 6 cyfrowy to w zupełnoći wystarczy
    w załączniku podałem kody błędów 3, 4 i 5 cyfrowe do interfejsu typu Vag czyli można nim odczytywać kody błędów w VW/seacie/skodzie/audi
    kolejny załącznik to kody błyskowe do opla corsy czyli takie które można odczytać za pomocą kontrolki w corsie
    w sumie to tylko chodzi mi głównie o te kody
    a ten plik wcześniejszy to były kody do opla króre można odczytać za pomocą interfejsu...
    a może dało by sie jeszcze zrobić taką funkcję
    w której wybierało by sie w jaki sposób odczytuje się kody np. za pomocą kontrolki / interfejsu??
  • #50
    Remeknapr
    Poziom 33  
    ...KUBA... napisał:
    a może dało by sie jeszcze zrobić taką funkcję
    w której wybierało by sie w jaki sposób odczytuje się kody np. za pomocą kontrolki / interfejsu??

    Im dalej w las tym więcej drzew... Okazuje się, że potrzebujemy coraz więcej informacji. Napisz wyraźnie i dokładnie czego oczekujesz od programu, bo ja pewnych pytań nie rozumiem. Nie mam żadnego pojęcia o szczegółach diagnostyki samochodowej, więc musisz mi to jasno wytłumaczyć. Umiem natomiast napisać program, który by tym wymaganiom sprostał. Uściślij to:

    Cytat:
    - odczytuje się kody np. za pomocą kontrolki / interfejsu?


    Ja tego pytania nie rozumiem. O jaką kontrolkę chodzi? Jaki interfejs masz na myśli?

    Czy chodzi o lampkę migającą w samochodzie - to kontrolka?
    Interfejs to jakieś urządzenie czytające dane z komputera pokładowego samochodu?

    Wydaje mi się, że na początku pytałeś jak czytać rekord z pliku *.txt i to zrobiłem. Pokazałem Ci okna programu, do których ręcznie wpisujesz odpowiednie dane. Natomiast przesyłanie kodów usterek z samochodu do komputera i automatyczna ich interpretacja przez program to już "wyższa szkoła jazdy".

    Zresztą napisz więcej, aby było wiadomo, o co idzie.
  • #51
    ...KUBA...
    Poziom 23  
    ta kontrolka to właśnie lampka migająca w samochodzie która zapala się i gaśnie odpowiednią ilość razy i to oznacza dany kod. a za pomocą interfejsu podłącza sie samochud do komputera w moim przypadku do laptopa i za pomocą programu np. VWtool można odczytać kod błędu... i plik który podałem i jest zapisany jako Opel corsa.doc to te kody odczytuje sie za pomocą lampki.. i teraz chciałbym zeby była taka funkcja w programie dzięki której można byłoby wybierać czy dany kod odczytuje się za pomocą kodu błyskowego lampki czy interfejsu...
    czyli np. zaznaczamy ze za pomocą kodu błyskowego i wybieramy markę opla corse (na razie ten model wystarczy) i programik odczytuje znaczenie kodu z pliku opel corsa.doc , a jak wybieżemy interfejs i opla to program odczytuje znaczenie z pliku tego co wcześniej podałem Kody opel.doc jak coś to prosił bym o kontakt na GG 5265941
  • #52
    tzok
    Moderator Samochody
    Nie wystarczy wybór zestawu kodów? Ja to widzę tak:
    Kody umieszczamy w katalogu z programem w osobnych plikach .dat i nazwach: Opel Corsa - interfejs, Opel Corsa - kody błyskowe, VAG i t.d.
    Program przy uruchomieniu szuka plików .dat w swoim katalogu i wczytuje ich nazwy do ComboBoxa (listy rozwijanej) z której użytkownik dokonuje wyboru właściwego zestawu kodów.
    Następnie program wczytuje z pliku listę kodów, proponuję format: kod<spacja>opis<enter>, czyli wszystko od początku linii do pierwszej spacji traktuje jako kod a za spacją, do entera - jako opis.
    Program porównuje wpisany i zatwierdzony kod z zawartością listy, jeśli znajdzie - wyświetla jego opis, jeśli nie znajdzie - wyświetla błąd.
    Zaleta tego rozwiązania jest taka, że bez żadnych zmian w kodzie programu można dodawać kolejne zestawy kodów. Kody błyskowe też są zapisywane numerycznie, więc nie widzę powodu aby dodawać dla nich jakąś osobną kategorię w programie, po prostu należy je traktować jako osobny zestaw kodów.
  • Pomocny post
    #53
    Remeknapr
    Poziom 33  
    ...KUBA... napisał:
    ta kontrolka to właśnie lampka migająca w samochodzie która zapala się i gaśnie odpowiednią ilość razy i to oznacza dany kod. a za pomocą interfejsu podłącza sie samochud do komputera w moim przypadku do laptopa i za pomocą programu np. VWtool można odczytać kod błędu...

    Teraz to dopiero mi zamąciłeś w głowie. Błagam Cię napisz porządnie i dokładnie co i jak. Nie mieszaj w jednym zdaniu kilku spraw.

    "kontrolka to właśnie lampka migająca w samochodzie która zapala się i gaśnie odpowiednią ilość razy i to oznacza dany kod."

    Czy liczbę błysków lamki liczy w tym przypadku człowiek, czy komputer?

    "a za pomocą interfejsu podłącza sie samochud do komputera..."

    A tu jak rozumiem jest inny przypadek, w którym dane z komputera pokładowego samochodu można pobrać do laptopa i za pomocą programu VWtool odczytać kod błędu?

    Opisz wszystko precyzyjnie, bo jak wspomniałem nie znam się na diagnostyce samochodowej.

    Czy te pliki tekstowe z opisami usterek sam pisałeś, czy są to materiały fabryczne? W pliku Opel corsa.doc są błędy:

    32 Wtryskiwacz 6. lub jego obwód, wysokie napięcie (Bosch Motronic)
    32 Przekaźnik pompy paliwa lub obwód, wysokie napięcie (GM Multec)

    41 Czujnik prędkości pojazdu lub jego obwód, nieskie napięcie (Bosch Motronic)
    41 Sygnał sterujący wzmacniacza, 2. i 3. cylinder (DIS) lub obwód, wysokie napięcie (GM Multec)
    41 Sygnał sterujący wzmacniacza, 1. i 4. cylinder (DIS) lub obwód, wysokie napięcie (GM Multec)

    42 Obwód pierwotny układu zapłonu z rozdzielaczem lub obwód, wysokie napięcie (GM Multec)
    42 Czujnik prędkości pojazdu lub jego obwód, wysokie napięcie (Bosch Motronic)

    Itd. Pod tym samym numerem rekordu są umieszczone różne opisy. Program znajduje pierwszy i wyświetla go. Pozostałe są ignorowane.

    O co chodzi? Może trzeba wyświetlić wszystko w takiej postaci:

    41 Czujnik prędkości pojazdu lub jego obwód, nieskie napięcie (Bosch Motronic). Sygnał sterujący wzmacniacza, 2. i 3. cylinder (DIS), lub obwód, wysokie napięcie (GM Multec). Sygnał sterujący wzmacniacza, 1. i 4. cylinder (DIS), lub obwód, wysokie napięcie (GM Multec)
  • Pomocny post
    #54
    tzok
    Moderator Samochody
    Albo wyświetlić wszystkie albo rozdzielić na dwie kategorie w zależności od ECU (GM/BOSCH).

    Ma jakiś "chałupniczy" interfejs do PC, który wyświetla tylko kody błędów (ew. z angielskimi opisami) i chce napisać program, że wpisze kod i dostanie opis po polsku.
    Kody błyskowe też odczytuje ręcznie z kontrolki i wklepuje do komputera.

    Już mu obiecałem, że napiszę ten program...
  • #55
    Remeknapr
    Poziom 33  
    tzok napisał:
    Ma jakiś "chałupniczy" interfejs do PC, który wyświetla tylko kody błędów (ew. z angielskimi opisami) i chce napisać program, że wpisze kod i dostanie opis po polsku.


    Też tak pomyślałem. Może wystarczy podmienić jakieś pliki?

    Cytat:
    Kody błyskowe też odczytuje ręcznie z kontrolki i wklepuje do komputera.
    Już mu obiecałem, że napiszę ten program...


    Nie ma problema. Należy podziwiać Twoją cierpliwość.
  • #56
    ...KUBA...
    Poziom 23  
    dobra dzięki za pomoc, i czekam na programik a te powtarzające się kody to już tak były...
    a co do interfejsu to wyświetla opis kodów ale niektóre programy wyświetlają sam kod... a program zależy od roku produkcji samochodu i podzespołów...
  • #57
    tzok
    Moderator Samochody
    Tak swoją drogą jak się tym zawodowo zajmuje to szarpnął by się na jakiegoś KTSa i miałby wszystko w jednym i z opisami...
  • #58
    ...KUBA...
    Poziom 23  
    nie wiem czy sie zbytnio opłaca bo on pracuje w firmie motoryzacyjnej, i tam to już mają sprzęt... a laptop z takim interfejsem zupełnie wystarcz do domu...
  • #59
    tzok
    Moderator Samochody
    Jako, że nie mam zamiaru Cię uczyć podstaw programowania, a nie mam "przy sobie" Delphi to masz tu program, który robi co chcesz, ale napisany w C# (wymaga .NET Framework 2.0).

    Code:
    /*
    
     * Created by SharpDevelop.
     * User: TzOk
     * Date: 2008-01-07
     * Time: 15:25
     *
     * To change this template use Tools | Options | Coding | Edit Standard Headers.
     */

    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    using System.IO;

    namespace DekoderSamochodowy
    {
       /// <summary>
       /// Główny formularz aplikacji.
       /// </summary>
       public partial class MainForm : Form
       {
          public MainForm()
          {
             //
             // The InitializeComponent() call is required for Windows Forms designer support.
             //
             InitializeComponent();
             
             //
             // TODO: Add constructor code after the InitializeComponent() call.
             //
          }
          

          // Inicjalizacja formularza;
          // odnajdywanie plików z rozszerzeniem Err
          // i umieszaczanie ich nazw w liście cbZestaw
          void MainFormLoad(object sender, EventArgs e)
          {
             DirectoryInfo dir = new DirectoryInfo(".");
             foreach (System.IO.FileInfo f in dir.GetFiles("*.err"))
                {                 
                cbZestaw.Items.Add(new ComboBoxItem(f.Name.Substring(0, f.Name.Length - 4), f.FullName));
             }
          }
          
          // Reakcja na dokonanie wyboru z listy cbZestaw
          // wczytanie do listy cbKod wszystkich unikalnych
          // kodów z pliku odpowiadającego wybranemu zestawowi
          void CbZestawSelectedIndexChanged(object sender, EventArgs e)
          {
             String current, previous = "";
             GlobalVar.fileName = ((ComboBoxItem)cbZestaw.SelectedItem).Tag.ToString();
             tbOpis.Text="";
             cbKod.Items.Clear();
             cbKod.Text="Wybierz kod";
             StreamReader re = new StreamReader(GlobalVar.fileName, System.Text.Encoding.Default);
                string input = null;
                while ((input = re.ReadLine()) != null)
                {
                   current = input.Substring(0, input.IndexOf(' '));
                   if (current!=previous)
                      cbKod.Items.Add(current);
                   previous = current;
                }
                re.Close();
          }
          
          // Reakcja na dokonanie wyboru z listy cbKod
          // odnalezienie w wybranym pliku wszystkich opisów
          // błędów o kodzie odpowiadającym wybranemu
          void CbKodSelectedIndexChanged(object sender, EventArgs e)
          {
             String errno = cbKod.SelectedItem.ToString();
             tbOpis.Text="";
             StreamReader re = new StreamReader(GlobalVar.fileName, System.Text.Encoding.Default);
                string input = null;
                while ((input = re.ReadLine()) != null)
                {
                   if (input.Substring(0, input.IndexOf(' '))==errno)
                      tbOpis.Text+=input.Substring(input.IndexOf(' ') + 1, input.Length - input.IndexOf(' ') - 1) + Environment.NewLine + Environment.NewLine;
                }
                re.Close();
          }
       }
       
       /// <summary>
       /// Klasa opisująca obiekty ComboBoksa;
       /// zawiera pole tekstowe oraz obiekt.
       /// </summary>
       class ComboBoxItem {
          string _Contents;
          public string Contents {
             get { return _Contents; }
              set { _Contents = value; }
          }
          object _Tag;
          public object Tag {
              get { return _Tag; }
              set { _Tag = value; }
          }
          public ComboBoxItem(string contents, object tag)
          {
             this._Contents = contents;
             this._Tag = tag;
          }
          public override string ToString(){ return _Contents; }
       }
       
       /// <summary>
       /// Klasa przechowujące zmienne globalne
       /// </summary>
       public static class GlobalVar {
          public static String fileName;
       }
    }

    P.S.
    Nie bijcie, wiem że to rozwiązanie ze statyczną klasą GlobalVar jest bardzo nieeleganckie.
  • #60
    ...KUBA...
    Poziom 23  
    dzięki tylko że ten kod jest do C++???