@dlangru

Страница 585 из 719
Oleg
01.06.2018
17:53:30
но спасибо)

Ievgenii
01.06.2018
17:53:46
Вообще, ситуация, когда ты пытаешься читать из сокета без нужды - странная

Oleg
01.06.2018
17:54:14
modbus slave устройство всегда мониторит шину

но у modbus есть вариация с другим физическим уровнем - TCP

Google
Ievgenii
01.06.2018
17:54:54
Попробуй читать из закрытого

Может там будет exception

Oleg
01.06.2018
17:55:16
хорошо, проверю

Ievgenii
01.06.2018
17:55:19
Это не хорошо, но можно на него завезаться

Pavel
01.06.2018
17:56:46
Что-то мне подсказывает что в TCP протоколе вообще все плохо с отключением

Ievgenii
01.06.2018
17:56:55
К стати, как вы компилите? Я вот пробовал в докере - удобно. Даже dmd не ставил)

Pavel
01.06.2018
17:57:16
Ты никак не можешь понять произошло ли оно

Ievgenii
01.06.2018
17:57:33
Ну есть нюансы

До 5 минут может "обманывать"

Но если это постоянное соединение - пинги спасут

Oleg
01.06.2018
17:58:32
К стати, как вы компилите? Я вот пробовал в докере - удобно. Даже dmd не ставил)
я по старинке: ставлю компилятор, dub прямо в систему без контейнеров всяких

Google
Oleg
01.06.2018
17:59:09
а может так случиться, что клиент "зайдёт под другим именем"?

Pavel
01.06.2018
17:59:39
Мне в докере неудобно, во-первых dub кеш каждый раз заново выкачивается, во вторых ни dcd ничего нельзя подключить к редактору

Oleg
01.06.2018
17:59:40
типа из-за плохой связи он не сможет достучаться, и откроет новое соединение, а сервер будет думать что просто тишина

Oleg
01.06.2018
18:00:32
типа из-за плохой связи он не сможет достучаться, и откроет новое соединение, а сервер будет думать что просто тишина
и клиент будет пытаться установить новое соединение, а сервер настроен как listen(1)

Pavel
01.06.2018
18:01:30
Так кеш можно монтировать
Можно, но иногда хочется и компилятор просто так запустить. Справку почитать, в разных режимах собрать бинарник. Если через докер все это делать то указание опций усложняется.

В итоге я все равно вернулся на LXC контейнер

Oleg
01.06.2018
18:02:02
Тоже может быть
какой-то способ обхода есть?

ну может id какой, чтобы по тему принудительно старое рвать если новый с таким же id соединяется?

Pavel
01.06.2018
18:03:33
Да, можешь сделать высокоуровневый id

Чтобы клиент свой id посылал, а у тебя уже будет хешмап, подключен ли такой id

Oleg
01.06.2018
18:03:55
Да, можешь сделать высокоуровневый id
на уровне передаваемых данных уже, да?

Pavel
01.06.2018
18:04:06
А на уровне TCP это никак не решить, так уж спроектировано.

Oleg
01.06.2018
18:04:31
Чтобы клиент свой id посылал, а у тебя уже будет хешмап, подключен ли такой id
не подойдёт в моей ситуации, протокол не позволяет)

тоесть modbus чётко регламентирован и добавлять туда свои id будет неправильно (потеряется совместимость с существующим софтом)

вообще может такое быть, что, например я отправил 250 байт с клиента, а серверу (slave'у по TCP) они в рваном формате пришли и я их там читаю по 10-20?

или может вообще с другой стороны обыграть ситуацию: при запросе каждый раз открывать соединение, а на принимающей стороне не хранить сокет с клиентом?

или это совсем дурно?

Google
Maxim
01.06.2018
18:31:56
https://theartofmachinery.com/2018/05/27/cpp_classes_in_betterc.html — надо будет на досуге разобраться и поиграться с этим)

Oleg
01.06.2018
18:37:05
Может
а где-то можно почитать про размер неразрывных пакетов? сколько байт точно будут одним скопом идти

Pavel
01.06.2018
18:38:16
Не знаю.. думаю что зависит от размера буфера сетевой карты, операционной системы, настроек сети.. MTU там какие-нибудь

TCP может окно сужать и расширять чтобы посылать больше/меньше данных

Но 1 байт я думаю это точно неразрывная порция данных )

