Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с прибором Метран-900, Программа для Метран-900 
:(
    Опции темы
kolugd
Дата 25.9.2005, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 31.1.2005

Репутация: нет
Всего: нет



Доброе время суток!
Сделал небольшую программу для считывания
показаний с прибора Метран-900, но он не отвечает.
Может, кто подскажет, где ошибка?
Для считывания показаний в Метран-900 нужно
отправить последовательность байт в HEX-формате:
01 55 4D FF FF 00 00.
Вот текст:

Код

unit Unit0;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
 hCommFile: THandle;
 DCB: TDCB;
 ct: TCommTimeouts;

procedure TForm1.Button1Click(Sender: TObject);
var
 CommPort: String;
begin
 CommPort:='COM2';
 hCommFile:=CreateFile(PChar(CommPort),
                       GENERIC_READ or GENERIC_WRITE,
                       0,
                       nil,
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL,
                       0);
 if hCommFile=INVALID_HANDLE_VALUE
  then
   begin
    ShowMessage('Unable to open '+CommPort);
    exit;
   end
  else Button1.Hide;

 FillChar(DCB,Sizeof(DCB),0);
 DCB.DCBlength:=Sizeof(DCB);

 if not GetCommState(hCommFile,DCB)
  then
   begin
    ShowMessage('Error1');
    Exit;
   end;

 DCB.BaudRate:=9600;
 DCB.ByteSize:=8;
 DCB.Parity:=NOPARITY;
 DCB.StopBits:=ONESTOPBIT;

 if not SetCommState(hCommFile,DCB)
  then
   begin
    ShowMessage('Error2');
    Exit;
   end;

 FillChar(ct,Sizeof(ct),0);
 if not GetCommTimeouts(hCommFile,ct)
  then
   begin
    ShowMessage('Error3');
    Exit;
   end;

 ct.ReadIntervalTimeout:=1;
 ct.ReadTotalTimeoutMultiplier:=1;
 ct.ReadTotalTimeoutConstant:=10;
 ct.WriteTotalTimeoutMultiplier:=1;
 ct.WriteTotalTimeoutConstant:=5;

 if not SetCommTimeouts(hCommFile,ct)
  then
   begin
    ShowMessage('Error4');
    exit;
   end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
 S0: array[0..31] of Char;
 PData: Pointer;
 nWrite: Cardinal;
 CurrentState: TComStat;
 CodeError,AvaibleBytes,RealRead: Cardinal;
 S,FInBuf: String;
 i: Integer;
begin
 PurgeComm(hCommFile,PURGE_TXCLEAR or PURGE_RXCLEAR);

 FillChar(S0,32,0);
 StrPCopy(S0,Memo1.Text);

 if not WriteFile(hCommFile,S0,StrLen(S0),nWrite,nil)
  then
   begin
    ShowMessage('Can not write to port: ' + IntToStr(GetLastError));
    Exit;
   end
  else
   begin
    ShowMessage('Write to port: ' + IntToStr(nWrite) + ' bytes');
   end;

 ClearCommError(hCommFile,CodeError,@CurrentState);
 AvaibleBytes:=CurrentState.cbInQue;
 if AvaibleBytes > 0
  then
   begin
    GetMem(PData,AvaibleBytes);
    if not ReadFile(hCommFile,PData^,AvaibleBytes,RealRead,nil)
     then
      ShowMessage('Can not read from port: ' + IntToStr(GetLastError))
     else
      begin
       ShowMessage('Read ' + IntToStr(RealRead) + ' bytes');
       S:='';
       FInBuf:='';
       for i:=0 to RealRead-1 do
        begin
         S:=S+Char(Pointer(LongInt(PData)+i)^);
        end;
       FInBuf:=FInBuf + S;
       Memo2.Text:=FInBuf;
      end;
    FreeMem(PData);
   end;

CloseHandle(hCommFile);

end;

end.


Это сообщение отредактировал(а) Alex - 25.9.2005, 07:28
PM MAIL   Вверх
kolugd
Дата 2.10.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 31.1.2005

Репутация: нет
Всего: нет



Спасибо за "ценную" помощь!

А программу я всё-таки отладил!

Тема закрыта.
PM MAIL   Вверх
Гость_Артем
Дата 10.10.2005, 08:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте!!!
А где взять описание протокола работы с Метраном????
  Вверх
everererest
Дата 8.1.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.1.2009

Репутация: нет
Всего: нет



Уважаемые поделитесь pls программой для считывания
показаний с прибора Метран-900

                                                               [email protected]

Это сообщение отредактировал(а) everererest - 8.1.2009, 13:37
PM MAIL   Вверх
Maxximus
Дата 24.1.2009, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 24.1.2009

Репутация: нет
Всего: нет



Здравствуйте!
Подскажите, пожалуйста, какие числа вводятся при програмировании блока коммутации Метран-900 в регистры 100-113? Блок коммутации 1203, заводские настройки были изменены и теперь не можем добиться нормальных показаний:(((
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0675 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.