| Author |
Message
|
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#1
14 Dec 2009 20:43 Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Witam!
Chodzę do 1 klasy technikum elektronicznego, mam już doświadczenie z mikro kontrolerami, ale z Delphi nie.
Nauczyciel Technologi Informacyjnej (z którym buduję platformę (2 silniki krokowe)) nakazał mi napisanie programu w Delphi sterującego platformą. Program ma za zadanie wysyłać (przez RS232) do ATmegi8 liczbę z zakresu 0 - 255 (8 bit) liczba ta odpowiada liczbie kroków silnika. Wykonałem takie coś w terminalu BASCOM'a tylko teraz potrzebuję napisać taką aplikację w DELPHI.
Pobrałem już różne komponenty mające zniwelować mój problem lecz niestety nie umiem ich nawet zainstalować.
PROSZĘ o dokładne krok po kroku wyjaśnienie mi jak wykonać tą aplikację.
1. Jak zainstalować komponent w Delphi ?
2. Jaki komponent ?
3. Jak wysłać liczbę np. 38 przez rs232 ?
posiadam delphi 7 presonal.
|
|
| Back to top |
|
 |
megao Poziom 17

Joined: 27 Feb 2003 Posts: 444 Location: warszawa
|
#2
15 Dec 2009 01:35 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
| Quote: |
| Nauczyciel Technologi Informacyjnej nie może mi w tym pomóc ponieważ nie ma o tym zielonego pojęcia - On zajmuje się mechaniką." |
Witaj w Polsce. Może twój nauczyciel powinien zadać coś z mechaniki, albo się douczyć. Za co mu płacą? ;)
Jak rozumiem jesteś początkujący w Delphi. Jest dobra literatura w której znajdziesz kompleksowe rozwiązanie problemu.
Poszukaj RS 232C. Praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera.
|
|
| Back to top |
|
 |
Jerzy_W Poziom 10

Joined: 22 Dec 2008 Posts: 51 Location: Gliwice
|
#3
15 Dec 2009 01:58 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Witam!
Polecam komponent TComPort który można pobrać:Link
Po rozpakowaniu odszukaj plik z opisem jak go zainstalować w twojej wersji Delphi.
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#4
15 Dec 2009 15:43 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Właśnie miałem już ten komponent pobrany, ale nie mogę dać rady go zainstalować.
Najpierw proszę o opis instalacji tego komponentu. Jak uda mi się go zainstalować to wtedy zacznę czytać o jego programowaniu.
PS: Proszę nie pisać postów typu: Wujek google zna rozwiązanie każdego pytania. Bo wierzcie mi, że już nie raz, nie 10 razy szukałem...
Pozdrawiam.
Dodano po 25 [minuty]:
Witam ponownie.
Wydaje mi się, że udało mi się zainstalować. Tylko nigdzie w zakładkach nie ma tego komponentu. Po instalacji wyświetliło mi się Cport.pas
Kawałek tego kodu (bardzo mały)
| Code: |
(******************************************************
* ComPort Library ver. 4.0 *
* for Delphi 3, 4, 5, 6, 7 and *
* C++ Builder 3, 4, 5, 6 *
* written by Dejan Crnila, 1998 - 2002 *
* maintained by Lars B. Dybdahl, 2003 *
* Homepage: http://comport.sf.net/ *
* *
* Fixed up for Delphi 2009 by W.Postma. Oct 2008 *
* Many significant internal changes. *
* *
* Supports Overlapped and non-Overlapped Win32 IO *
*****************************************************)
{ The main TComPort component is defined in this unit. }
unit CPort;
{$I CPort.inc}
{$R-}
{$Q-}
interface
uses
Windows, Messages, Classes, SysUtils, IniFiles, Registry, CPortTypes;
|
|
|
| Back to top |
|
 |
Google

|
#
15 Dec 2009 15:43 |
|
|
|
|
|
| Back to top |
|
 |
Rych U Poziom 5

