91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667

MODBUS TCP SLAVE

31.10.2013, 17:01. Показов 6632. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Создать клиент модбас тсп без проблем получается на сокетах.
А вот сервер сокет никак.
Кидаю TServerSocket на форму, назначаю порт например 54545 и в каждом событии вывожу текс в мемо.
Использую неблокирующий тип.
Так вот, при запуске проги listen срабатывает.
На плк овен создаю модбас тсп мастер (или weintek) указываю порт, но коннекта нет.

Через wireshark вижу что пакеты идут на указанный порт.
В чем тут трабла?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2013, 17:01
Ответы с готовыми решениями:

Modbus RTU - Опрос Slave из программы с помощью библиотеки libmodbus
Здравствуйте. Имеется десяток модулей цифрового ввода, которые опрашиваю программой, написанной с помощью библиотеки libmodbus, по...

Протокол Modbus RTU/ASCII для режима Slave
Здравствуйте! Стоит задача реализовать протокол Modbus ASCII/RTU для режима Slave на Си. Программа modbus_tester будет опрашивать...

Эмулятор для Modbus RTU (slave и master) под Linux
Необходим эмулятор для отладки modbus rtu (slave и master). Работа предполагается только через последовательный порт

11
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
31.10.2013, 17:09  [ТС]
ВОт скрин с шарка.
Из этого мало что понимаю...может кто увидит проблему
Миниатюры
MODBUS TCP SLAVE  
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.10.2013, 17:45
А на хосте 192.168.2.60 порт 54545 вообще открыт ? Правила файрвола проверял ? Он точно не блокирует входящий трафик от клиентского хоста ?
1
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
01.11.2013, 11:27  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
А на хосте 192.168.2.60 порт 54545 вообще открыт ? Правила файрвола проверял ? Он точно не блокирует входящий трафик от клиентского хоста ?
блин, да, спасибо. Открыл порт, коннет пришел.

Что касается модбаса. Коннект установился и тут же отключился. Как поймать что хочет слейв и какие данные отослать чтоб не было отключения.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
01.11.2013, 12:13
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
Как поймать что хочет слейв
Судя хотя бы по описанию модбаса в Википедии идея у тебя поставлена с ног на уши.

Слейв - это ты, т.е. твоя программа с серверсокетом, а мастер - это тот самый "плк овен".
1
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
01.11.2013, 12:35  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Судя хотя бы по описанию модбаса в Википедии идея у тебя поставлена с ног на уши.

Слейв - это ты, т.е. твоя программа с серверсокетом, а мастер - это тот самый "плк овен".
Да. конечно у меня слейв(серв), плк - мастер, опечатался.

Соединение установленно, но данных никаких мне не приходит.
На мастере ожидание видимо каких то данных или по таймауту отключается.
Так вот не найду нигде что в этот момент ждет мастер от слейва.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
01.11.2013, 13:25
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
не найду нигде
как это нигде ?
На каждом же углу описание этого протокола)
Вот, например ..
1
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
01.11.2013, 16:28  [ТС]
В общем вот код.
Я как думал, что будет всё просто, когда клиент подключится, пришлет мне запрос в соответсвии с протоколом и я
увижу в МЕМО кол-во байт по событию ServerClientRead и тогда яб дальше копал, сформировал ответ и тд..

В реале вот с мемо

Server listen
getsocket
--CONNECT--
--ACCEPT--
write
read
0

Всё.
Другое устройство отключается по таймауту и коннектится заново.
Вот мне этот ноль смущает, ведь вместо него должны быть данные (запрос по протоколу).
Между собой (2 устройства) работают норм.
Чет у мя както не проходит тройное рукопожатие.
Что я упустил?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;
 
type
  TForm1 = class(TForm)
    M: TMemo;
    Server: TServerSocket;
    Button4: TButton;
    Button5: TButton;
    procedure Button4Click(Sender: TObject);
    procedure ServerAccept(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerClientError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerClientWrite(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerGetSocket(Sender: TObject; Socket: Integer;
      var ClientSocket: TServerClientWinSocket);
    procedure ServerListen(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  BufOut:array[1..12] of byte;
  BufIn:array[1..12] of byte;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button4Click(Sender: TObject);
begin
server.Active:=true;
end;
 
procedure TForm1.ServerAccept(Sender: TObject; Socket: TCustomWinSocket);
begin
m.Lines.Add('--ACCEPT--');
end;
 
procedure TForm1.ServerClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
m.Lines.Add('--CONNECT--');
end;
 
procedure TForm1.ServerClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
m.Lines.Add('--DISCONNECT--');
end;
 
procedure TForm1.ServerClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
m.Lines.Add('====ERRORE=== '+inttostr(errorcode));
errorcode:=0;
end;
 
procedure TForm1.ServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var s : byte;
  begin
m.Lines.Add('read');
s:=server.Socket.ReceiveLength;
m.Lines.Add(inttostr(s));
end;
 
procedure TForm1.ServerClientWrite(Sender: TObject;
  Socket: TCustomWinSocket);
  var s:byte;
  begin
m.Lines.Add('write');
end;
 
procedure TForm1.ServerGetSocket(Sender: TObject; Socket: Integer;
  var ClientSocket: TServerClientWinSocket);
begin
m.Lines.Add('getsocket');
end;
 
procedure TForm1.ServerListen(Sender: TObject; Socket: TCustomWinSocket);
begin
m.Lines.Add('Server listen');
end;
 
end.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
01.11.2013, 16:31
s:=server.Socket.ReceiveLength;
1
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
01.11.2013, 16:34  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
s:=server.Socket.ReceiveLength;
ДА! работает!
а из моего кода с какого я просил получается сокета? не с существующего?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
01.11.2013, 16:38
с того который слушает вх.запросы на подключение, а не с того который уже подключен к конкретному клиенту и через который, собственно, и осуществляется весь инф.обмен с данным конкретным клиентом.
1
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
01.11.2013, 16:42  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
с того который слушает вх.запросы на подключение, а не с того который уже подключен к конкретному клиенту и через который, собственно, и осуществляется весь инф.обмен с данным конкретным клиентом.
Понял. Большое СПАСИБО!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2013, 16:42
Помогаю со студенческими работами здесь

Мой вариант реализации Modbus Slave RTU/ASCII на Arduino
Простая библиотека Modbas Slave для микроконтроллеров Arduino Здесь есть описание и видео обзор ...

Modbus TCP/IP
Здравствуйте, форумчане. Появилась задача, в которой необходимо реализовать несколько устройств контроля и управления на базе stm32f7....

Modbus Slave на CPU 6ES7 510-1DJ01-0AB0, CM PtP 6ES7 137-6AA00-0BA0
Всем доброго. Возникла следующая проблема. Надо организовать на контроллере сименс модбас слейв. Конфигурация следующая собрана...

Проблемы с подключенияем по Modbus TCP
Один и тот же код в разных программах. Одна библиотека подключена. Тем не менее в одной программе подключается нормально, а в другой...

МК vs WinCC через Modbus TCP
Добрый день. Начинаю осваивать siemens. Ранее выполняемые работы: программирование МК, ПЛИС, драйвера под Windows XP..... Со скада...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru