Segnetics

Вернуться   Segnetics > Форум Segnetics > Вопросы о Matrix

Вопросы о Matrix Работа и применение контроллеров Matrix.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.10.2019, 14:59   #91
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от gcvdsv Посмотреть сообщение
Не подскажите, как отсюда получить /projects/history_data ? как я понял данные тут data.sqlite-wal
Ну, как-то так, например:

Извлечь последние 10 значений из базы:

Код:
plink -pw segnetics root@192.168.111.2 sqlite3 -csv /projects/history_data/data.sqlite 'select datetime(timestamp/1000,'\''unixepoch'\''),id_variable,real_value,int_value from value order by timestamp desc limit 10;'


Цитата Думаю, именно из-за тайм-аутов. У скулайта большие операции не разложены на атомы, как у взрослых систем. Поэтому возможны очень длительные блокировки.
Идеализировать "взрослые системы" не нужно, законы физики на них тоже действуют.

Если вспоминать анекдоты, то здесь подходит такой:

- Доктор, когда я делаю вот так, у меня тут болит.
- А Вы так не делайте.


Миниатюры
Нажмите на картинку для увеличения

Название:  history_data.png
Просмотров: 850
Размер:  19.1 Кбайт  
Gel вне форума   Ответить с цитированием
Благодарность от:
Старый 29.10.2019, 18:11   #92
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от Gel Посмотреть сообщение
Извлечь последние 10 значений из базы:
'select datetime(timestamp/1000,'\''unixepoch'\''),id_variable,real_value,int _value from value order by timestamp desc limit 10;'[/CODE]
На этом примере я могу объяснить почему сделал длинный кортеж.
1. Здесь ключевое поле будет состоять из двух столбцов timestamp и id_variable.
2. К каждому значению переменной будет добавляться timestamp это примерно удвоение объема данных
3. Переменная не может быть одновременно real_value и int_value. Одно поле лишнее - это примерно утроение объема сохраняемых данных
Чтобы компенсировать, необходимо вводить апертуры и сжимать данные.
4. При чтении нескольких значений для конечного представления добавится объединение.
5. Некоторые значения могут быть пропущены и при объединении заменятся на NULL, придется подставлять старые данные. Либо это делать дальше при отображении.
6. Теряется сам NULL как показатель, что данные были недостоверные. Придется заменить либо +Inf либо -Inf. Теряется автоматическое заполнение.
Понятно, что способ плохенький. Ограничения тоже понятны.
Единственный (на мой взгляд) правильный выход - поле с двоичными данными, что и сделано например у Siemens на сервере данных. У других не видел.
Пока это не мой уровень.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 29.10.2019, 20:48   #93
младшой
Senior Member
 
Регистрация: May 2010
Адрес: Москва
Сообщения: 857
Благодарил(а): 4 раз(а)
Поблагодарили: 85 раз(а) в 66 сообщениях
По умолчанию Ответ: Функционал

Какое отношение имеет это соревнование в длине "аргументов" к контроллерам Matrix?
младшой сейчас на форуме   Ответить с цитированием
Старый 29.10.2019, 22:17   #94
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от Arsie Посмотреть сообщение
[I][B]
Сделать SQLite DB доступным для общего сетевого диска...
Не рекомендуется делать это
Спасибо за информацию. С этим пунктом согласен.
Цитата:
Сообщение от Arsie Посмотреть сообщение
Я лично считаю, что нужно устанавливать mySQL и использовать её.
Как ставить пакеты из репо дебиана: https://forum.segnetics.com/showthread.php?t=3067
Несколько моментов.
Правильно брать протестированные версии с официального репозитория сообщества. В Вашем случае с Вашего репозитория. Остальное на свой страх и риск и требуется тестирование и наработка. Это Вы так же отмечали посте про репозитории.
Например мы поставили с репозитория дебиана. Собранные данные нужно как-то передать в базу данных. Готового интерфейса от Вас нет - это значит через С,С++ и др. Собирать данные с 485 интерфейса и вашей шины, можно через только через лоджик, так как это обмен через драйверы уровня ядра. Передать в базу далее можно будет только по одной переменной через шмемы. Это непреодолимое препятствие. Больше нескольких десятков каналов терпения не хватит.
Пока Вами (ни у кого другого просто нет доступа) не будет решен вопрос с формированием массивов и передачи массива хотя бы с входов в шмемы, нет смысла даже пробовать, как бы руки ни чесались.
Нужны связи типа массив.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 29.10.2019, 22:31   #95
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
Собирать данные с 485 интерфейса ... можно через только через лоджик
Собирать данные с 485 совсем не обязательно через лоджик. И по скоростному интерфейсу, я думаю, если очень захотеть, то можно забирать данные напрямую.


