EasyBuilder - Скорая помощь новичкам

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Re: EasyBuilder - Скорая помощь новичкам

Сообщение rrapov » 25 окт 2023, 12:31

Спасибо большое, все получилось)
rrapov
 
Сообщения: 15
Зарегистрирован: 06 июл 2023, 11:19

Re: EasyBuilder - Скорая помощь новичкам

Сообщение lesha05 » 26 окт 2023, 00:21

Приветствую. Возникла проблема с проектом. Панель перестала опрашивать по MODBUS RTU, с любого порта COM. Проверял через терминал, никакие пакеты панель не передает. Все возможные настройки перепробовал по порту - не помогает. При загрузке другого проекта с идентичными настройками, все работает, пакеты отправляет. Проблема похоже с самим проектом, как определить или исправить данную проблему?
ПС, гуглил, не увидел подобных проблем.
lesha05
 
Сообщения: 2
Зарегистрирован: 25 окт 2023, 01:23

Re: EasyBuilder - Скорая помощь новичкам

Сообщение lesha05 » 26 окт 2023, 00:49

Проблема решилась, 3 дня мучении :D
Может кому пригодится... Удаляете устройство, Сохраняетесь, Закрываете EasyBuilder Pro, потом снова открываете и добавляете устройство...
lesha05
 
Сообщения: 2
Зарегистрирован: 25 окт 2023, 01:23

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Number17 » 26 окт 2023, 11:52

Нарисовалась следующая задачка: имеем Trend Display Object на котором отображается в общем случае несколько графиков( Data Sampling). Требуется на Trend Display Object отобразить горизонтальную линию-маркер по оси Y, что бы наблюдать как параметр "болтается" в области заданного значения ( этой линии маркера ). Значение этого маркера должно быть настраиваемым. Возможно ли такое реализовать?
Number17
 
Сообщения: 162
Зарегистрирован: 06 мар 2018, 12:08

Re: EasyBuilder - Скорая помощь новичкам

Сообщение 8bit » 26 окт 2023, 13:19

Number17 писал(а):Нарисовалась следующая задачка: имеем Trend Display Object на котором отображается в общем случае несколько графиков( Data Sampling). Требуется на Trend Display Object отобразить горизонтальную линию-маркер по оси Y, что бы наблюдать как параметр "болтается" в области заданного значения ( этой линии маркера ). Значение этого маркера должно быть настраиваемым. Возможно ли такое реализовать?

очевидно, что надо добавить маркер в выборку ....
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1186
Зарегистрирован: 20 апр 2020, 19:07

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Number17 » 27 окт 2023, 12:41

8bit писал(а):
Number17 писал(а):Нарисовалась следующая задачка: имеем Trend Display Object на котором отображается в общем случае несколько графиков( Data Sampling). Требуется на Trend Display Object отобразить горизонтальную линию-маркер по оси Y, что бы наблюдать как параметр "болтается" в области заданного значения ( этой линии маркера ). Значение этого маркера должно быть настраиваемым. Возможно ли такое реализовать?

очевидно, что надо добавить маркер в выборку ....


Создать дополнительную выборку-маркер с постоянным значением?
Number17
 
Сообщения: 162
Зарегистрирован: 06 мар 2018, 12:08

Re: EasyBuilder - Скорая помощь новичкам

Сообщение 8bit » 31 окт 2023, 13:49

8bit писал(а):
AlexandrGr писал(а):А setInterval не пробовали?


пробовали, отлично работает.....
но Actions тоже должны работать ....
Код: Выделить всё
var self = this;

const request = require('/request-0.0.3.js');


setInterval(send_request, 1000);

function send_request()
{
    // Send the get request
    request.get( {url: 'http://217.91.48.218:8145/infos.jsn'},
        function (error, response, body)
        {
            console.log("error:", error);
            //console.log("response:", response);
            //console.log("body action:", body);
       
           if (error === "No error")
           {
               var MyObj = JSON.parse(body);
             
                // Расшифровка JSON
                var result=MyObj.isodat;
                console.log("получили isodat:", result);
       
                driver.setStringData(self.config.stroka, result.length, result, (err) =>
                    {
                        if (err)
                        { console.log('Error:', err.message); }
                   });
            }
   else
   {
       var txt = "Disconnected ...";
       driver.setStringData(self.config.stroka, txt.length, txt, (err) =>
                {
                    if (err)
                    { console.log('Error:', err.message); }
       
                   });
            }
         }
    );
}




прислал Weintek решение:
в файл request-0.0.3.js
добавьте строку
Код: Выделить всё
easy.setOpt(net.Curl.Easy.option.TIMEOUT, 1);

где 1 - время ожидания ответа сервера, секунд

перед строками
Код: Выделить всё
    easy.setOpt(net.Curl.Easy.option.HTTPGET, true);
    _perform_single_easy(easy, opt, cb)


при выдергивании патчкорда пишет красивое "---No Internet ---" и при этом остальные действия продолжают работать, при втыкании патчкорда обратно получение/отображение данных возобновляется...
Хотя в оригинале Weintek прислал такие картинки и изначально писал про CURL_TIMEOUT вместо TIMEOUT(для тех, кто силён в веб разработке):
JS_request_01.png
JS_request_01.png (28.42 КБ) Просмотров: 751

JS_request_02.png
JS_request_02.png (21.15 КБ) Просмотров: 751
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1186
Зарегистрирован: 20 апр 2020, 19:07

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Aviator_VZh » 01 ноя 2023, 15:23

8bit писал(а):
AlexandrGr писал(а):А setInterval не пробовали?


пробовали, отлично работает.....
но Actions тоже должны работать ....
Код: Выделить всё
var self = this;

