Разговоры на технические темы

Тема в разделе "Флудилка", создана пользователем Igor68, 1 апр 2021.

  1. Igor68

    Igor68 Гуру

  2. parovoZZ

    parovoZZ Гуру

    график ради графика - график нафик не нужен. Обязательный атрибут - текстовое отображение координат выбранной точки на графике. Совсем идеально - маркеры.
     
    DetSimen нравится это.
  3. Igor68

    Igor68 Гуру

    Только слепой не увидит кнопку "Данные в таблице". Ей, ей только слепой... но может ещё какой-нибудь идиот не посмотрит на это. А вообще-то для изучения факта появления некой новой библиотеки надо держать специального человека, который по факту сам ничего не делает... включая изучение этой самой новой библиотеки - сталкивался с таковыми (Вот это есть, надо для того-то, но как работает и как использовать меня не колышет). Твои проблемы - твоя и головная боль.
    PS: Уважаемый, а Вы не из таких часом?
     
    Последнее редактирование: 27 июл 2023
  4. Un_ka

    Un_ka Гуру

    Круто! А теперь осталось
    1. Составить только толковую и подробную документацию;
    2. Собрать всё это в легко поднимаемый образ linux и скомпилированные прошивки для МК.
    Пункт 1 необходим будет уже через неделю (есть у меня одна программа, где паралельно идёт отправка данных в две БД, обработка видеопотока с камеры вместе с двумя http серверами в одном исполняемом файле. С ней взаимодействует скрипт на python не менее запутанный). Разобраться что там твориться бывает порой очень трудно. Тем более у вас это программное обеспечение для промышленного объекта.
    Второй пункт также необходим: Отказ сервера на котором всё это крутится и микроконтроллеров является вопросом времени, нужных версий компиляторов и операционных систем на которых всё работало стабильно и собиралось сейчас, на момент отказа может не оказаться, поэтому использование образа всей системы сервера или же как сейчас модно заворачивание необходимых сервисов в контейнер докера может решить проблему бэкапа серверной части. То же самое и с прошивками микроконтроллеров: кроме исходного кода хорошо бы хранить сами файлы прошивки и загрузчик к ним.

    p.s.
    Всегда приятно видеть тёмную тему в HMI (интерфейсах человек-машина).
     
  5. parovoZZ

    parovoZZ Гуру

    и что произойдёт?
     
  6. Igor68

    Igor68 Гуру

    Почему-то я не сомневаюсь, что Вы...
    Screenshot 2023-07-27 at 21-45-25 Индукционная печь ABP.png
    Screenshot 2023-07-27 at 20-45-46 Индукционная печь ABP.png
    И что, я не прав?
    Другая информация ни к чему.
    PS: Сдаётся почему-то, что я прав.
     
    Последнее редактирование: 27 июл 2023
  7. Igor68

    Igor68 Гуру

    Сразу скажу про тёмную тему - проблема со зрением (у меня), да думаю и сотрудникам проще. Я свои мониторы ставлю на малую яркость. Все доступные среды разработки, так же в тёмной теме.
    По поводу микроконтроллеров - их нет как таковых. Есть изделия промышленные... все порты ввода-вывода на микроконтроллерах (тот же ОВЕН к примеру на пикушках). Их прошивка - их авторские права.
    Что касается контроллеров - с Linux предпочтительно. Не прошивки там конечно, а запускаемый под системой код. Среда разработки на основном сервере - на нем Linux. Что касается сред - это GCC, редактор нормальный типа gedit, CodeLite и т.д. Соответственно редактируется на сервере по SSH соединению. Потом из среды сервера имеем доступ по SSH и TELNET(к примеру UC7101LX не имеет SSH) к устройству. Ранее были изделия и с WidowsCE - но это жесть, то зависнут, то ещё что... и даже сторожевой таймер не помогает.
    Что касается загрузки в контроллеры, то /etc/rc.local для Linux, а для ПЛК всё только в среде под Windows (всякие SIMENS, OMRON и прочее). Я стараюсь их не касаться.
    Отладка удобна (относительно конечно) - по SSH загружается некий код, запускается - вывод только в консоль и ни каких исполнительных устройств, отлаживается поведение кода, ну и потом доработка кода до применяемого.
    Вот как-то так.

    PS: Практически везде применяю сетевые сокеты - пример устройство при сборе данных одна программа реализует сервер, другая обрабатывающая программа имеет свойство клиента. Так вот эта обрабатывающая программа может отлаживаться и на другом устройстве в сети. Скомпилировал для другого устройства и в путь.
    И ещё: Стараюсь нигде не применять строчные переменные, а только бинарные. Исключения только для отображения ( потому мне из Modbus по душе RTU вместо ASC). Да и контроллерам (тем же ОВЕНАМ) не надо делать преобразований данные-строка и строка-данные. А программы отображения, как я говорил клиенты, обращаются к ранее упомянутому серверу/ам и значения к функциональности особого не имеют.
     
    Последнее редактирование: 27 июл 2023
  8. parovoZZ

    parovoZZ Гуру

    это хорошо, когда параметров всего 6. Но когда параметров под тысячу? В WinCC, например, уже из коробки реализован график, на который можно добавлять все необходимые тренды, а по маркеру изучать их поведение. Табличное представление данных абсолютно не наглядно, особенно когда они сыпятся с периодом в 20 мс.
     
  9. Un_ka

    Un_ka Гуру

    Данные в таблице можно экспортировать в csv?
    Судя по структуре данных — измерения сделанные в конкретный момент времени. Они хорошо соответствует философии баз данных временных рядов. Вот например в influxDB есть абстракция измерение (замер, measurement). Оно имеет имя и включает в себя серию точек, которые состоят из отметки времени и хотя бы одного тега или переменной. База данных соответственно оптимизирована под работу с отметками времени.
    Читал хабре как делают подобное на металлургических комбинатах наших олигархов, дак там как раз базы данных реального времени плюс графана. Графана конечно требует большей мощности сервера и компьютера клиента, чем ваши наработки, но хорошая тёмная тема по умолчанию, настраиваемый интерфейс и т.д.

    p.s.
    Шрифт в интерфейсе Tahoma или подобный с растровыми глифами?
     
  10. Igor68

    Igor68 Гуру

    Доброго Времени! Я только показал реальный вариант, который понятен мне. Что касается данных в SVG, то наверное возможно, а надо? Ранее подобный график отрисовывался самим сервером Apache средствами PHP для конкретного пользователя, уверяю Вас серверу было тяжко - для каждого обращения рисовать картинку для каждого клиента индивидуально (в PNG - да я уже забыл)... уж пусть сам клиент рисует для себя сам, а сервер только предоставит данные (в моём случае JSON) и тут помог SVG на стороне клиента!
    Что касается измерений и т.п. то "тик времени", как и данные контроллер MOXA IA240LX, принимает по внутренней (в шкафу) сети от поднятого по просьбе поставщика оборудования сервера OPC UA (потом пол года изучал код клиента... даже на ПИТОНЕ, от которого меня в жар бросает - до чего же убогий (это мое мнение) язык), изучал доступ к данным, писал коды тестовых клиентов и сравнивал. Да что говорить опыт доступа к OPC UA выложен тут на флудилке. А уж потом, как говорил ранее собрал "клиент-сервер- система управления" и еще "клиент-сервер-регистратор-система управления на ПК", что я и показал. Вот только вопрос - мог ли я в это время следить за всякими библами, как говорит @parovoZZ ???????
     
  11. Igor68

    Igor68 Гуру

    Надеюсь WinCC вы не ставите как ПК каждого клиента в сети?! А то, то делаете лучше покажите в виде простого примера. Или Вам в падлу? ( Простите, но Вы тут за многое время такого наговорили, что моя фраза для Вас должна быть только ласкательной ), а тренды - в реальном времени:
    Screenshot 2023-07-28 at 20-10-59 Система мониторинга.png
    Такого достаточно? Как видите тут в секундах. Простите новое время слева, а старое справа - мой недочёт, но так нагляднее по моему.
     
  12. Igor68

    Igor68 Гуру

    Идиот - в какой SQL пишутся данные с интервалом в 20мс??? Тут по Вашему мнению, что, все быки театральные??? Или все ходят строем задницей вперёд???
    Уважайте людей, особенно незнакомых!
     
  13. Igor68

    Igor68 Гуру

    Главное - про компиляторы... тут говорил про MOXA IA240/UC-7112LX-Plus для этих устройств один компилятор (cross). Сборка на ПК, а запуск на устройстве - обычная кросскомпиляция, как и везде. Говорят и для малины есть, но я для малины собирал на самой малине - там же Debian, а это классика: нормальная ОС должна поддерживать саму себя! Так что Debian по умолчанию тащит с собой GCC для себя. И это правильно! Вот только "заголовки" ядра не всегда с собою тащит - бывает надо!
     
  14. parovoZZ

    parovoZZ Гуру

    Серверная часть WinCC на двух серверах. Один сервер основной, второй в горячем резерве. Это стандартная схема для электростанций. Соответственно, на каждом АРМ-е ставится очень лёгкая клиентская часть WinCC.

    MSSQL. После интервала в 20-30 минут происходит децимация данных, иначе никакой емкости дисков не хватит для их хранения. Разумеется, пишутся не все тренды, а только те, которые могут так быстро изменяться. Основная часть трендов пишется со скоростью 100мс. Когда настраиваешь турбину на сброс нагрузки, даже 100мс бывает мало.
     
  15. Igor68

    Igor68 Гуру

    Извините, конечно за мою грубость!!! Многие механизмы измерений и сохранений данных мне ведомы. В моём случае "ПЛАВКА"(1-2 часа) и "СПЕКАНИЕ"(10-20часов) регистрируются с интервалом в 10сек, да и ранее упомянутый OPC UA сервер за 1 обращение не желает отдавать более 6 параметров, а их на 2 печи гораздо более 6. Так, что читается 6 параметров в секунду. И того все параметры(полный набор) читаются за 4 секунды - есть и служебные параметры и параметры каждой из печей (их 2 и могут быть включены сразу обе). Да и контроллер ещё, кроме сбора данных, занимается охлаждением оборудования, ну и сервер, который не только отдает массив данных, но и способный принимать команды (MOXA IA240LX) - такие, как смена уставок параметров управления охлаждением. Кроме того шлюз VNC к дисплею HMI и щлюз к OPC UA для подробного контроля состояния и аварий.
    Жаль, что погубили частично оборудование(перегрев, всплыло когда в цехе было более 30градусов, а в шкафу соответственно около 50, ну и внутри корпуса многих из устройств около 70) своими "весёлыми картинками"(тоже умерли) - додумались разместить устройство видеорегистрации в шкафу оборудования печи, блин иного места не нашли что ли? Ей, ей дебилов на матушке лет этак на 1000 с лихвой припасено... а главное стараются быть главными над кем-то, но при этом не нести никакой ответственности.

    PS: Что же касается вывода данных - то доступ к MySQL имеется... кому надо,тот пусть и выводит с маркерами и без оных. Я только по своей инициативе сделал сие, и софт для MOXA, и сервер(а) на ПК - завтра скажут яму копать(а подобное не так уж и редко) и будет некогда делать подобное, а так хоть душу отвёл.
     
    Последнее редактирование: 29 июл 2023
  16. Un_ka

    Un_ka Гуру

    Вообще-то я про экспорт данных в формат csv спрашивал. :rolleyes:
    Иногда может понадобится обрабатывать данные замеров в том же excel, если например сравнивать профили температуры за последние несколько плавок, или же товарищи учёные из института стали и сплавов, займутся такой шалостью как моделирование нестационарного плавления слитков с учётом всех видов теплообмена.
    p.s.
    А разве эти данные, что вы нам показываете не конфидениальная информация неизвестного завода?
     
  17. parovoZZ

    parovoZZ Гуру

    нет.
     
  18. Igor68

    Igor68 Гуру

    Про данные - а смысл? Картинка отрисовывается скриптом JS прямо на вэб странице (я же выкладывал пример, ну да ладно):
    ОТРИСОВКА КАКИХ-ТО ЭЛЕМЕНТОВ(самодельные функции):
    Код (Javascript):

    // рисование линии
    function DrawLine(Name, id, x1, y1, x2, y2, col, vh) {
        var line = document.createElementNS("http://www.w3.org/2000/svg", 'line');
        line.setAttribute('id', id);
        line.setAttribute('x1',x1);
        line.setAttribute('y1',y1);
        line.setAttribute('x2',x2);
        line.setAttribute('y2',y2);
        line.setAttribute('stroke', col);
        line.setAttribute('stroke-width', vh);
        document.querySelector('#' + Name).append(line);
    }

    //вывод текста
    function DrawText(Name, id, x, y, fontsz, col, val) {
        var text = document.createElementNS("http://www.w3.org/2000/svg", 'text');
        text.setAttribute('id', id);
        text.setAttribute('x',x);
        text.setAttribute('y',y);
        text.innerHTML = val;
        text.style = "font-family:FreeSerif;font-weight:normal;font-size:" + fontsz + ";fill:" + col;
        document.querySelector('#' + Name).append(text);
    }

    //
    function DrawCircle(Name, id, cx, cy, r, col){
        var circle = document.createElementNS("http://www.w3.org/2000/svg", 'circle');
        circle.setAttribute('id', id);
        circle.setAttribute('cx', cx);
        circle.setAttribute('cy', cy);
        circle.setAttribute('r', r);
        circle.style = "fill:" + col + ";fill-rule:evenodd;stroke:#ffffff;\
        stroke-width:0.1;stroke-linejoin:round;stroke-opacity:0.552941;\
        paint-order:stroke fill markers"
    ;
        document.querySelector('#' + Name).append(circle);
    }

    //сетка
    function GrawGrid(Name, nid ) {
        var MyId = nid;
        var VCnt = 0;
        while (VCnt < 4) {
            MyId = nid + NumLine;
            DrawLine(Name, MyId, 0, NY - VCnt * 100, NX, NY - VCnt * 100, "rgb(100,100,100)" );
            NumLine++;
            VCnt++;
        }
        MyId = nid + NumLine;
        NumLine++;
        DrawLine(Name, MyId, 0, NY - VCnt * 100, NX, NY - VCnt * 100, "rgb(100,100,100)" );
        VCnt = 0;
        while (VCnt < 8) {
            MyId = nid + NumLine;
            DrawLine(Name, MyId, VCnt * (NX / 8), NY, VCnt * (NX / 8), NY - NY, "rgb(100,100,100)" );
            NumLine++;
            VCnt++;
        }
        MyId = nid + NumLine;
        DrawLine(Name, MyId, VCnt * (NX / 8), NY, VCnt * (NX / 8), NY - NY, "rgb(100,100,100)" );
    }
     
    ВЫЗОВ ЭТИХ ФУНКЦИЙ(хоть кривой, но пример - отрывок):
    Код (Javascript):
    var szXn    = 30;
    //
    function DrawNet() {
        var szWidth = window.screen.availWidth;
        var szX = (szXn * maxn) + (szXn * 2);
        document.getElementById("NMon").style.width = szX;
        //слои
        for(var cntL = 0; cntL < layers; cntL++) {
            var kX = szX / nlay[cntL];
            var kY = 90;
            //var Xn = (cntn + kX) + 5;
            //var Yn = (cnt + 30) + 5;
            for(var cntn = 0; cntn < nlay[cntL]; cntn++) {
                var Xn = (cntn * kX) + (szXn /2);
                var Yn = (cntL * kY) + 5;
                DrawCircle("NMon", "L" + cntL + "N" + cntn, Xn, Yn, 5,"white");
                if(cntL > 0) {
                    for(var cntnlast = 0; cntnlast < nlay[cntL - 1]; cntnlast++) {
                        var kXlast = szX / nlay[cntL - 1];
                        var XnLast = (cntnlast * kXlast) + (szXn / 2);
                        var YnLast = ((cntL - 1) * kY) + 5;
                        DrawLine("NMon","L"+ cntL +"N" + cntn + "WL" + (cntL - 1) + "N" + cntnlast, Xn, Yn, XnLast, YnLast, "white", "1px");
                    }
                }
            }
        }
    }
     
    ПУСТАЯ СТРАНИЦА:
    HTML:
    <!DOCUTYPE html>
    <html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <link rel="icon" href="images/favicon.ico" type="image/x-icon" />
        <title>***NM***</title>
        <link rel="stylesheet" href="css/styles.css" type="text/css" />
    </head>
    <body onLoad="main()" style="background-color: black; color: white;">
    <div class="MyScreen">
        <div id="info1">
        </div>
        <div id="graph">
            <svg id="NMon" version="1.1" type="image/svg+xml" xmlns="http://www.w3.org/2000/svg" />
        </div>
    </div>

    <script src="scripts/SVG5.js" type="text/javascript"></script>
    <script src="scripts/drawnet.js" type="text/javascript"></script>
    <script src="scripts/main.js" type="text/javascript"></script>

    </body>
    </html>
    РЕЗУЛЬТАТ(сохраненная страница):
    --вид:
    Screenshot 2023-07-29 at 14-20-06 NM.png
    --заполнение:
    NM .html.txt
    Обратили внимание, на то как изменилась страница - конкретно на объект "NMon"???
    PS: Задать вопрос, что бы опять задать порос - не значит получить ответ.
    PS: Я когда-то на форуме делал высказывание: "Многие, прежде чем сказать думают, но практически никто не думают прежде чем подумать". Это похоже как раз на тот самый случай.
     

    Вложения:

    • NM .html.txt
      Размер файла:
      17,6 КБ
      Просмотров:
      1.200
  19. parovoZZ

    parovoZZ Гуру

    кому-то отправить для изучения. И отсутствие возможности на той стороне из этих данных построить график - это огромный пробел.
     
  20. Igor68

    Igor68 Гуру

    Простите наверное я не понял, замеры храняться в MySQL на сервере, а exel там или нет - дело хозяйское. Наверно Вы видели:
    https://forum.amperka.ru/threads/Разговоры-на-технические-темы.22016/page-10#post-310316
    Обратили внимание на запись? - она не полная, там ещё поля номер печи, начала процесса и тип процесса. Все данные в одной таблице - вообще одной. По этим скрытым полям производится поиск в таблице. Как таковая таблица растёт, но она одна.
    PS: Сейчас эта таблица содержит 4 года... понятное дело когда процессов нет, то нет и роста таблицы. Регистрация круглогодичная, и останавливается только при неисправности. Операционная система Linux позволяет пользователям забыть о своём существовании - для сравнения Widows требует практически ежемесячной перезагрузки.
     
    Последнее редактирование: 29 июл 2023