Добавлено через 2 минуты

Цитата Передать в базу далее можно будет только по одной переменной через шмемы.
Это тоже какое-то странное утверждение. Что значит "по одной"?

Цитата Больше нескольких десятков каналов терпения не хватит.
Вы же не в ручную будете данные вбивать в базу данных, какое терпение, причем здесь это?


Добавлено через 5 минут

Цитата:
Сообщение от ujin Посмотреть сообщение
На этом примере я могу объяснить почему сделал длинный кортеж.
1. Здесь ключевое поле будет состоять из двух столбцов timestamp и id_variable.
2. К каждому значению переменной будет добавляться timestamp это примерно удвоение объема данных
Совсем не очевидно, что для каждого значения переменной нужно фиксировать время.

Если сбор идет интервалами, то, если допустимо, можно фиксировать только одно значение времени -- средину этого интервала.

Отдельные колонки в БД имеет смысл делать, если они нужны для построения запросов (фильтров). Иначе, можно все упаковать в одну строку.
Gel вне форума   Ответить с цитированием
Старый 29.10.2019, 23:02   #96
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от младшой Посмотреть сообщение
Какое отношение имеет это соревнование в длине "аргументов" к контроллерам Matrix?
В виде матрикса заявлен новый уровень от компании Сегнетикс. На сайте озвучены новые цифры на порядок больше предыдущих.
При этих цифрах функционал это далеко не только железка. Тут есть чего обсудить.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 30.10.2019, 08:52   #97
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от Gel Посмотреть сообщение
Собирать данные с 485 совсем не обязательно через лоджик. И по скоростному интерфейсу, я думаю, если очень захотеть, то можно забирать данные напрямую.
Это обсуждалось. Тогда нужно убрать опрос с лоджика.
И сделать свой опрос. Поднять службу, настроить systemd, определить какой нужен и проверить джиттинг. Решить что делать если цикл сместился - задержать все последующие, начать следующий раньше, пропустить. Решить синхронизировать ли приход всех параметров со всех модулей или запустить в параллель.
Нас не устроил OPC Сервер от ICPCON мы сделали свой опрос MODBUS TCP. Сложная, трудоемкая задача. Но у нас не было выхода. Было несколько сбоев обмена в сутки.
Задача должна решаться на уровне Сегнетикс.
Цитата
Сообщение от Gel Посмотреть сообщение
Это тоже какое-то странное утверждение. Что значит "по одной"?
Вы же не в ручную будете данные вбивать в базу данных, какое
терпение, причем здесь это?
Это значит из карты мы переменные вытаскиваем на поляну по одной, размещаются на поляне по одной, связи от каждой нужно тянуть по одной. Когда можно сделать выход типа массив, связь типа массив (потолще) вход типа массив. Поставить на поляну в виде одной переменной, соединить одной жирненькой связью с последующим блоком или шмемом типа массив.
Хотел бы показать на картинке образец, да у меня закончился лимит.
Как говорят наши коллеги "Все, что хотел сказать я все сказал а все что хотел промолчать я все промолчал."

Цитата
Сообщение от Gel Посмотреть сообщение
Совсем не очевидно, что для каждого значения переменной нужно фиксировать время.
Если сбор идет интервалами, то, если допустимо, можно фиксировать только одно значение времени -- средину этого интервала.
Согласен. Допустим цикл опроса 100 мс. Возможно 3 пропуска. Точность фиксации общего массива переменных будет без сбоев около +-100 мс, со сбоями до 300 мс. Если приемлемы такие цифры то да.
Цитата
Сообщение от Gel Посмотреть сообщение
Отдельные колонки в БД имеет смысл делать, если они нужны для построения запросов (фильтров). Иначе, можно все упаковать в одну строку.
И тут мы таки добрались до основного правила нашего кладовщика: Главное не как положить, а как ты это потом будешь брать.
У меня дальше было 2 варианта MS Office или самодельный trend viewer. И в том и другом случае меньше затрат и на код и на чтение с таким как у меня подходом.
А когда я пробовал передать данные на WEB страницу по методу ATS, то лучше паковать в JSON, тогда уж и хранить лучше timestamp + поле типа JSON (в Postgres). Это не пробовал и это как бы ручная настройка.
Если производитель выберет способ уже можно смотреть и приспосабливаться.
Напоследок пример web интерфейса. Издевательство над моим мозгом. Предел около 10000 параметров в секунду: https://ni.github.io/webvi-examples/..._Web%20Server/
Доказывает реализуемость web интерфейса, если сделать попроще.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 30.10.2019, 09:39   #98
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
Это обсуждалось. Тогда нужно убрать опрос с лоджика.
И сделать свой опрос. Поднять службу, настроить systemd, определить какой нужен и проверить джиттинг. Решить что делать если цикл сместился - задержать все последующие, начать следующий раньше, пропустить.
Это у нас все есть, мы это делали. Это для нас не сложно. По поводу джиттинга -- целесообразность этого вообще сомнительна.