Так что можешь посылать в первом байте признак начала данных, потом еще 2-3 байта на длину данных, а потом уже понимать сколько данных ты ждешь.

Pavel
01.06.2018
18:41:16
А сколько она байт?

Oleg
01.06.2018
18:41:24
вернее длину посылаю по протоколу modbus tcp

А сколько она байт?
максимально 260 байт кажется

весь adu

pdu для rtu и tcp одинаковый и где-то 240 байт, кажется

pdu - полезная нагрузка по сути

adu = pdu + служебная информация

Pavel
01.06.2018
18:53:13
блин это класс
И почему бы компилеру ошибку не выбросить, непонятно.

Google
Ievgenii
01.06.2018
19:14:53
При любом новом соединении просто закрывай старое и бери в работу новое соединение

Если это не что-то публичное!

Иначе будет проблема с безопасностью и логически будет не верно

Oleg
01.06.2018
19:15:52
не принято так делать, понял

Ievgenii
01.06.2018
19:16:26
Ну любое новое соединение тебя отрубает от сервака

Это не верно

Но если это исключительно внутренее - то никто кроме тебя это сделать не может

То так прокатит

Oleg
02.06.2018
09:37:30
В modbus tcp слейвы инициируют соединения?
slave как сервер, не иницирует соединение, только отвечает

Минимальный mtu 700 примерно байт
то есть всегда 700 байт неразрывно придёт?

Ievgenii
02.06.2018
10:29:02
Я бы на это не рассчитывал

Клиент сам может слать по 20 байт

Или 37

qwerty
02.06.2018
10:34:14
есть метод для конкатенации ассоциативных массивов?

Oleg
02.06.2018
11:35:26
есть метод для конкатенации ассоциативных массивов?
из-за того что это неоднозначная задача, думаю в стандартной поставке нет

Клиент сам может слать по 20 байт
ну да, но придут они не 15 и 5, а все 20 за раз же

qwerty
02.06.2018
11:36:16
Да я так и понял уже

Google
Ievgenii
02.06.2018
11:36:47
Если клиент отослал 15 байт

И через 0.3 сек. шлёт ещё 7 байт

До сервера так и дойдет

Нужно основываться на то, сколько пришло, а не на то, сколько может прийти

Oleg
02.06.2018
11:39:25
До сервера так и дойдет
это то понятно, но send же сам не режет пакеты?

если они в пределах mtu

Ievgenii
02.06.2018
11:39:44
Нет

Не режет

Oleg
02.06.2018
11:41:35
надо почитать про modbus tcp, мне кажется там положено один запросов в один send запаковывать

Pavel
02.06.2018
11:43:26
это то понятно, но send же сам не режет пакеты?
Но почему бы эти пакеты не порезать промежуточным роутерам, такое может произойти имхо

Oleg
02.06.2018
11:43:55
в rtu там вообще по стандарту 3.5 байта времени если между байтами приходит, то это разные пакеты

Pavel
02.06.2018
11:46:41
беда...
Хотя с другой стороны пакет может собираться на получателе в изначально требуемую длину. Надо в общем таненбаума перечитывать

Ievgenii
02.06.2018
11:47:33
А что ты там такое пишешь?

Oleg
02.06.2018
11:49:27
3.5 времени передачи одного байта

в зависимости от скорости передачи

А что ты там такое пишешь?
https://github.com/deviator/modbus

Ievgenii
02.06.2018
11:53:54
Я не шарю что это такое)

Зачем применяется?

Страница 585 из 719