Перейти к содержанию
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 пользователей онлайн

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