Joined: 30 Jan 2006 Posts: 11 Location: Nowogard
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#6
15 Dec 2009 16:14 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Żart czy co to miało być?
PS: Zainstalowałem ten komponent już jest w zakładkach.
Proszę o pomoc.... :cry:
Proszę napisać mi jak za pomocą komponentu ComPort wysłać na prot COM1 jakąś liczbę np. 25. (za rozwiązanie problemu 500 punktów ):|
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#7
15 Dec 2009 18:38 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
| Code: |
type
TForm1 = class(TForm)
ComPort: TComPort;
[...]
ComPort.Open;
Str := 'Test' + #13#10;
ComPort.WriteStr(Str); //wysyła string
if ComPort.Connected then
ComPort.Close
[...] |
lub :
| Code: |
Var
b : byte;
[...]
b:=25;
ComPort.Write(b,1) //wysyla pojedynczy bajt lub ich ciąg
[...] |
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#8
15 Dec 2009 19:10 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Coś robię źle tylko nie wiem co --- niedziała
Proszę o pana numer GG. Mój 10344736.
PS: To ten komponent?
Jak włączam Delphi to pokazuje mi się takie coś :
Proszę o pomoc. Musze napisać ten program.
|
|
| Back to top |
|
 |
piterus99 Poziom 25

Joined: 24 Feb 2005 Posts: 7237 Location: Bolesławiec/Wrocław
|
#9
15 Dec 2009 19:21 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Masz kolego ComPort w kodzie, a komponent nazywa sie ComPort1
Taki szczegół, jednak teraz Delphi nie odwołuje się do komponentu tylko do(modułu/klasy - nie jestem pewny)
i tak, to ten komponent, to ze to wersja demo...coz..
Poszperam u siebie, jak jeszcze pisalem artykuły o Delphi to coś na RS232 popełniłem - za sekunde sprawdze.
[teraz katują mnie Javą.....]
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#10
15 Dec 2009 19:23 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Czyli co mam zrobić?
Zmieniłem nazwę na ComPort1 i teraz wywala inny błąd.
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#11
15 Dec 2009 19:28 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
| hubertfab wrote: |
Coś robię źle tylko nie wiem co --- niedziała
|
Masz u siebie na formie zadeklarowany ComPort1, a w moim kodzie było ComPort bez jedynki.
Poza tym ściągnij sobie ComPort3.01 (zamiast 4.0) - nie ma żadnych ograniczeń i będzie pięknie chodził pod Delphi 7.
Spróbuj w ten sposób :
| Code: |
procedure TForm1.Button1Click(Sender: TObject);
var
arr : array[0..1] of byte;
rozmiar : word;
begin
ComPort1.Open;
arr[0]:=25;
rozmiar:=1;
ComPort1.write(arr,rozmiar);
ComPort1.Close;
end; |
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#12
15 Dec 2009 19:34 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
W tym problem, ze nie wiem jak go zainstalować. Jest dużo plików ale nie wiem który włączyć.
PS: w którym folderze mam w ogóle szukać ?
Dodano po 4 [minuty]:
Teraz taki błąd:
|
|
| Back to top |
|
 |
Stepel Poziom 18

Joined: 28 Sep 2005 Posts: 460 Location: Piaseczno
|
#13
15 Dec 2009 21:50 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
skorzystaj z metody WriteStr i wyślij string
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#15
16 Dec 2009 17:57 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Dam Ci 500 jak zadziała !!
Nie wiem co to za błąd. Jestem początkujący w Delphi.
Usunąłem ten komponent 4.0
|
|
| Back to top |
|
 |
Google

|
#
16 Dec 2009 17:57 |
|
|
|
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#16
16 Dec 2009 18:26 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Coś strasznie namieszałeś z tą instalacją :)
Po zainstalowaniu jakiejkolwiek biblioteki, bez otwierania jakiegokolwiek projektu, powinieneś mieć w Menu -> Project/Options coś takiego :
Na liście zainstalowanych pakietów szukasz pakietu z ComPort i naciskasz REMOVE.
A następnie YES.
Po tej operacji komponent ComPort znika z listy komponentów.
Nowy (stara wersja) komponent instalujesz tak jak opisałem wcześniej.
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#17
16 Dec 2009 18:34 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Sorry, że tak natrętnie zawracam Ci d__e ale nie wiem w ogóle co i jak. Pisałem w Delphi rożne proste programy (bot GG kalkulator itp) ale z tym nie mam pojęcia.
Dalej wyskakuje takie okno jak nacisnę Install .
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#18
16 Dec 2009 19:05 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
To tylko znaczy, że próbowałeś dodać komponent do ogólnej biblioteki komponentów, zamiast załadować całą paczkę DPK.
1. Odpal Delphi
2. Menu/Open project -> otwórz plik : c:\program files\borland\delphi7\Lib\dclusr70.dpk
3. Pokaże ci się coś podobnego jak tutaj :
4. Naciskasz przycisk REMOVE, pokazuje się lista plików należących do tej biblioteki :
5. Szukasz na tej liście tego nieszczęsnego komponentu (lub jego części), zaznaczasz i naciskasz OK. Uważaj żeby nie usunąć czegoś, czego używasz.
6. Jak zaznaczysz i usuniesz już wszystkie niepotrzebna pliki, to naciskasz COMPILE i gotowe.
7. Uruchamiasz ponownie Delphi i wszystkie biblioteki powinny wgrać się bez problemów.
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#19
16 Dec 2009 19:22 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Zainstalowałem! :D
Teraz kolejny krok (problem)
PS: Jak włączam ten plik z folderu ComPort_test i naciskam przycisk Button1 to silnik nie rusza się o 25 kroków (w ogóle się nie rusza). Więc włączam terminal w Bascomie i działa silnik się kręci. I znowu Pana program i nie działa. :cry:
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#20
16 Dec 2009 19:30 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Hola, hola ....
Nie było mowy o sterowaniu silnikami :)
Ustaw port i inne ustawienia na kontrolce ComPort zgodnie z ustawieniami terminala i wtedy zobacz. Na razie kontrolka jest ustawiona na np. BaudRate 1200.
No a poza tym , jeżeli używasz terminala to jesteś pewien, że nie powinieneś wysłać stringu '25' zamiast liczby 25 jako byte ?
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#21
16 Dec 2009 19:47 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Rozumiem.
W tym problem, że nie mogę włączyć programu (Run F9) z poziomu Delphi ponieważ wywala błąd:
PS: Jak kliknę 2 razy na ComPort ustawione jest poprawnie. 9600 itp.
Dodano po 12 [minuty]:
Required package "FIBComp" not found - Wymagany pakunek "FIBComp" nie znaleziony.
Jak mam to ugryźć ?
PS: Dam już 600 punktów za pomoc.
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#22
16 Dec 2009 21:06 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Ok poprawiłem kody. Powinno dać się skompilować.
Jakby coś nie tak, to spróbuj wywalić pliki CFG i DOF. Jak to nie pomoże to stwórz aplikację od nowa. 1 przycisk i kontrolka ComPort. Zawartość metody Button1Click możesz sobie spokojnie skopiować z załączonych kodów.
| Filename: |
ComPort_test_D7.rar |
 Download |
| Contents: |
|
| Filesize: |
2.51 KB |
| Punkty: |
0 |
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#23
17 Dec 2009 16:10 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Witam.
Niestety program się nie skompilował. :cry: :cry: :cry:
Mam przeczucie, że jak przebrnę przez ten błąd to zadziała.
To jest już finish.
Pozdrawiam Hubert.
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#24
17 Dec 2009 16:46 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Spakuj ten kod co próbujesz go uruchomić i zamieść tutaj.
Nie wierzę że 4 linijki prostego kodu sprawiają aż tyle problemów.
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#25
17 Dec 2009 16:58 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
To jest kod tego programu od Ciebie. :|
| Code: |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, CPort;
type
TForm1 = class(TForm)
ComPort1: TComPort;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
arr : array[0..1] of byte;
rozmiar : word;
begin
ComPort1.Open;
arr[0]:=25;
rozmiar:=1;
ComPort1.write(arr,rozmiar); <<<- Tu jest błąd ten co na obrazku.
ComPort1.Close;
end;
end. |
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#26
17 Dec 2009 17:34 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Deklaracja metody write dla ComPort 3.01, klasa TCustomComPort:
| Code: |
| function Write(const Buffer; Count: Integer): Integer; |
Deklaracja metody write dla ComPort 4beta, klasa TCustomComPort:
| Code: |
| function Write(const Buffer:TCPortBytes; Count: Integer): Integer; |
gdzie :
| Code: |
// this is the type Warren changed most of the untyped-parameters used
// in CPort.pas and CPortCtl.pas to:
TCPortBytes = PAnsiChar; |
Czy kolega widzi różnicę ?
To tylko świadczy o tym, że kolega używa ComPort w wersji 4 beta a nie 3.01, tak jak jest w moim przypadku.
Na 99% problemy biorą się właśnie z tego.
Ale to jest mniej istotne. Jeżeli używasz terminala do sterowania wspomnianym silnikiem to przy obu wersjach biblioteki, bardziej prawdopodobne jest, że wystarczy na port wysłać string "25" :
| Code: |
ComPort1.Open;
Str:='25';
Str := Str + #13#10;
ComPort1.WriteStr(Str);
ComPort1.close; |
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#27
17 Dec 2009 19:50 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Teraz wyrzuciło kilka błędów. Sorry już nie mam siły, nie wiem czy tobie się chce tyle odpisywać.
PS: Napisz prosty program który wysyła na Com1 (br: 9600) liczbę "96" (zmienna STRING) za pomocą 1 przycisku. Jak silnik się obróci o 360* tzn, że działa i będę dalej próbował. Wyślij skompilowany program (.exe) w jednym folderze a, źródło w 2 folderze.
Proszę i z góry dziękuję. :D
PS: Teraz już nie zależy mi już tak na tym gościu, żeby to napisać tylko dla samego siebie - przyda mi się.
Dodano po 33 [minuty]:
A może jak zmienię wersję Delphi z 7 na 5 to pomoże ?
PS: Nigdzie nie mogę znaleźć instalki Delphi 5.
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#28
18 Dec 2009 13:05 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Masz tu EXE, jak zadziała to podeślę kody.
Znaczenia tych 3 przycisków chyba nie muszę tłumaczyć ?
| Filename: |
ComPort_SendStr.zip |
 Download |
| Contents: |
|
| Filesize: |
189.17 KB |
| Punkty: |
0 |
|
|
| Back to top |
|
 |
Google

|
#
18 Dec 2009 13:05 |
|
|
|
|
|
| Back to top |
|
 |
hubertfab Poziom 18

Joined: 25 Jun 2008 Posts: 516 Location: Rzeszów/ Bratkowice
|
#29
18 Dec 2009 16:16 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Program działa w 80 %. Tzn:
Jak nie zaznaczę pola (add 'new line') to silnik nie wykonuje ani jednego kroku, wysyłając mu liczbę np 96 (96 kroków powinien wykonać.).
Jeśli zaznaczę to pole i wpisze 96 i Dam SEND to silnik obraca się o zadaną liczbę kroków. Ale już drugi raz nie mogę już wysłać liczby kroków - w sumie to mogę ale silnik na to nie reaguje. Ale jak wyślę mu np. 96 kroków obróci się potem resetuje mikrokontroler i wysyłam ponownie (bez resetu programu) i silnik działa.
Możesz mi wysłać źródło programu, zobaczę czy u mnie się w ogóle skompiluje.
Pozdrawiam Hubert.
|
|
| Back to top |
|
 |
arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2933 Location: High Wycombe
|
#30
18 Dec 2009 16:33 Re: Wysyłanie informacji po RS232 przez Delphi |
|
|
|
Źródło dołączone.
BTW: spróbuj zamknąć i otworzyć port przed ponownym wysłaniem.
| Filename: |
ComPort_SendStr_scr_d5.zip |
 Download |
| Contents: |
|
| Filesize: |
8.63 KB |
| Punkty: |
0.00 |
|
|
| Back to top |
|
 |