Цитата Нас не устроил OPC Сервер от ICPCON мы сделали свой опрос MODBUS TCP. Сложная, трудоемкая задача. Но у нас не было выхода.
Для нас это не сложная задачи и мы это используем. Взять тот же пример с "базой рецептов".
Gel вне форума   Ответить с цитированием
Старый 30.10.2019, 14:59   #99
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 740
Благодарил(а): 12 раз(а)
Поблагодарили: 192 раз(а) в 188 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
Это обсуждалось. Тогда нужно убрать опрос с лоджика.
И сделать свой опрос. Поднять службу, настроить systemd, определить какой нужен и проверить джиттинг. Решить что делать если цикл сместился - задержать все последующие, начать следующий раньше, пропустить. Решить синхронизировать ли приход всех параметров со всех модулей или запустить в параллель.
Кажется лоджик сам и не опрашивает. Только указывает службе что читать-писать и где.
Вот порты при этом уже используются монопольно. Да и синхронизации там нет.

Цитата Нас не устроил OPC Сервер от ICPCON мы сделали свой опрос MODBUS TCP. Сложная, трудоемкая задача. Но у нас не было выхода.
Чем сложная?

Цитата Это значит из карты мы переменные вытаскиваем на поляну по одной, размещаются на поляне по одной, связи от каждой нужно тянуть по одной. Когда можно сделать выход типа массив, связь типа массив (потолще) вход типа массив. Поставить на поляну в виде одной переменной, соединить одной жирненькой связью с последующим блоком или шмемом типа массив.
Массив это такая разная штука по определению.

Цитата А когда я пробовал передать данные на WEB страницу по методу ATS, то лучше паковать в JSON
Никогда не предлагал метода по передаче данных. Опять мягкое с тёплым? Кстати там в классе есть и функция которая передает array.

Цитата Напоследок пример web интерфейса. Издевательство над моим мозгом. Предел около 10000 параметров в секунду: https://ni.github.io/webvi-examples/..._Web%20Server/
Доказывает реализуемость web интерфейса, если сделать попроще.
За ссылку на WebVI спасибо. А подход на сегодня самый обычный - svg, js и css. Примерчик от Инсата MS4D.
Сделано аналогично.

А вот визуализацию в Смарте на основе FBD считаю точно тупиковой.

Последний раз редактировалось ATS, 30.10.2019 в 15:11
ATS вне форума   Ответить с цитированием
Старый 30.10.2019, 15:53   #100
Lenprom
Новичок
 
Регистрация: Nov 2009
Сообщения: 22
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Функционал

Прошу прощения за простой вопрос: я правильно понимаю, что в новом контроллере будет тот же SMLogik в качестве среды программирования?
Lenprom вне форума   Ответить с цитированием
Старый 30.10.2019, 16:20   #101
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от ATS Посмотреть сообщение
Чем сложная?
Для меня была сложность в распараллеливании обмена и соблюдении точного такта. Зачем соблюдение точного такта неочевидно, следовательно можно не рассматривать.
Распараллеливание обмена понятно для большей скорости и снижения нагрузки на основной цикл.
Модулей ввода вывода постепенно становится более 60. Количество нефиксированное, может меняться в процессе работы, необходимо менять на ходу.
У модуля может измениться IP так же на ходу.
Модуль может быть выведен из обмена, так же на ходу.
У модуля может поменяться таблица переменных так же на ходу (можем поменять тип).
Возникает необходимость смены переменных как входных так и выходных так же на ходу.
Единственно на что я не решился менять полный список параметров без остановки программы. Перевыделение массивов может привести к приостановке основного цикла.
В общем небольшие объекты в более крупной установке останавливать можно, целиком установку реже, весь объект еще реже.
Зачем - у нас на доске написана сумма простоя за один час работы.
Цикл опроса модуля: соединение - запись, ожидание ответа, запись в общий массив(далее по циклу) - разрыв связи только при останове обмена или завершении программы. Соединение держим.
Для того, чтобы ожидание ответа из TCP стека не тормозило все остальное, необходимо обмен с одним модулем вывести в отдельный поток.
Составить таблицу потоков, контролировать, что живые, синхронизировать начало обмена, остановить по завершении.
Каждый поток записывает запрос в стек (50 микросекунд) не зная про другие потоки. Сетевая карта и драйвер сами разруливают очередь. Далее сетевая карта с максимально возможной скоростью передает пакеты в switch. Switch раздает запросы по адресам. Модуля параллельно отвечают. Switch заталкивает назад в сетевую карту, она раздает по соединениям. Блоки TCP чтения в потоках дождавшись необходимого количества данных передают дальше, чуть обработки и в общий массив.
Для меня было сложно.
Если все остальные оценивают это как легко, значит для Сегнетикса тоже легко.
Преимущества: Cкорости бешеные. Провод - восемь дешевых проволочек свитых попарно, разъемы копеечные. Свичи промышленные 8 канальные работают и работают ай-ай-ай за 126 баксов.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 30.10.2019, 17:13   #102
Ilya J.
Сотрудник Сегнетикс
 
