petera спасибо, так заработало. Видимо что-то не так делал сперва.
А вопрос по поводу как правильно делать через конфигуратор задач остается... можно ли передавать параметры в программу и возвращать обратно и как правильно это делать ?
petera спасибо, так заработало. Видимо что-то не так делал сперва.
А вопрос по поводу как правильно делать через конфигуратор задач остается... можно ли передавать параметры в программу и возвращать обратно и как правильно это делать ?
Например, как было сказано выше, через глобальные переменные.
Вложение 14074 Вложение 14075
Здесь X и IN глобальные переменные для передачи значений в циклическую программу. А результат ее работы в главной программе берется путем обращения к переменной "А" по имени PRG2.А, хотя ее тоже можно было сделать глобальной.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Странно, вроде вчера через глобальные делал точно так же, и не заработало, видать спал уже, сейчас набросал пример и все вроде как завелось.
Может как-то влиять, что я переменную из Modbus сразу назначил глобальной ?
Ну и вот для примера, разница подсчета видна. В первом случае в другой программе с таймером.
Во втором случае вызов каждую секунду из конфигуратора задач. В начале пути опрос через конфигуратор опережает. но значения повторяются, а дальше видно, что значения во втором случае выше. Переменная kwt и kwt1.
Смущает эта фраза. Переменная из модбас сама по себе глобальная без назначений.что я переменную из Modbus сразу назначил глобальной ?
Ретайн это то, что объявлено как ретайн + область ioГлобальные переменные вроде являются Retain или нет ?
Имхо, для большей точности и здравого смысла расчеты нужно делать только в момент прихода ))).беря данные из однофазного мультиметра считать киловатт_часы и значения были близки к показаниям счетчик
Интеграл := интеграл + значение*dt. Остальное время можно курить бамбук.
1. Любые объявления переменных в конфигурации, в том числе и в модуле Modbus, являются глобальными по умолчанию. Т.е. их не нужно объявлять глобальными где-либо еще.
2. В эмуляции будет так, как Вы и описываете, разница будет постепенно увеличиваться. При загрузке в ПЛК разницы быть не должно. Возможна разница только на значение одного вычисления из-за асинхронного вызова подпрограмм.
ЗЫ. К стати в примере из http://www.owen.ru/forum/showthread....l=1#post143814
Ошибка должно быть так
Код:TM(in:=NOT TM.q, pt:=t#1s); IF NOT TM.q THEN A:=A+IN/X; END_IF
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Валенок и как понять, что случился "приход" ? если отталкиваться, что читаю по modbus
petera на последней картинке IF TM.Q Then и работает, если поставить IF NOT то считаться будет в течение всей секунды, разве нет ?
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
как понять, что случился "приход" ?Если переживаете про постоянное значение (на реальном процессе никогда не будет, для эмуляции пойдет) - прикрутите таймерКод:var pre : real; приход : bool; приход := ai <> pre; //Косвенный, но верный. Если юзаете через б-ки то там факт прихода напрямую pre := ai;
PSКод: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
И, кстати, отсутствие прихода - косвенный признак обрыва связи с модулем
Код:var connect : tof := (in:= true, pt := 3..10 циклов опроса); connect(); //игнорим на старте - ведь еще не успели связатся connect.in := приход; if not connect.q then .. end_if
Валенок спасибо, попробую и по приходу. Просто правильнее в любом случае делить на период опроса, иначе мы не кВт часы получим, а что-то эфемерное...
Ведь приход может быть как раньше секунды, так и позже секунды и как тогда программировать время ?
Суть. кВт час = (при опросе раз в секунду) мощность(в кВт)/3600
Хотя наверное 3600 можно превратить в переменную, зависящую от времени опроса, только формула будет посложнее.