Перейти к содержанию
Fire Monkey от А до Я
  • 0

Электросчетчики "Меркурий" - Отправка (получение) данных с IP адреса


d7d1cd

Вопрос

Опубликовано

Привет всем. Возникла необходимость через интернет работать с устройством: отправлять в него данные и получать данные от устройства. У устройства в сети есть статический IP адрес и строго задан порт для данных. Подскажите с помощью каких компонентов (функций, методов) можно решить мою задачу?

Рекомендуемые сообщения

  • 0
Опубликовано
5 часов назад, Rusland сказал:

d7d1cd, мне вот интересно, конечная цель - получить показания счетчика? 

Показания, профиль мощности, журналы событий, тарифное расписание и еще много того, что хранит счетчик. Вообще получить все это я могу, но только когда счетчик рядом. Сейчас же я хочу научиться получать эти данные, когда счетчик далеко.

  • 0
Опубликовано

А с каким именно прибором вы хотите установить связь? С их роутером VR-006 или с преобразователями интерфейсов VR-001-5 ? Роутер, как я понял настраивается как прозрачный шлюз на преобразователи интерфейсов? Тупо пересылает пакеты, а преобразователи интерфейсов  пересылают обратно? 

Если все так, то протокол TCP/IP. Компонет TIdTCPClient, а лучше TIdTCPServer. 

Если вы умеете общаться с счетчиком по USB, то есть вариант проще - найдите дешевый телефон с поддержкой OTG (можно найти за тысячи полторы), китайский OTG переходник с подзарядкой и втыкайте USB преобразователя интерфейса (или счетчика, если есть такие) прямо в смартфон. На телефоне пишите приложение, которое будет работать с счетчиком по USB, а отдавать данные как вам удобнее, от смс и email, до http сервера и push сообщения. Весь этот колхоз будет раза в три дешевле колхоза с приведенного вами сайта. Хотя на сайте штуки прикольные, подумаю о покупке некоторых изделий.

  • 0
Опубликовано

С тем, как работает роутер VR-006, понятно. Теперь вопрос какой именно компонент использовать: TIdTCPClient или TIdTCPServer? Вроде ранее обсуждалось, что прибор (то есть счетчик через VR-006) - это источник данных, поэтому надо использовать компонент Клиент. В последнем сообщении говорится, что надо использовать Клиент, а лучше Сервер. Исходя из того, что я никогда не работал ни с одним из указанных компонентов, то подскажите, что конкретно мне использовать?

  • 0
Опубликовано
26 минут назад, d7d1cd сказал:

подскажите, что конкретно мне использовать

Если счетчик сам ничего не посылает (т.е. посылает только данные в ответ на какой-то конкретный запрос), то TIdTCPClient будет вполне достаточно.

  • 0
Опубликовано

Все верно. Счетчик сам ничего послать не может. Он только дает ответы на запросы. Теперь понятно, мне нужен компонент TIdTCPClient. Спасибо за помощь.

Теперь далее... При работе через СОМ порт я отправляю в него запросы в виде массивов байт. Подскажите, как теперь эти же массивы байт отправлять через компонент TIdTCPClient на определенный IP и порт?

  • 0
Опубликовано
25 минут назад, d7d1cd сказал:

как теперь эти же массивы байт отправлять через компонент TIdTCPClient на определенный IP и порт

Насколько я помню, там идет работа через его свойство IOHandler, а у него есть методы типа SendStream, SendString и т.д. Лично я, когда работал с ним (правда давно это было), писал свой IOHandler, наследуясь от TIdIOHandlerStack и там реализовывал практически всю логику работы с сервером - правда пришлось немало времени потратить на то чтобы разобраться как это все работает. Но можно на этом не заморачиваться и использовать методы Send... и WaitFor у IOHandler-а, создаваемого по-умолчанию

  • 0
Опубликовано
10 часов назад, d7d1cd сказал:

Все верно. Счетчик сам ничего послать не может. Он только дает ответы на запросы. Теперь понятно, мне нужен компонент TIdTCPClient. Спасибо за помощь.

Теперь далее... При работе через СОМ порт я отправляю в него запросы в виде массивов байт. Подскажите, как теперь эти же массивы байт отправлять через компонент TIdTCPClient на определенный IP и порт?

Вот тут расписано как и что https://forums.embarcadero.com/thread.jspa?threadID=211952

  • 0
Опубликовано (изменено)
uses
  System.Net.Socket;

Procedure Sample;
var
  Socket: TSocket;
  LBytes: TBytes;
Begin
  Socket := TSocket.Create(TSocketType.TCP);
  try
    // ну только ваш ип
    Socket.Connect(TNetEndpoint.Create(192, 168, 1, 1, 8081));
    LBytes := [233, 123, 001, $FF];
    Socket.Send(LBytes);
  finally
    Socket.Free;
  end;
End;
{ TvkDatabase }

function TvkDatabase.getCit

 

Изменено пользователем Сысоев Максим
ну там еще пару проверок на состояние сокета внесете
  • 0
Опубликовано
1 час назад, Сысоев Максим сказал:

uses
  System.Net.Socket;

Procedure Sample;
var
  Socket: TSocket;
  LBytes: TBytes;
Begin
  Socket := TSocket.Create(TSocketType.TCP);
  try
    // ну только ваш ип
    Socket.Connect(TNetEndpoint.Create(192, 168, 1, 1, 8081));
    LBytes := [233, 123, 001, $FF];
    Socket.Send(LBytes);
  finally
    Socket.Free;
  end;
End;
{ TvkDatabase }

function TvkDatabase.getCit

 

Вижу, что тут компонент TIdTCPClient вообще не используется. Так же здесь приведен пример отправки массива байт. А как получить ответ с этого же IP и порта?

  • 0
Опубликовано (изменено)

Да пожалуйста) 

procedure nnn;
var
  socket: TSocket;
  LBytes: TBytes;
  LRecesiv: TBytes;
Begin
  socket := TSocket.Create(TSocketType.TCP);
  try
    // ну только ваш ип
    socket.Connect(TNetEndpoint.Create(192, 168, 1, 1, 8081));
    LBytes := [233, 123, 001, $FF];
    socket.Send(LBytes);
    while True do //
    Begin
      if socket.Receive(LRecesiv) = 0 then
        Continue; // если ничего не пришло - опять запрашиваем инфу
      if LRecesiv = LBytes then
        socket.Send([66, 124]);
    End;
  finally
    socket.Free;
  end;
end;

 

Изменено пользователем Сысоев Максим
ну компилируется

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...