Аватара для Ilya J.
 
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 302
Благодарил(а): 0 раз(а)
Поблагодарили: 254 раз(а) в 250 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от Lenprom Посмотреть сообщение
Прошу прощения за простой вопрос: я правильно понимаю, что в новом контроллере будет тот же SMLogik в качестве среды программирования?
Понимаете правильно, обновленная версия SmLogix, она уже доступна покупателям матрикса и позже выйдет в релиз.


__________________
Если ничто другое не помогает, прочтите, наконец, инструкцию
Ilya J. сейчас на форуме   Ответить с цитированием
Старый 30.10.2019, 17:33   #103
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
Если все остальные оценивают это как легко, значит для Сегнетикса тоже легко.
Вообще, сделать реализацию MODBUS/TCP и "обеспечить динамическое конфигурирование службы на лету" -- это, мягко говоря, совершенно разные задачи.

Цитата Цикл опроса модуля: соединение - запись, ожидание ответа, запись в общий массив(далее по циклу) - разрыв связи только при останове обмена или завершении программы. Соединение держим.
Для того, чтобы ожидание ответа из TCP стека не тормозило все остальное, необходимо обмен с одним модулем вывести в отдельный поток.
Составить таблицу потоков, контролировать, что живые, синхронизировать начало обмена, остановить по завершении.
В языке Go, например, ничего этого не нужно делать. Поэтому, сложность реализации зависит от используемого инструмента.
Gel вне форума   Ответить с цитированием
Старый 30.10.2019, 18:58   #104
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 740
Благодарил(а): 12 раз(а)
Поблагодарили: 192 раз(а) в 188 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
Для меня была сложность в распараллеливании обмена и соблюдении точного такта. Зачем соблюдение точного такта неочевидно, следовательно можно не рассматривать.
Распараллеливание обмена понятно для большей скорости и снижения нагрузки на основной цикл.
Модулей ввода вывода постепенно становится более 60. Количество нефиксированное, может меняться в процессе работы, необходимо менять на ходу.
У модуля может измениться IP так же на ходу.
Модуль может быть выведен из обмена, так же на ходу.
У модуля может поменяться таблица переменных так же на ходу (можем поменять тип).
Возникает необходимость смены переменных как входных так и выходных так же на ходу.
Ааа, так Вы опять про красивую лошадь...

Цитата Далее сетевая карта с максимально возможной скоростью передает пакеты в switch. Switch раздает запросы по адресам. Модуля параллельно отвечают. Switch заталкивает назад в сетевую карту, она раздает по соединениям. Блоки TCP чтения в потоках дождавшись необходимого количества данных передают дальше, чуть обработки и в общий массив.
Дух захватывает. Вот только Вы тут при чем?

Цитата Преимущества: Cкорости бешеные. Провод - восемь дешевых проволочек свитых попарно, разъемы копеечные. Свичи промышленные 8 канальные работают и работают ай-ай-ай за 126 баксов.
Вы правда верите в 100 мегабит на модулях? А там часто Эзернет в уарт, который и мегабита не даст. Плюс проц будет на пару секунд задумываться на каждый запрос.
Реально с модуля получаете 40 байт и гоняете по сетке пустые пакеты.
Да и провода-то у Вас лишние для сотки...
ATS вне форума   Ответить с цитированием
Старый 30.10.2019, 20:09   #105
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от ATS Посмотреть сообщение
Ааа, так Вы опять про красивую лошадь...
Я про возможности.
Цитата
Сообщение от ATS Посмотреть сообщение
Дух захватывает. Вот только Вы тут при чем?
Я использую. Так процесс понятнее, что данные на всех этапах движутся как бы параллельно.
Цитата
Сообщение от ATS Посмотреть сообщение
Вы правда верите в 100 мегабит на модулях? А там часто Эзернет в уарт, который и мегабита не даст. Плюс проц будет на пару секунд задумываться на каждый запрос.
Реально с модуля получаете 40 байт и гоняете по сетке пустые пакеты.
Да и провода-то у Вас лишние для сотки...
Зачем гадать. Попробуйте погонять данные с контроллеров сегнетикс начиная с 2Gi. Подать с генератора на входы.
3 одновременных MODBUS TCP соединения на нем я точно пробовал. Всем мене чем за 1 мс отвечает с тактом 100 мс. Данные обновляет согласно внутреннему такту, как приходят со входов. Wireshark же знаете. Весь обмен четко видно. При этом время цикла контроллера тоже видно. Все работает как часы. Я поэтому удивляюсь зачем что-то еще придумывать.
Провода не лишние. Запасные.


Добавлено через 23 минуты

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


Добавлено через 50 минут

Цитата
Сообщение от ATS Посмотреть сообщение
Вы правда верите в 100 мегабит на модулях? А там часто Эзернет в уарт, который и мегабита не даст. Плюс проц будет на пару секунд задумываться на каждый запрос.
Если Вы имеете в виду конкретные модули серии ET7000, в них добавлена сетевая карта. Процессор не грузит. Данные так же обновляются с заявленной производителем периодичностью. Сомнения если есть, могу тест на видео снять.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 31.10.2019, 11:10   #106
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 020
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
Передать в базу далее можно будет только по одной переменной через шмемы. Это непреодолимое препятствие. Больше нескольких десятков каналов терпения не хватит.
Копипаст?



Цитата:
Сообщение от ujin Посмотреть сообщение
Пока Вами (ни у кого другого просто нет доступа) не будет решен вопрос с формированием массивов и передачи массива хотя бы с входов в шмемы, нет смысла даже пробовать, как бы руки ни чесались.
Нужны связи типа массив.
FBD - это язык визуального программирования. Т.е. в любом случае на каком-либо этапе создания проекта будет протяжка десятков атомарных связей. Не к переменным, так к массиву. Не к массиву, так от входов. От этого никуда не уйти. Иначе он из понятного визуального языка превратится непонятного мутанта.


Добавлено через 8 минут

Цитата
Сообщение от ATS Посмотреть сообщение
За ссылку на WebVI спасибо. А подход на сегодня самый обычный - svg, js и css. Примерчик от Инсата MS4D.
Картинки нашей Автоскады облагородили, а вот с качеством реализации у них как обычно "На отвали"))


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 31.10.2019, 11:25   #107
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от Arsie Посмотреть сообщение
Копипаст?
Все по памяти.
Цитата:
Сообщение от Arsie Посмотреть сообщение
FBD - это язык визуального программирования. Т.е. в любом случае на каком-либо этапе создания проекта будет протяжка десятков атомарных связей. Не к переменным, так к массиву. Не к массиву, так от входов. От этого никуда не уйти. Иначе он из понятного визуального языка превратится непонятного мутанта.
Входы сразу в массивы. У меня 2 - регистры и bool.
Далее посчитать индекс переменной - номер модуля, номер канала. После обработки регистры передаются в массив с вещественными числами. Выбор из массива можно по переменной типа Enum сразу с названием.
С этим уже можно вполне комфортно жить. Попробуйте. Радикальное сокращение усилий программиста и времени разработки.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 31.10.2019, 11:32   #108
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 020
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
Все по памяти.
Установить 100 переменных помогает банальный ctrl+v. 1000 переменных - это плюс 4 копипаста.



Цитата:
Сообщение от ujin Посмотреть сообщение
Входы сразу в массивы. У меня 2 - регистры и bool.
FBD - это язык визуального программирования. Т.е. в любом случае на каком-либо этапе создания проекта будет протяжка десятков атомарных связей. Не к переменным, так к массиву. Не к массиву, так от входов. От этого никуда не уйти. Иначе он из понятного визуального языка превратится непонятного мутанта.



