PDA

Просмотр полной версии : Можно ли как-то без библиотек узнать работает ли программа в online или в симуляции?



Владимир Ситников
16.01.2017, 14:23
Есть код, который предназначен только для online режима. В симуляции его нужно просто игнорировать.

Можно такое сделать?
Можно ли сделать без внешних библиотек?

capzap
16.01.2017, 14:45
посмотреть на температуру процессора

Владимир Ситников
16.01.2017, 15:00
посмотреть на температуру процессора

Это прямо встроенная в codesys функция?

capzap
16.01.2017, 16:11
а где тогда модуль бутона и статистики вот здесь я задавал вопрос, в ответ была выложена картинка без оного модуля, неужто Вы о нем не знаете

Владимир Ситников
16.01.2017, 17:25
вот здесь я задавал вопрос, в ответ была выложена картинка без оного модуля, неужто Вы о нем не знаете

Поясню: мне нужен программный способ, без добавления библиотек, и без правки plc configuration.
Про температуру в статистике не знал, но не подходит т.к. хотелось бы что-нибудь вызвать и понять online или нет.

Scream
17.01.2017, 20:20
Создал еще один PRG с именем TEST, в нём делаю DO:=TRUE; (включаю дискретный выход)
В конфигураторе задач на событие start вешаю TEST, в эмуляции он не срабатывает, на ПЛК не могу сегодня проверить.

Ни на одно событие программа не выполнится из этого списка, хотя может потому что не вызывается из PLC_PRG, но опять же с другой стороны тогда смысла нет в событиях, в общем надо проверить на реальном ПЛК еще.

----
Не удержался, проверил удаленно на железе, да, это работает, вместо выхода создал глобальную BOOL, в эмуляции она FALSE, на ПЛК TRUE.

capzap
17.01.2017, 21:01
Создал еще один PRG с именем TEST, в нём делаю DO:=TRUE; (включаю дискретный выход)
В конфигураторе задач на событие start вешаю TEST, в эмуляции он не срабатывает, на ПЛК не могу сегодня проверить.

Ни на одно событие программа не выполнится из этого списка, хотя может потому что не вызывается из PLC_PRG, но опять же с другой стороны тогда смысла нет в событиях, в общем надо проверить на реальном ПЛК еще.

----
Не удержался, проверил удаленно на железе, да, это работает, вместо выхода создал глобальную BOOL, в эмуляции она FALSE, на ПЛК TRUE.

гыыыы, а кто страшилки рассказывал, об опасности включения выходов даже кратковременных, а тут на тебе, в реальном плк для теста выход включаем

ЗЫ только в модуле статистики есть бит состояния питающей сети прибора, а не представляю как в реальном плк без него обходятся пользователи

Scream
17.01.2017, 21:48
гыыыы, а кто страшилки рассказывал, об опасности включения выходов даже кратковременных, а тут на тебе, в реальном плк для теста выход включаем

ЗЫ только в модуле статистики есть бит состояния питающей сети прибора, а не представляю как в реальном плк без него обходятся пользователи

под..ёб не засчитан, я написал


Не удержался, проверил удаленно на железе, да, это работает, вместо выхода создал глобальную BOOL, в эмуляции она FALSE, на ПЛК TRUE.

Читаете между строк? ;)

capzap
17.01.2017, 22:37
под..ёб не засчитан, я написал


Читаете между строк? ;)

ну так и надо было изначально писать про задачи а не про физ.выхода, и да а как проверять в процессе работы, а не только во время запуска, ктому же тут конфигурацию отбраковали, а Вы про задачи

Scream
17.01.2017, 22:40
ну так и надо было изначально писать про задачи а не про физ.выхода, и да а как проверять в процессе работы, а не только во время запуска, ктому же тут конфигурацию отбраковали, а Вы про задачи

А как может среда поменяться во время исполнения?
Достаточно установить BOOL вначале при этом таске.

Тут да, идей накидали, ТС пусть думает далее сам.

Владимир Ситников
18.01.2017, 11:50
Тут да, идей накидали, ТС пусть думает далее сам.

Ага, всем спасибо!

Вариант с event'ами действительно и от targat'а зависит, и больше вероятность испортить имеющуюся "task configuration".

Вариант с sizeof, похоже, подойдёт.
Думаю, в рамках КДС 2.3 поведение вряд ли изменится.