const request = require('/request-0.0.3.js');


setInterval(send_request, 1000);

function send_request()
{
    // Send the get request
    request.get( {url: 'http://217.91.48.218:8145/infos.jsn'},
        function (error, response, body)
        {
            console.log("error:", error);
            //console.log("response:", response);
            //console.log("body action:", body);
       
           if (error === "No error")
           {
               var MyObj = JSON.parse(body);
             
                // Расшифровка JSON
                var result=MyObj.isodat;
                console.log("получили isodat:", result);
       
                driver.setStringData(self.config.stroka, result.length, result, (err) =>
                    {
                        if (err)
                        { console.log('Error:', err.message); }
                   });
            }
   else
   {
       var txt = "Disconnected ...";
       driver.setStringData(self.config.stroka, txt.length, txt, (err) =>
                {
                    if (err)
                    { console.log('Error:', err.message); }
       
                   });
            }
         }
    );
}




Сделал как советовали. 2 недели работало без нареканий. Сейчас снова повисло.
Данные опрашиваемого сервера не обновляются. Обмен с ПЛК в норме. Тормозов в работе панели нет, но отображение элементов экрана нарушено.
В это время были проблемы с доступностью интернета у провайдера. После перезагрузки данные с сервера обновлялись с периодичностью до 40 сек при опросе каждые 5 сек. Но больше зависаний панели нет.
Фото экранов при зависании и после перезагрузки прикладываю

Изображение
Изображение
Aviator_VZh
 
Сообщения: 63
Зарегистрирован: 22 фев 2023, 01:17

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Aviator_VZh » 01 ноя 2023, 16:37

8bit писал(а):
8bit писал(а):
AlexandrGr писал(а):А setInterval не пробовали?


пробовали, отлично работает.....
но Actions тоже должны работать ....
Код: Выделить всё
var self = this;

const request = require('/request-0.0.3.js');


setInterval(send_request, 1000);

function send_request()
{
    // Send the get request
    request.get( {url: 'http://217.91.48.218:8145/infos.jsn'},
        function (error, response, body)
        {
            console.log("error:", error);
            //console.log("response:", response);
            //console.log("body action:", body);
       
           if (error === "No error")
           {
               var MyObj = JSON.parse(body);
             
                // Расшифровка JSON
                var result=MyObj.isodat;
                console.log("получили isodat:", result);
       
                driver.setStringData(self.config.stroka, result.length, result, (err) =>
                    {
                        if (err)
                        { console.log('Error:', err.message); }
                   });
            }
   else
   {
       var txt = "Disconnected ...";
       driver.setStringData(self.config.stroka, txt.length, txt, (err) =>
                {
                    if (err)
                    { console.log('Error:', err.message); }
       
                   });
            }
         }
    );
}




прислал Weintek решение:
в файл request-0.0.3.js
добавьте строку
Код: Выделить всё
easy.setOpt(net.Curl.Easy.option.TIMEOUT, 1);

где 1 - время ожидания ответа сервера, секунд

перед строками
Код: Выделить всё
    easy.setOpt(net.Curl.Easy.option.HTTPGET, true);
    _perform_single_easy(easy, opt, cb)


при выдергивании патчкорда пишет красивое "---No Internet ---" и при этом остальные действия продолжают работать, при втыкании патчкорда обратно получение/отображение данных возобновляется...
Хотя в оригинале Weintek прислал такие картинки и изначально писал про CURL_TIMEOUT вместо TIMEOUT(для тех, кто силён в веб разработке):
JS_request_01.png

JS_request_02.png


Сделал как у Вас на скринах. Стал получать
[15:36:01] SyntaxError: unexpected end of input
[15:36:02] at <input>:1
[15:36:02] at parse (native)
[15:36:02] at <anonymous> (<JS Action>:24)
[15:36:02] at <anonymous> (<input>:169)
Это если встраивать в действие.

Если запускать код через setInterval то никаких ошибок нет. Но это и раньше хорошо работало. За 2 недели повисло 1 раз при опросе через 5 сек.
Посмотрим как будет после улучшения.

Жаль, что через действие не работает. Удобнее управлять и визуализировать опрос.
Последний раз редактировалось Aviator_VZh 01 ноя 2023, 17:17, всего редактировалось 1 раз.
Aviator_VZh
 
Сообщения: 63
Зарегистрирован: 22 фев 2023, 01:17

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Number17 » 01 ноя 2023, 16:38

Возник вопрос по макросам, точнее о последовательности их выполнения. Как они выполняются? Поочерёдно в соответствии с порядком вызова, параллельно в режиме многозадачности? Есть ли какие то уровни приоритета выполнения?
Имеем макрос МС1, который выполняется периодически с периодом T1 и управляется битом S1. Также имеем макрос MC2. Выполнение которого активируется нажатием кнопки. В МС2 устанавливается бит S1, который запрещает выполнение макроса МС1 и выполняются некие иные действия. В проекте вижу такую картину: При нажатии кнопки макрос МС2 прерывает выполнение макроса МС1, делается что должно в МС2 и далее продолжатся выполнение МС1 , хотя в МС2 его выполнение вроде как запрещено. Далее МС1 более не выполняется. Т.е. собственно говоря получается что МС1 функция, а МС2 как бы прерывание, если проводить аналогии с программированием для МК.
С макросами активируемыми через SYNC_TRIG_MACRO и ASYNC_TRIG_MACRO вроде бы всё понятно.
Number17
 
Сообщения: 162
Зарегистрирован: 06 мар 2018, 12:08

Пред.След.

Вернуться в Weintek

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 6