Цитата:
Сообщение от ujin Посмотреть сообщение
Далее посчитать индекс переменной - номер модуля, номер канала. После обработки регистры передаются в массив с вещественными числами. Выбор из массива можно по переменной типа Enum сразу с названием.
С этим уже можно вполне комфортно жить. Попробуйте. Радикальное сокращение усилий программиста и времени разработки.
Mux() делает то же самое. Это простейший "Select" по индексу из массива.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 31.10.2019, 11:37   #109
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от ATS Посмотреть сообщение
Ааа, так Вы опять про красивую лошадь...
Не все рассказал.
В параллельном обмене было еще несколько тонкостей. Выявлены на практике и устранены.
Сервер MODBUS установил ТСP соединение передает запрос в TCP стек. TCP пытается доcтавить пакет по назначению. Есть промежуточное устройство SWITCH
Сетевая карта передала пакет свичу и ждет ответа. свич не смог отдать дальше.
Например устройство не отвечает или физически отвалилось. Превысился таймаут, возникла ошибка.
Сервер MODBUS передает новый запрос в ТСЗ стек. TCP пытается доcтавить пакет по назначению.
Сетевая карта передала пакет свичу и ждет ответа. свич отдал дальше. ждет 2 ответа
... ждет много ответов. Пакеты постепенно отмирают, но их не становится меньше для этого соединения. Канал забит. Сам освободится только через время TTL если не прессовать новые запросы.
Решение: При ошибке превышение таймаута разрывать соединение. В этот момент свитч сбрасывает все пакеты для этого соединения.
Решение похуже. Коннект, отправка и прием одного запроса, дисконнект. Увеличивает время на один запрос. Дополнительно нагружает сетевые карты сервера и модулей постоянным обновлением таблицы соединений.
2
Сервер MODBUS передает запрос в TCP стек. TCP пытается доcтавить пакет по назначению. Есть промежуточное устройство SWITCH
Сетевая карта передала пакет свичу и ждет ответа. свич отдал дальше. ждет ответа
Например устройство не отвечает. Превысился таймаут, возникла ошибка.
Сервер MODBUS передает новый запрос в ТСЗ стек. TCP пытается доcтавить пакет по назначению.
Сетевая карта передала пакет свичу и ждет ответа. свич отдал дальше. ждет 2 ответа. В этот момент кончилась помеха, ответ на первый запрос вернулся в свич. Свич отдал в сетевую карту.
Modbus сервер получил пакет с данными 1 запроса (температуру и давление), а ждал уровень и расход. Данные перепутались.
Реконнект не помогает. Данные все равно доходят. Или хвост от старого пакета другой длины в буфере TCP сокета остается.
Решение: Использовать штатные возможности MODBUS ТСP протокола. Нумеруем Transaction ID в сервере MODBUS, если пришел пакет не с этим Transaction ID реконнект.
Из штатных полей Transaction ID, Protocol ID, Length, Unit ID почему-то не все использует Transaction ID, используется только Length. А модули ввода вывода и контроллеры Сегнетикс Transaction ID в ответе возвращают как в запросе.
Нумеруем Transaction ID в сервере MODBUS, если пришел пакет не с этим Transaction ID считаем плохой и откидываем. Далее реконнект.
После этого более проблем не выявлено.

На этом передача вести с полей заканчивается. Спасибо за критику и предложения. Надеюсь данная информация кому-нибудь пригодится.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 31.10.2019, 11:55   #110
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
...В параллельном обмене было еще несколько тонкостей. Выявлены на практике и устранены.
Сервер MODBUS установил ТСP соединение передает запрос в TCP стек. TCP пытается доcтавить пакет по назначению. Есть промежуточное устройство SWITCH
Сетевая карта передала пакет свичу и ждет ответа. свич не смог отдать дальше.
Например устройство не отвечает или физически отвалилось. Превысился таймаут, возникла ошибка.
Сервер MODBUS передает новый запрос в ТСЗ стек. TCP пытается доcтавить пакет по назначению.
Сетевая карта передала пакет свичу и ждет ответа. свич отдал дальше. ждет 2 ответа
... ждет много ответов. Пакеты постепенно отмирают, но их не становится меньше для этого соединения. Канал забит. Сам освободится только через время TTL если не прессовать новые запросы.
Решение: При ошибке превышение таймаута разрывать соединение. В этот момент свитч сбрасывает все пакеты для этого соединения...
Бред какой-то.

Я удивляюсь, как вы с таким "знанием" работы сети и TCP/IP умудрились вообще хоть что-то сделать.
Gel вне форума   Ответить с цитированием
Старый 31.10.2019, 12:24   #111
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от Gel Посмотреть сообщение
Бред какой-то.
Я удивляюсь, как вы с таким "знанием" работы сети и TCP/IP умудрились вообще хоть что-то сделать.
Я сам удивляюсь. Повезло. А если за дело возьмутся профессионалы...
И это еще не самый плохой случай.


Добавлено через 10 минут

