Страница 297 из 887 ПерваяПервая ... 197247287295296297298299307347397797 ... ПоследняяПоследняя
Показано с 2,961 по 2,970 из 8862

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #2961
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    8,219

    По умолчанию

    petera спасибо, так заработало. Видимо что-то не так делал сперва.
    А вопрос по поводу как правильно делать через конфигуратор задач остается... можно ли передавать параметры в программу и возвращать обратно и как правильно это делать ?

  2. #2962
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    9,817

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    petera спасибо, так заработало. Видимо что-то не так делал сперва.
    А вопрос по поводу как правильно делать через конфигуратолр задач остается... можно ли передавать параметры в программу и возвращать обратно и как правильно это делать ?
    Чтоб это понять в документации написано, более широко может быть в инструкции по использованию скоростного счетчика

  3. #2963
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,208

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    petera спасибо, так заработало. Видимо что-то не так делал сперва.
    А вопрос по поводу как правильно делать через конфигуратор задач остается... можно ли передавать параметры в программу и возвращать обратно и как правильно это делать ?
    Например, как было сказано выше, через глобальные переменные.
    Вложение 14074 Вложение 14075
    Здесь X и IN глобальные переменные для передачи значений в циклическую программу. А результат ее работы в главной программе берется путем обращения к переменной "А" по имени PRG2.А, хотя ее тоже можно было сделать глобальной.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков

  4. #2964
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    8,219

    По умолчанию

    Странно, вроде вчера через глобальные делал точно так же, и не заработало, видать спал уже, сейчас набросал пример и все вроде как завелось.
    Может как-то влиять, что я переменную из Modbus сразу назначил глобальной ?
    Ну и вот для примера, разница подсчета видна. В первом случае в другой программе с таймером.
    Во втором случае вызов каждую секунду из конфигуратора задач. В начале пути опрос через конфигуратор опережает. но значения повторяются, а дальше видно, что значения во втором случае выше. Переменная kwt и kwt1.

  5. #2965
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    1,801

    По умолчанию

    что я переменную из Modbus сразу назначил глобальной ?
    Смущает эта фраза. Переменная из модбас сама по себе глобальная без назначений.

    Глобальные переменные вроде являются Retain или нет ?
    Ретайн это то, что объявлено как ретайн + область io

    беря данные из однофазного мультиметра считать киловатт_часы и значения были близки к показаниям счетчик
    Имхо, для большей точности и здравого смысла расчеты нужно делать только в момент прихода ))).
    Интеграл := интеграл + значение*dt. Остальное время можно курить бамбук.

  6. #2966
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,208

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Странно, вроде вчера через глобальные делал точно так же, и не заработало, видать спал уже, сейчас набросал пример и все вроде как завелось.
    Может как-то влиять, что я переменную из Modbus сразу назначил глобальной ?
    Ну и вот для примера, разница подсчета видна. В первом случае в другой программе с таймером.
    Во втором случае вызов каждую секунду из конфигуратора задач. В начале пути опрос через конфигуратор опережает. но значения повторяются, а дальше видно, что значения во втором случае выше. Переменная kwt и kwt1.
    1. Любые объявления переменных в конфигурации, в том числе и в модуле Modbus, являются глобальными по умолчанию. Т.е. их не нужно объявлять глобальными где-либо еще.
    2. В эмуляции будет так, как Вы и описываете, разница будет постепенно увеличиваться. При загрузке в ПЛК разницы быть не должно. Возможна разница только на значение одного вычисления из-за асинхронного вызова подпрограмм.

    ЗЫ. К стати в примере из http://www.owen.ru/forum/showthread....l=1#post143814
    Цитата Сообщение от приборист Посмотреть сообщение
    ...Ну или вот так (если просто через определенное время выполнять действия):

    TM(in:=NOT TM.q, pt:=t#1s);
    IF TM.q THEN
    A:=A+IN/X;
    END_IF
    Ошибка должно быть так
    Код:
    TM(in:=NOT TM.q, pt:=t#1s);
    IF NOT TM.q THEN
    A:=A+IN/X;
    END_IF
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков

  7. #2967
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    8,219

    По умолчанию

    Валенок и как понять, что случился "приход" ? если отталкиваться, что читаю по modbus
    petera на последней картинке IF TM.Q Then и работает, если поставить IF NOT то считаться будет в течение всей секунды, разве нет ?

  8. #2968
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,208

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    petera на последней картинке IF TM.Q Then и работает, если поставить IF NOT то считаться будет в течение всей секунды, разве нет ?
    Так смотря какой таймер. Если как в моих примерах TP или TOF, то должно быть "IF NOT TM.q THEN". Если таймер TON, то правильно так, как в оригинале.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков

  9. #2969
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    1,801

    По умолчанию

    как понять, что случился "приход" ?
    Код:
    var
       pre : real;
       приход : bool;
    
    приход := ai <> pre; //Косвенный, но верный. Если юзаете через б-ки  то там факт прихода напрямую
    pre := ai;
    Если переживаете про постоянное значение (на реальном процессе никогда не будет, для эмуляции пойдет) - прикрутите таймер
    Код:
    var
       t : ton := (pt :=заведомо больше цикла опроса);
    
    t(in:= not приход);
    приход:=ai <> pre or t.q;
    pre:=ai;
    
    if приход then
       интеграл := интеграл + ai * time_to_real(time() - t) / 1000;
       t := time();
    end_if
    PS
    И, кстати, отсутствие прихода - косвенный признак обрыва связи с модулем
    Код:
    var
       connect : tof := (in:= true, pt := 3..10 циклов опроса);
    
    connect();  //игнорим на старте - ведь еще не успели связатся
    connect.in := приход;
    if not connect.q then
       ..
    end_if

  10. #2970
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    8,219

    По умолчанию

    Валенок спасибо, попробую и по приходу. Просто правильнее в любом случае делить на период опроса, иначе мы не кВт часы получим, а что-то эфемерное...
    Ведь приход может быть как раньше секунды, так и позже секунды и как тогда программировать время ?
    Суть. кВт час = (при опросе раз в секунду) мощность(в кВт)/3600
    Хотя наверное 3600 можно превратить в переменную, зависящую от времени опроса, только формула будет посложнее.

Страница 297 из 887 ПерваяПервая ... 197247287295296297298299307347397797 ... ПоследняяПоследняя

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

Ваши права

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