Страница 31 из 33 ПерваяПервая ... 212930313233 ПоследняяПоследняя
Показано с 301 по 310 из 327

Тема: Вопрос-ответ по Телемеханика ЛАЙТ

  1. #301

    По умолчанию

    Цитата Сообщение от Vasiliy55 Посмотреть сообщение
    При работе через МЭК 60870-5-104 ОРС-сервер. не приходит квитанция о выполнении команды о управлении ВН, и реле в МУ110-224_16Р постоянно включено. Как это устранить. Контроллер ПЛК100
    так сказать, нереально, присылайте нам на почту tml@owen.ru ваш проект с конифгурацией на ПЛК100, - будем смотреть как у вас настроен протокол МЭК-104.
    так же не понятно причем здесь OPC сервер. Опишите как у вас построена система, что опрашивает ПЛК100, по какому интерфейсу и куда передает (в другую скаду, в нашу скаду, другому мастеру).

  2. #302

    По умолчанию

    Попал в руки ПЛК323-ТЛ. При первом же написании скрипта появились вопросы. Для примера простейший скрипт:
    var i,j,k:byte;
    begin
    j:=0;
    //k:=5 mod 3;
    for i:=1 to 10 do
    begin
    j:=j+1;
    end;
    WriteInteger('var_1',i);
    WriteInteger('var_2',j);
    end.
    1.При запуске в редакторе скрипта получаем желаемые результаты в var_1 и var_2 = 10. При запуске в эмуляторе и реальном контроллере var_1 и var_2 = 9. То есть цикл делает на одну итерацию меньше?
    2.Если раскомментировать строчку k:=5 mod 3 в редакторе опять все Ok. Ну а на эмуляторе и контроллере var_1 и var_2 вообще неопределены.
    Кажется скрипт даже не доходит до WriteInteger. При компиляции никаких ошибок нет. Тот-же эффект при использовании div вместо mod.

  3. #303

    По умолчанию

    Обойдусь думаю без FOR и DIV/MOD, и напишу-ка скрипт считающий количество дней с 01.01.1980 до 01,01,2020:
    var y,d,DinY:word;
    r1,r2:real;
    begin
    y:=1980;
    d:=0;
    while y<2020 do
    begin
    if round(y/4)=(y/4) then DinY:=366 else DinY:=365;
    d:=d+DinY;
    //********
    r1:=round(y/4);
    r2:=y/4;
    //********
    y:=y+1;
    end;
    WriteInteger('var_d',d);
    WriteInteger('var_y',y);
    WriteFloat('var_r1',r1);
    WriteFloat('var_r2',r2);
    end.
    В редакторе скрипта опять всё замечательно получил нужные 14610 дней, а при запуске в эмуляторе получается уже 14640 дней.
    Для поиска косяка добавлены переменные r1 и r2, так как все года вдруг стали високосными.
    Редактор скриптов:
    var_r1=505
    var_r2=504.75
    Эмулятор:
    var_r1=504.00
    var_r2=504.00
    Откуда 504.00???? это же итерация для 504*4=2016!!!!!! года, т.е. пред,пред,пред последняя.
    Что происходит с локальными переменными в циклах? Возможно я что-то не понимаю, но кажется скрипты абсолютно не работоспособны. Как будто два различных компилятора. Один правильный для редактора кода и отладки а второй- кривой в эмуляторе и контроллере.

  4. #304

    По умолчанию

    Цитата Сообщение от rtn Посмотреть сообщение
    Обойдусь думаю без FOR и DIV/MOD, и напишу-ка скрипт считающий количество дней с 01.01.1980 до 01,01,2020:
    var y,d,DinY:word;
    r1,r2:real;
    begin
    y:=1980;
    d:=0;
    while y<2020 do
    begin
    if round(y/4)=(y/4) then DinY:=366 else DinY:=365;
    d:=d+DinY;
    //********
    r1:=round(y/4);
    r2:=y/4;
    //********
    y:=y+1;
    end;
    WriteInteger('var_d',d);
    WriteInteger('var_y',y);
    WriteFloat('var_r1',r1);
    WriteFloat('var_r2',r2);
    end.
    В редакторе скрипта опять всё замечательно получил нужные 14610 дней, а при запуске в эмуляторе получается уже 14640 дней.
    Для поиска косяка добавлены переменные r1 и r2, так как все года вдруг стали високосными.
    Редактор скриптов:
    var_r1=505
    var_r2=504.75
    Эмулятор:
    var_r1=504.00
    var_r2=504.00
    Откуда 504.00???? это же итерация для 504*4=2016!!!!!! года, т.е. пред,пред,пред последняя.
    Что происходит с локальными переменными в циклах? Возможно я что-то не понимаю, но кажется скрипты абсолютно не работоспособны. Как будто два различных компилятора. Один правильный для редактора кода и отладки а второй- кривой в эмуляторе и контроллере.
    Проблему подтверждаем, переадресовываем ее нашим разработчикам. Как только получу ответ, я его Вам перешлю.

  5. #305

    По умолчанию

    Цитата Сообщение от Сергей Сисейкин Посмотреть сообщение
    Проблему подтверждаем, переадресовываем ее нашим разработчикам. Как только получу ответ, я его Вам перешлю.
    Тогда уж и про проблемы с операторами DIV/MOD и циклом FOR (предыдущий пост) передайте пожалуйста.
    И если можно предложение: Запускать скрипт из окна редактора скрипта в отдельном потоке отличном от GUI. В случае ошибочного бесконечного цикла вешается наглухо всё приложение "Контроллеры" с последующей потерей данных. И кнопочку в этом случае нужно добавить "Остановить". Красный квадратик после зеленого треугольника в панели инструментов к примеру.

  6. #306

    По умолчанию

    Добрый день.
    Спасибо за примеры и подробные комментарии.
    Исполнители скрипта действительно разные в режиме отладки и в режиме работы.
    Указанные проблемы подтверждаем, будем исправлять:
    1) r2 := y/4;
    если y - целочисленная переменная, то производится целочисленное деление; используйте пока вещественную переменную
    2) k:=5 mod 3;
    операция mod приводит к неработоспособности скрипта (и div тоже)
    3) for i:=1 to 10 do
    цикл for выполняется на одну итерацию меньше, чем должен; используйте пока циклы while или repeat-until

  7. #307

    По умолчанию

    Добрый день

    У None-target (с запуском Enlogic эмулятором) есть ограничение по количеству входов/выходов при использовании опроса по протоколу modbus?
    Столкнулся с ограничением в 3 параметра или это ограничение бесплатной версии?

  8. #308

    По умолчанию

    Цитата Сообщение от ryuraa Посмотреть сообщение
    Добрый день

    У None-target (с запуском Enlogic эмулятором) есть ограничение по количеству входов/выходов при использовании опроса по протоколу modbus?
    Столкнулся с ограничением в 3 параметра или это ограничение бесплатной версии?
    Добрый день.

    Ограничение на количество переменных в демо-версии нет. Только время работы.
    Какой прибор вы опрашиваете? из библиотеки поддержанных устройств? или прибор для которого самостоятельно написали карту адресов? если карту писали самостоятельно, то у вас в ней ошибка, не правильно выбран тип данных, функция и т.д. отсюда будут либо недостоверные значения, либо "-" в режиме опроса виртуального контроллера.

  9. #309

    По умолчанию

    Доброго времени суток.
    2 вопроса по телемеханике лайт.
    Первый: в контроллере создаю строковую переменную, как её можно изменить из визуализации?
    3.png

    Второй: есть скрипт, который в зависимости от настройки делит переменную на 1, 10 или 100. Переменная - ток, читается из прибора БЗП-01. При отладке скрипта выходная переменная нормально делится и отображаются все знаки после запятой. Но в таблице "Входы/выходы функционального блока" после запятой нули. Например, получили переменную 1234, в окне отладки скрипта при делении на 100 получим 12,34, а в таблице "Входы/выходы функционального блока" будет только 12,00. В чем проблема?

    Программа для одного канала:

    var Inom, ain, bin, cin: integer;
    var aout, bout, cout: real;
    {---------- main program -----------}
    begin
    ReadInteger('Inom',Inom);
    ReadInteger('Iain',ain);
    if Inom < 31 then begin
    aout := ain / 100;
    end
    else begin
    if Inom < 301 then begin
    aout := ain / 10;
    end;
    end;
    if Inom > 300 then begin
    aout := ain;
    end;
    WriteFloat('Iaout', aout);
    end.

    Типы переменных:
    переменные.png

  10. #310

    По умолчанию

    Цитата Сообщение от Neru Посмотреть сообщение
    Доброго времени суток.
    2 вопроса по телемеханике лайт.
    Первый: в контроллере создаю строковую переменную, как её можно изменить из визуализации?
    3.png

    Второй: есть скрипт, который в зависимости от настройки делит переменную на 1, 10 или 100. Переменная - ток, читается из прибора БЗП-01. При отладке скрипта выходная переменная нормально делится и отображаются все знаки после запятой. Но в таблице "Входы/выходы функционального блока" после запятой нули. Например, получили переменную 1234, в окне отладки скрипта при делении на 100 получим 12,34, а в таблице "Входы/выходы функционального блока" будет только 12,00. В чем проблема?

    Программа для одного канала:

    var Inom, ain, bin, cin: integer;
    var aout, bout, cout: real;
    {---------- main program -----------}
    begin
    ReadInteger('Inom',Inom);
    ReadInteger('Iain',ain);
    if Inom < 31 then begin
    aout := ain / 100;
    end
    else begin
    if Inom < 301 then begin
    aout := ain / 10;
    end;
    end;
    if Inom > 300 then begin
    aout := ain;
    end;
    WriteFloat('Iaout', aout);
    end.

    Типы переменных:
    переменные.png
    Здравствуйте.

    К сожалению переменные типа string в Телемеханике не работают.

    По второму вопросу, уже ранее писали (20.02.2020), о том что при отладке используется одни исполнители скрипта, в рабочем режиме другие.
    пока данная проблема не решена.

Страница 31 из 33 ПерваяПервая ... 212930313233 ПоследняяПоследняя

Похожие темы

  1. ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)
    от Serge_UA в разделе ПЛК (среда программирования CoDeSys V2.3)
    Ответов: 8321
    Последнее сообщение: Вчера, 22:12
  2. CODESYS V3.5. Вопросы и ответы
    от ООО "БЛС инжинеринг" в разделе ПЛК (среда программирования CODESYS V3.5)
    Ответов: 3670
    Последнее сообщение: 02.12.2021, 13:54
  3. Экспресс вопрос (ответ)
    от rovki в разделе Программируемые реле
    Ответов: 6213
    Последнее сообщение: 01.12.2021, 16:38
  4. вопрос-ответ , или а поговорить????
    от Павел Братковский в разделе Трёп (Курилка)
    Ответов: 10
    Последнее сообщение: 24.01.2018, 11:05
  5. Вопрос-ответ по Телемеханика ЛАЙТ
    от Popov Boris в разделе В разработке
    Ответов: 80
    Последнее сообщение: 03.11.2016, 15:24

Метки этой темы

Ваши права

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