Цитата:
Сообщение от Arsie Посмотреть сообщение
Установить 100 переменных помогает банальный ctrl+v. 1000 переменных - это плюс 4 копипаста.
Иначе он из понятного визуального языка превратится непонятного мутанта.
Я не смогу объяснить. https://www.youtube.com/watch?v=_GlQ1riWjPc
https://www.youtube.com/watch?v=LpmG6b4uzmg
Почти как у Вас только немного более логично. И кажется, что чуть допилить... Я Ваш флаг повешу у нас в кабинете и не дам никому трогать.
Отсылка, что это мегапакет не подходит. Это было в самой первой версии. Ссылку я уже приводил. И с другой стороны брать лучше лучшее у лучших.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 31.10.2019, 12:45   #112
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 020
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
Я не смогу объяснить. https://www.youtube.com/watch?v=_GlQ1riWjPc
https://www.youtube.com/watch?v=LpmG6b4uzmg
Почти как у Вас только немного более логично. И кажется, что чуть допилить... Я Ваш флаг повешу у нас в кабинете и не дам никому трогать.
Отсылка, что это мегапакет не подходит. Это было в самой первой версии. Ссылку я уже приводил. И с другой стороны брать лучше лучшее у лучших.
Это не уровень FBD, это уровень SMArt. Там в рамках Журнала тоже массив, скрытый от вас.

Данную концепцию я прорабатывал году в 2008, только не в виде массивов - это не удобно, а в виде типа Record. Это структура, а не массив. Структура допускает объединение разнородных данных, что более актуально для PLC.

Отказались от подобного усложнения.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 31.10.2019, 13:11   #113
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от Arsie Посмотреть сообщение
Данную концепцию я прорабатывал году в 2008, только не в виде массивов - это не удобно, а в виде типа Record. Это структура, а не массив. Структура допускает объединение разнородных данных, что более актуально для PLC.
Отказались от подобного усложнения.
Вы не на то обратили внимание. То что слева это передняя панель, то что справа - типа поляна лоджика. Есть некоторые блоки сразу отображаются на передней панели, некоторые не имеют отображения. Смарт не требуется трогать. Суть в другом отображении на поляне. Я понимаю, что говорить легко и double a; это не то, что double a[];
Посмотрите второй пример. Тот же массив заходит в цикл одной линией, автоматически индексируется. Переменная используется, результат далее автоматически индексируется.
Структура тоже есть, называется кластер. Есть массивы структур, есть структура из массивов - это лишнее. https://www.youtube.com/watch?v=9zKpOP78DXM. Опять же не смотрите на переднюю панель (слева) смотрите на поляну.
Отказались от структур в 2008 году. Прошло уже 11 лет. Железо уже позволяет.


Добавлено через 34 минуты

Цитата
Сообщение от Gel Посмотреть сообщение
Бред какой-то.
Я удивляюсь, как вы с таким "знанием" работы сети и TCP/IP умудрились вообще хоть что-то сделать.
На вопрос доктор, что со мной не так? Ответ "Все не так"


Добавлено через 1 час 13 минут

Цитата:
Сообщение от Arsie Посмотреть сообщение
Это не уровень FBD, это уровень SMArt. Там в рамках Журнала тоже массив, скрытый от вас.
Арсений, Вы поняли про что я говорил? А то я выявил в процессе этой долгой беседы, что как минимум не умею объяснять.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 31.10.2019, 15:11   #114
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 740
Благодарил(а): 12 раз(а)
Поблагодарили: 192 раз(а) в 188 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от Arsie Посмотреть сообщение
Картинки нашей Автоскады облагородили, а вот с качеством реализации у них как обычно "На отвали"))
Не совсем так. Там неплохо сделана векторная svg графика и анимация.
ATS вне форума   Ответить с цитированием
Старый 31.10.2019, 15:17   #115
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 020
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от ATS Посмотреть сообщение
Не совсем так. Там неплохо сделана векторная svg графика и анимация.
Думаю, для вас не станет откровением, что картинки Автоскады первоначально нарисованы в векторе, а для анимации нарезаны слайды) Иначе мастерскада и не могла.

Вы лучше посмотрите на эти изломы векторов вдоль надписей на детализации


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 31.10.2019, 16:03   #116
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 740
Благодарил(а): 12 раз(а)
Поблагодарили: 192 раз(а) в 188 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от Arsie Посмотреть сообщение
Думаю, для вас не станет откровением, что картинки Автоскады первоначально нарисованы в векторе, а для анимации нарезаны слайды) Иначе мастерскада и не могла.
Не станет. Многое потом сохраняют в растр.

Но здесь именно объекты с векторной графикой фильтрами и анимацией.
А управление через css и js. Передача данных - json.

Дело не в Инсате. Просто пример построения HMI на основе WEB интерфейса.

Причем реализация именно в четвертой мастерскаде мне не очень нравится.
ATS вне форума   Ответить с цитированием
Старый 31.10.2019, 17:20   #117
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

Цитата
Сообщение от Gel Посмотреть сообщение
Бред какой-то.

