logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Delphi - Błąd przy komunikacji z układem ft232 - FTDI

Popak 02 Sty 2016 16:20 1404 11
REKLAMA
  • #1 15291621
    Popak
    Moderator na urlopie...
    Posty: 2762
    Pomógł: 97
    Ocena: 270
    Witam
    Napisałem mały programik do komunikacji z układem ft232 na podstawie materiałów udostępnionych przez producenta: http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/Delphi.htm opierałem się na pliku "Example 2" i sterowanie wyjściami CBUS w układzie.
    Niby wszystko fajnie steruje się i działa ale jest mały problem bo czasami wywala mi program błąd z komunikacji z układem ft232.

    Delphi - Błąd przy komunikacji z układem ft232 - FTDI

    I przy testowaniu programu w Delphi7 wyskakuje błąd:
    Build
      [Hint] unit1.pas(67): Variable 'Has_A' is declared but never used in 'GetNames'

    Niestety takie same objawy ma oryginalny program ze stronie producenta.
    Poniżej kod mojego programu:
    Kod: Delphi
    Zaloguj się, aby zobaczyć kod


    Prosiłbym o pomoc w rozwiązaniu tego problemu.
    Pozdrawiam
  • REKLAMA
  • #2 15291922
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Co do kompilatora, to nie jest błąd, tylko podpowiedź, jak sama nazwa wskazuje.

    Co do komunikatu - urządzenie w ogóle jest podłączone poprawnie i wykrywane przez system?
  • REKLAMA
  • #4 15292459
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Generalnie to ten kod przez stosowanie globalnych zmiennych jest nieczytelny.
    Dwa - wziąłem pierwszy z przykładów, ale tam są używane inne funkcje i np. zupełnie inny sposób pobierania listy urządzeń. Skąd więc brałeś przykłady i z jakiego pliku te funkcje? Co to jest za unit iotst?
    Trzy - komunikat sugeruje, że trzeba zrobić jakieś otwarcie (funkcja) urządzenia przed wysłaniem danych.
  • REKLAMA
  • #5 15292568
    Popak
    Moderator na urlopie...
    Posty: 2762
    Pomógł: 97
    Ocena: 270
    Dżyszla napisał:

    Dwa - wziąłem pierwszy z przykładów, ale tam są używane inne funkcje i np. zupełnie inny sposób pobierania listy urządzeń. Skąd więc brałeś przykłady i z jakiego pliku te funkcje? Co to jest za unit iotst?

    Ja korzystałem z drugiego przykładu czyli Example 2 a nie z pierwszego ;)
    Plik ''iotst'' jest w paczce drugiego przykładu Example 2.
    Pisałem w pierwszym poście z czego korzystałem.
    Dżyszla napisał:
    Trzy - komunikat sugeruje, że trzeba zrobić jakieś otwarcie (funkcja) urządzenia przed wysłaniem danych.

    Wiesz jak to rozwiązać aby nie pojawiał się komunikat?
  • REKLAMA
  • Pomocny post
    #6 15293412
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Ok, nie doczytałem, że to przykład 2. Swoją drogą to jak producent daje takie przykłady, to widać, że nie zna się na programowaniu w ogóle...

    Widzę, że całe otwarcie jest w tym dodatkowym pliku. Z komunikatu wnioskuję, że błąd jest na GetFTDeviceDescription przy pobieraniu listy urządzeń. Natomiast dokumentacja w ogóle mi się nie pokrywa z udostępnionymi funkcjami.

    Spróbuj może jeszcze oprzeć się na pierwszym przykładzie, ale jeśli przykładowy kod bez żadnych zmian także nie działa, to pisałbym do producenta.
  • #7 15293590
    Popak
    Moderator na urlopie...
    Posty: 2762
    Pomógł: 97
    Ocena: 270
    Z czystej ciekawości sprawdziłem ten pierwszy przykład i tak samo wywala mi błąd :/
    Nie zawsze i nie jest to jakoś uciążliwe ale wolał bym aby nic nie wyskakiwało.
  • Pomocny post
    #8 15293870
    chisel
    Poziom 27  
    Posty: 810
    Pomógł: 102
    Ocena: 171
    Może pomoże:
    FT_Enable_Error_Report := False;
  • #9 15319875
    Popak
    Moderator na urlopie...
    Posty: 2762
    Pomógł: 97
    Ocena: 270
    @chisel
    Testuje i wygląda na to że pomogło :)
    Zobaczymy jeszcze na innych systemach i komputerach czy wszystko jest ok.
    Dzięki


    Mam jeszcze jeden problem i nie wiem po jakie stronie. Czy po stronie programu czy to problem od strony układu ft232.
    Mianowicie chodzi o odczyt stanu jaki jest na pinie układu FT232. Obecnie jak układ jest podpięty cały czas do zasilania to program prawidłowo odczytuje stan wyjścia (stan niski i wysoki). Ale jak się zdejmie zasilanie i ponownie poda to program odczytuje stan wysoki mimo że na wyjściu jest stan niski.

    Za odczyt stanu odpowiada ten kawałek kodu:
    Kod: Delphi
    Zaloguj się, aby zobaczyć kod


    Wie może ktoś dlaczego tak się dzieje i jak ten problem rozwiązać?

    Pozdrawiam
  • #10 15320037
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    A zobacz w całości, co jest zwracane w data. Być może już tam nie ma żadnej wartości po takim zdarzeniu. Kod sprawdza tylko jeden bit, ale podejrzewam, że na pozostałych też znikają informacje.
  • #11 15320133
    Popak
    Moderator na urlopie...
    Posty: 2762
    Pomógł: 97
    Ocena: 270
    @Dżyszla Jak mogę to sprawdzić?
    Wybacz ale nie jestem jakoś bardzo obiegany w programowaniu ;)
  • #12 15320427
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Po prostu wyświetl zawartość zmiennej przed i po. Podejrzewam, że jest w niej nieco więcej niż tylko stan. I podejrzewam, że to efekt działania DLL. Możliwe, że po czymś takim trzeba ponownie otworzyć połączenie.

Podsumowanie tematu

✨ Użytkownik napotkał problem z komunikacją z układem FT232 w programie Delphi, który sporadycznie generuje błędy. Pomimo poprawnego podłączenia urządzenia, występują trudności z odczytem stanu pinów po ponownym zasileniu. W odpowiedziach zasugerowano, aby sprawdzić, czy urządzenie jest poprawnie otwierane przed wysłaniem danych oraz aby wyłączyć raportowanie błędów za pomocą `FT_Enable_Error_Report := False;`, co pomogło w rozwiązaniu części problemów. Dodatkowo, użytkownik został poinstruowany, aby sprawdzić zawartość zmiennej `data` przed i po odczycie, co może ujawnić, czy inne bity również tracą informacje.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA