Работа с com port rs232

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Kira93
Сообщения: 1
Зарегистрирован: 02 окт 2013, 15:14

02 окт 2013, 15:21

Добрый день!
Я пишу программу для весового индикатора, чтобы тот при получении команды делал определенные действия. Пример команд:
команда - действие
A - QUERY/SET WEIGHT IN F4 FORMAT
R - RESET SYSTEM
P - QUERY/SETNWEIGHT WITH RESPONSE ACCORDING TO THE SELECTED FORMAT
$ - and does not require <cr>
и т.д.
При взвешивании прибор показывает определенный вес, который мне нужно вывести в моей программе и вбить в базу это самая основная задача. База уже есть вот только проблема в том что код написал, отправляю команду на действие ничего не происходит. Пытался добиться чтобы хотя бы перезагружался при помощи команды R, ничего не выходит проверяю все написанное программой portmon. Пишу на RAD Studio XE - delphi). Писать начал сравнительно недавно поэтому опыт небольшой. Вот собственно код:

Код: Выделить всё

unit Unit2;

interface

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

type
  TForm3 = class(TForm)
  //TComAscii = class(TComponent)
    btn1: TButton;
    btn2: TButton;
    lbl1: TLabel;
    lbl2: TLabel;
    cmprt1: TComPort;
    btn4: TButton;
    edit2: TEdit;
    grp1: TGroupBox;
    lbl3: TLabel;
    btn3: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure cmprt1RxChar(Sender: TObject; Count: Integer);
    procedure btn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
     command: string;
     result: string;
implementation

{$R *.dfm}
//открытие порта
procedure TForm3.btn1Click(Sender: TObject);
begin
   cmprt1.Open;
  if cmprt1.Connected  then

lbl1.Caption := 'Порт открыт'
    else
    lbl1.Caption := 'Порт закрыт';
   //if (CommHandle=invalid_handle_value) then ShowMessage('Выберите порт!') else
  end;

//закрытие порта
procedure TForm3.btn2Click(Sender: TObject);
begin
cmprt1.Close;
lbl1.Caption := 'Порт закрыт';
end;



//Функция перевода в HEX
function StringtoHex(Data: string): string;
var
  i, i2: Integer;
  s: string;
begin
  i2 := 1;
  for i := 1 to Length(Data) do
  begin
    Inc(i2);
    if i2 = 2 then
    begin
      s  := s + ' ';
      i2 := 1;
    end;
    s := s + IntToHex(Ord(Data[i]), 2);
  end;
Result := s;
end;

//Отправить данные
procedure TForm3.btn4Click(Sender: TObject);
begin
   command := #$52 + #13;
   cmprt1.WriteStr(command);
end;
procedure TForm3.cmprt1RxChar(Sender: TObject; Count: Integer);
begin
  result := IntToStr(cmprt1.ReadStr(result, Count));
end;

procedure TForm3.btn3Click(Sender: TObject);
begin
lbl3.Caption := result;
end;
end.
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

02 окт 2013, 16:02

Попробуй как AnsiString данные передавать..
[syntax=Delphi] [/syntax]
WinIce
Сообщения: 1
Зарегистрирован: 26 фев 2013, 13:48

10 янв 2014, 16:27

Я тоже сейчас разбираюсь с программой обработки веса с весов, но не на делфи, а на с++, но delphi мне ближе, так что проблемма у нас одинаковая. Если она еще актуальна, может я прогу на delphi переделаю, за одно помогу вам. Если интересно пишите в ЛС.
Ответить