Я удивляюсь, как вы с таким "знанием" работы сети и TCP/IP умудрились вообще хоть что-то сделать.
Gel, если знаете больше помогите, пожалуйста разобраться. Я скачал некоторое количество литературы.
Методы коррекции ошибок в вычислительных сетях основаны на повторной передаче кадра
данных.
Чтобы убедиться в необходимости повторной передачи данных,
• отправитель нумерует отправляемые кадры и для каждого кадра ожидает от приемника
квитанции — служебного кадра, извещающего о том, что исходный кадр был получен и данные в нем
оказались корректными.
• время этого ожидания ограничено — при отправке каждого кадра передатчик запускает
таймер, и, если по его истечении положительная квитанция на получена, кадр считается утерянным.
• приемник в случае получения кадра с искаженными данными может отправить
отрицательную квитанцию — явное указание на то, что данный кадр нужно передать повторно.
Метод с простоями требует, чтобы источник, пославший кадр, ожидал получения квитанции
(положительной или отрицательной) от приемника и только после этого посылал следующий кадр (или
повторял искаженный). Если же квитанция не приходит в течение тайм-аута, то кадр (или квитанция)
считается утерянным и его передача повторяется. На рис. сверху видно, что в этом случае
производительность обмена данными существенно снижается, — хотя передатчик и мог бы послать
следующий кадр сразу же после отправки предыдущего, он обязан ждать прихода квитанции.
Я считал, что дробление пакета на кадры, метод «скользящего окна» и тд. относится ко 2 уровню. Опять же у каждого свича есть параметр - размер входного буфера.
Если это не так и дробление пакета, перестановки производится сетевыми картами, значит я однозначно ошибался, наделив свитч несвойственными ему функциями. Поможете разобраться буду искренне благодарен.


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием
Старый 31.10.2019, 17:43   #118
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
Gel, если знаете больше помогите, пожалуйста разобраться. Я скачал некоторое количество литературы.
Методы коррекции ошибок в вычислительных сетях основаны на повторной передаче кадра данных.
Если мы говорим про MODBUS/TCP, то протокол TCP уже обеспечивает необходимую функциональность гарантированной доставки и упорядочивания данных.

Цитата:

...Механизм TCP предоставляет поток данных с предварительной установкой соединения, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета, гарантируя тем самым, в отличие от UDP, целостность передаваемых данных и уведомление отправителя о результатах передачи...

Если, используя TCP, на уровень приложения вышла ошибка, значит все применяемые методы уже не сработали и произошло что-то плохое.

Дублировать этот штатный функционал не нужно. Никакие квитанции учитывать не нужно.

Исключением является закрытие порта оппонентом, когда возникнет ошибка при отправке/получении данных и нужно просто переоткрыть соединение и повторить отправку. Алгоритмически это выглядит так:

Код:
func (c *SimpleTCPClient) exchangeAppData(in TCPAppDataUnit, out *TCPAppDataUnit) error {

	retry := c.conn != nil

	for {
		if err := c.sendAppData(in); err != nil {
			c.resetConnect()
			if retry {
				retry = false
				continue
			} else {
				return err
			}
		}

		if err := c.recvAppData(out); err != nil {
			c.resetConnect()
			if retry {
				retry = false
				continue
			} else {
				return err
			}
		}

		return nil
	}
}
Кроме этого, свитчи (во всяком случае, обычные), не в курсе ни про какой TCP/IP и не занимаются ожиданиями, TCP-подключениями или чем-то подобным. Задача свичка -- получить Ethernet-пакет с одного порта и тупо переслать его на другой порт или порты.
Gel вне форума   Ответить с цитированием
Старый 31.10.2019, 18:48   #119
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 740
Благодарил(а): 12 раз(а)
Поблагодарили: 192 раз(а) в 188 сообщениях
По умолчанию Ответ: Функционал

Цитата:
Сообщение от ujin Посмотреть сообщение
помогите, пожалуйста разобраться. Я скачал некоторое количество литературы.
Может это пригодится?
Там и ещё есть на что посмотреть.
ATS вне форума   Ответить с цитированием
Старый 31.10.2019, 21:14   #120
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Функционал

Сегодня, вышла заметка на Хабре: Обзор современных протоколов в системах промавтоматики.

Вот там видно, что MODBUS/TCP относится к протоколам с низкой производительностью и не имеет (не задумывался, как...) поддержки реального времени.

Поэтому, мучить MODBUS/TCP на предмет высокой производительности или для каких-то критичных по времени (скажем, <100 мс) задач можно только на свой страх и риск.
Gel вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 11:33.


Версия vBulletin: 3.8.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2023