Владимир Ситников
21.01.2017, 14:45
А на кой такая экзотика ? Раз есть оффлайн - есть исходник. Раз есть исходник - впилить переменную-селектор и вперед.

Поясню: у ПЛК110 М02 есть возможность заливать свободные программы для управления быстрыми входами-выходами. Ну, шаговые двигатели крутить, энкодеры обрабатывать и прочее.
Дело в том, что программы заливаются "через указатели, прямой доступ к памяти, вот это всё". Разумеется, при работе в симуляции обращения к памяти приводят к краху всей программы.

Поэтому и нужно как-то определять "online или simulation". Если такую проверку добавить, то КДС проект будет работать и в симуляции, и в online. Разумеется, в симуляции не будет симулироваться "блок управления ШД", но это не так страшно на текущий момент.

Разумеется, можно впилить какую-нибудь переменную, которую переключать туда-сюда, но это верный способ забыть про неё и т.п.
Взял человек проект. Запускает симуляцию, а у него "программа совершила недопустимую операцию и будет закрыта". Как из этого можно понять, что нужно поправить секретную переменную? Разумеется, никак. Поэтому и нужен механизм для автоматического распознавания simulation.


Откуда требование на "конфигуратор нельзя": сам блок (который работает с памятью) на самом деле автогенерируется (его генерирует среда Hardella (http://www.owen.ru/forum/showthread.php?t=23013)). И с точки зрения прикладного разработчика, он импортирует этот блок как обычный *.exp.

Т.е.:
1) Написали программу (в Hardella)
2) Скомпилировали (получился *.exp)
3) Импортировали этот exp в основной проект

Нужно так, чтобы при этом импорте пользовательский проект не ломался. Сейчас это достигается тем, что в exp файл помещено только самое нужное. Т.е. импортируются только автогенерированные блоки, а всевозможные plc configuration/task configuration не трогаются.

capzap
22.01.2017, 09:30
Т.е. импортируются только автогенерированные блоки, а всевозможные plc configuration/task configuration не трогаются.

так если бы модуль статистики ставить только ради определения режима исполнения, то я бы понял, но он нужен и для работы более менее серьезной программы, любой

Владимир Ситников
22.01.2017, 09:37
так если бы модуль статистики ставить только ради определения режима исполнения, то я бы понял, но он нужен и для работы более менее серьезной программы, любой
Так дело не столько в том, что я не хочу трогать plc configuration, а в том, что тяжело через импорт exp файла добавить модуль статистики. Там может зависеть от таргета, модуль уже может быть в проекте (второй что-ли добавлять?)

capzap
22.01.2017, 09:40
экспортный файл удаляет объект в проекте, какая разница тогда стоял там модуль или нет

Владимир Ситников
22.01.2017, 11:53
экспортный файл удаляет объект в проекте, какая разница тогда стоял там модуль или нет

Допустим, пользователь уже добавил модуль статистики, и даже объявил нужные переменные в plc configuration.
Если как-нибудь удалим (на самом деле, через *.exp непонятно как удалять), то программа сломается. Мы же не знали как там пользователь обозвал переменную.

Обращаться по AT тоже не вариант, т.к. неизвестно какой будет адрес.

capzap
22.01.2017, 13:03
какая-то уже фигня пошла, а кто если не программист устанавливает экспортный файл к себе в проект, при первой же компиляции ошибки дадут о себе знать, вспомнит где стояла одна переменная с каким то узнаваемым именем вообще не сложно

Владимир Ситников
22.01.2017, 13:27
какая-то уже фигня пошла, а кто если не программист устанавливает экспортный файл к себе в проект, при первой же компиляции ошибки дадут о себе знать, вспомнит где стояла одна переменная с каким то узнаваемым именем вообще не сложно

Фигня не фигня, а меня почти каждый спросил "что значит ошибка identifier PRU_FB_GET_PARAMETER not defined": http://www.owen.ru/forum/showthread.php?t=23013&page=48&p=233648&highlight=PRU_FB_GET_PARAMETER#post233648

Кто-то по несколько раз на эти грабли наступал. Поэтому и хочу сделать "без библиотек".

Newcomer
22.01.2017, 14:09
Фигня не фигня, а меня почти каждый спросил "что значит ошибка identifier PRU_FB_GET_PARAMETER not defined":
Кто-то по несколько раз на эти грабли наступал. Поэтому и хочу сделать "без библиотек".

Я два раза наступал, но это мелкий вопрос.