PDA

Просмотр полной версии : Нужен совет!



BSA
23.09.2014, 06:20
Люди добрые подскажите
Решил поюзать в первый раз ПЛК 110-60 и
столкнулся с проблемой ПЛк 110-60 не хочет записывать данные в файл на свою флеш
по средством SysFileWrite
хотя точно такой же код на плк 100 работает корректно пишет и читает
Вопрос конечно, но может ли плк 110-60 не понимать библиотеки SysFileWrite SysFileRead ?

Yegor
23.09.2014, 07:35
У меня нормально записывалось на ПЛК160 и ПЛК110-32. Давайте вы хоть код покажете?

Дмитрий Артюховский
23.09.2014, 08:34
Все работает. Может в эмуляторе запускаете?

BSA
23.09.2014, 18:27
Причина того что плк не может прочитать файл потому что он собака часть просто не создает поэтому и открывать не чего для чтения или записи почему может создаваться только лишь часть в какую сторону капать? знатоки подскажите уже бубен порвал :(

BSA
23.09.2014, 18:59
14506 сам код второго бубна нет с первым допрыгался
таргет v2.10 плк 110-60 все перекапал собаку не нашел руки опускаются ума не преложу:(

Дмитрий Артюховский
25.09.2014, 09:44
глубоко код не смотрел, но бросилось в глаза, вы используете тип PRG для вставленных блоков, а надо бы FB... по идее PRG выполнившись, прервет текущий цикл, и у вас не будет выполняться часть кода следующая за вставкой...

BSA
25.09.2014, 19:01
Дмитрий если Вас не затруднит можно по подробней
Просто многое приходится постигать самостоятельно и не всегда бывает правильное понимание, а советы знатоков за частую дают правильное направление !
Кроме того есть большое стремление к правильному коду :)

Дмитрий Артюховский
26.09.2014, 12:04
вы часть кода оформили как отдельные модули и вставили их в основной блок. Если модуль имеет тип PRG - то после выполнения будет прерван цикл ПЛК, и часть кода, размещенная после модуля не будет выполняться никогда.
Выполняется код PLC_PRG, в нем выполняется Read_Tools() а вот все что ниже не выполняется никогда

petera
26.09.2014, 12:23
вы часть кода оформили как отдельные модули и вставили их в основной блок. Если модуль имеет тип PRG - то после выполнения будет прерван цикл ПЛК, и часть кода, размещенная после модуля не будет выполняться никогда.
Выполняется код PLC_PRG, в нем выполняется Read_Tools() а вот все что ниже не выполняется никогда
Это утверждение не соответствует действительности! Не пишите глупости.

Дмитрий Артюховский
27.09.2014, 10:39
Это утверждение не соответствует действительности! Не пишите глупости.

как ни странно, но да, выполняется... а в чем тогда разница FB и PRG?

Yegor
27.09.2014, 11:45
а в чем тогда разница FB и PRG?PRG — самостоятельный элемент, FB — шаблон самостоятельного элемента. Соответственно PRG можно вызвать, а FB — нельзя (вызывается экземпляр, созданный по шаблону).

Вольд
27.09.2014, 11:49
как ни странно, но да, выполняется... а в чем тогда разница FB и PRG?
У FB есть локальные переменные VAR_INPUT, VAR_OUTPUT, VAR, а у PRG только VAR.

Boris_K
27.09.2014, 14:49
Если модуль имеет тип PRG - то после выполнения будет прерван цикл ПЛК, и часть кода, размещенная после модуля не будет выполняться никогда.
И откуда такой несусветный бред? :eek: блок PRG выполнился, и далее управление снова передаётся в PLC_PRG, к первой команде после блока. Иначе не было бы особого смысла в подпрограммах.


У FB есть локальные переменные VAR_INPUT, VAR_OUTPUT, VAR, а у PRG только VAR.
Ничто не мешает в PRG создать VAR_INPUT, VAR_OUTPUT, часто так делаю.

amn
27.09.2014, 21:07
а в чем тогда разница FB и PRG?
Вставлю свои 5 копеек в интересное обсуждение. На сколько я понимаю PRG - это глобальный элемент и может использоваться в задачах. Его не надо описывать в разделе переменных, а FB напоминает мне описание типа структуры, только с кодом (хотя можно и без него), для его использования надо создать соответствующую переменную.

Boris_K
27.09.2014, 21:29
Вставлю свои 5 копеек в интересное обсуждение.
А чем это оно интересное? ;) Это азы языка, поддерживающего ООП, без них далеко не "уедешь".

amn
27.09.2014, 21:38
Просто на этом форуме многие учатся азам, а в документации не всегда таким мелочам уделяется внимание.

Sergey666
28.09.2014, 00:29
Что , понижение IQ глобальное , или память подзафрагментировалась?!
И не лузеры вроде-бы :
ВОЛЬД - У PRG Легко могут быть переменные var_input and var_output.
Функциональный блок или функция вызывается с присвоением входных переменных и выходных , при этом функциональный блок отличается от функции тем , что у него может быть выхдных переменных более 1й . Программа вызывается просто по имени.
Но! В ST можно ВСЕ вызвать просто по имени и оно выполнится , но как ... одному процессору ведомо .
В приложенном проекте каша какая-то , должна быть ИЕРАРХИЯ , а там ... как будто кто-то специально извратился , чтобы все запутать .
Кстати программу по идее в ST можно вызвать даже из функционального блока и это выполнится , но .... результат выполнения программы (ЛЮБОЙ) тот , что соответствует логике процессора и не всегда соответствует желанию (хотению , думке и тд) программиста.
-------------------------------
функциональный блок или функция (зависит от функционала) применяются для вызова ЭКЗЕМПЛЯРА КОДА с различными присвоенными входными значениями в СКАНЕ программы . Типа TON или аналогичными .
НО !
Все , что написано корректно с точки зрения компилятора БУДЕТ ВЫПОЛНЕНО !!! Единственное условие выхода из Экземпляра программы или функционального блока или функции - оператор RETURN !
--------------------------------
Интересно сам Афтар логическую цепочку приложенной программы просекает ?
Я особо не разгребал , но в примерах открытие-запись-закрытие выполняется в одном цикле , какого ... разбивать процесс оператоом CASE ??? И !!! делать это в экземпляре ФБ !!!
Есть инструмент хороший TRACE с его помощью можно проследить что и когда реально происходит .
--------------------------------
Сегодня , или нет уже вчера День города КРАСНОДАР . 220 с каким-то лет , более чем государствам некоторым , например США.:)

petera
28.09.2014, 11:31
Это утверждение не соответствует действительности! Не пишите глупости.Такое краткое замечание вызвало такую длинную полемику:)

как ни странно, но да, выполняется... а в чем тогда разница FB и PRG?
Хотя бы иногда нужно пользоваться справкой.
14529 14528


....................................
1) Но! В ST можно ВСЕ вызвать просто по имени и оно выполнится , но как ... одному процессору ведомо .
.................................................. ......
2) В приложенном проекте каша какая-то , должна быть ИЕРАРХИЯ , а там ... как будто кто-то специально извратился , чтобы все запутать .
.................................................. ......
1) Кстати программу по идее в ST можно вызвать даже из функционального блока и это выполнится
.................................................. .....
2) Интересно сам Афтар логическую цепочку приложенной программы просекает ?
.................................................. .....
3) Я особо не разгребал , но в примерах открытие-запись-закрытие выполняется в одном цикле , какого ... разбивать процесс оператоом CASE ??? И !!! делать это в экземпляре ФБ !!!
.................................................. ....
1) Не только в ST
2) Полностью согласен. А часть кода вообще лишняя.
Например
14530
3)"открытие-запись-закрытие выполняется в одном цикле" Не верное утверждение, каждое условие CASE будет выполняться в разные циклы ПЛК.
"И !!! делать это в экземпляре ФБ !!!" нет там никаких экземпляров ФБ:)
14532
Хотя ненужно было использовать CASE внутри одного шага программы на SFC, но по другой причине. Ведь каждое условие CASE эквивалентно отдельному шагу SFC. Можно было операции открытие-запись-закрытие файла и открытие-чтение-закрытие файла сделать отдельными шагами SFC.

Как ни странно, но если разрешать в проекте работать только "Read_Tools_Gidropushitel" или только "Write_Tools_Gidropushitel", то операции чтения из файла и запись в файл работают корректно.
А не работает программа по тому, что "сам Афтар логическую цепочку приложенной программы НЕ просекает". И согласно ошибке,имеющейся в логике программы, при попытке записать в файл по команде с панели, одновременно будут работать обе подпрограммы - "Write_Tools_Gidropushitel" и "Read_Tools_Gidropushitel".:(

ЗЫ. Не смотря на то, что каждое условие CASE будет выполняться в разные циклы ПЛК, в коде есть ошибка. В результате которой закрытие файла будет происходить сразу после записи в файл или чтения из файла, в одном и том же цикле ПЛК (в одном и том же условии CASE)
14536

petera
28.09.2014, 13:40
14506 сам код второго бубна нет с первым допрыгался
таргет v2.10 плк 110-60 все перекапал собаку не нашел руки опускаются ума не преложу:(
Бубны в сторону:rolleyes:.
И так, что нужно изменить в программе, что бы файлы и писались и читались
1. В коде HMI(PRG) нужно сделать такие изменения
14537
Теперь в принципе все должно работать, по крайней мере в PLCWinNT сразу начинает работать(у меня нет возможности проверить в ПЛК110).
Но лучше продолжить изменения в проекте.
2. С учетом этого замечания
Не смотря на то, что каждое условие CASE будет выполняться в разные циклы ПЛК, в коде есть ошибка. В результате которой закрытие файла будет происходить сразу после записи в файл или чтения из файла, в одном и том же цикле ПЛК (в одном и том же условии CASE)
В код действия для Step1 программы Read_Tools_Gidropushitel нужно внести изменения
14538

А в код действия для Step1 программы Write_Tools_Gidropushitel нужно внести такие изменения
14539

3. У автора почему-то не предусмотрено чтение сохраненной информации из файла после старта ПЛК :confused:. Тогда к чему все эти "нелепые телодвижения" с сохранением настроек в файл?
Исправить этот недостаток очень просто. Нужно добавить начальное значение переменной "State_Read_Tools_Gidropushitel"
14540
Это разрешит однократное чтение настроек из файла и передачу сохраненных значение в панель при старте ПЛК.

В SFC программах "Read_Tools_Gidropushitel" и "Write_Tools_Gidropushitel" есть много несуразностей, которые требуют отдельного обсуждения

BSA
06.10.2014, 21:39
Не сочтите за невежество попробую оправдаться по поводу кода
- Объявленные переменные но отсутствующие в коде - просто части кода не имеющие отношения к проблеме были удалены чтобы не загружать лишним видимо обрывки остались :) конкретно переменная Count
- Cоunt_prg=100 потому что чтобы исключить заход в шаг Step2_Re.... когда начинались танцы с бубном в этом шаге читались настройки из файла при Cоunt_prg=1 при старте

Хотя ненужно было использовать CASE внутри одного шага программы на SFC, но по другой причине. Ведь каждое условие CASE эквивалентно отдельному шагу SFC. Можно было операции открытие-запись-закрытие файла и открытие-чтение-закрытие файла сделать отдельными шагами SFC.
-Просто хотел сделать меньшее количество шагов
По поводу чтения- записи литература, говорит автора не вспомню: чтение, открыл- прочитал -закрыл лучше разделять на несколько циклов
запись: открыл-записал-закрыл то же несколько циклов поэтому СASE
"Read_Tools_Gidropushitel" "Write_Tools_Gidropushitel" вызываются вместе но одновременно не находятся в шагах записи и чтения вернее наверное не должны находится.

Не смотря на то, что каждое условие CASE будет выполняться в разные циклы ПЛК, в коде есть ошибка. В результате которой закрытие файла будет происходить сразу после записи в файл или чтения из файла, в одном и том же цикле ПЛК (в одном и том же условии CASE)
Вот где собака зарыта.
Видимо когда копировал часть кода с другой программы для плк 100 что то за парил - спешка нужно при ловле блох.
Да еще и опыта маловато пробелы в мат части начинаешь просто иной раз загоняться и начинают терзать сомнения :)
а сомнения от не знания поэтому Оооогромное человеческое СПАСИБО!! всем тем кто подсказывает нам с какой стороны легче грызть гранит науки!!
Как доберусь до компа сразу возьмусь за исправления с учетом замечаний еще раз большое спасибо всем откликнувшимся

petera
07.10.2014, 00:52
...................
По поводу чтения- записи литература, говорит автора не вспомню: чтение, открыл- прочитал -закрыл лучше разделять на несколько циклов
запись: открыл-записал-закрыл то же несколько циклов поэтому СASE
"Read_Tools_Gidropushitel" "Write_Tools_Gidropushitel" вызываются вместе но одновременно не находятся в шагах записи и чтения вернее наверное не должны находится................
А Вы попробуйте выполнить программу по шагам и посмотрите. Ведь в программе "Write_Tools_Gidropushitel" запускается "Read_Tools_Gidropushitel". Но работа "Write_Tools_Gidropushitel" не выполняется однократно, если команда из панели Cmd_HMI.6 остается TRUE, то "Write_Tools_Gidropushitel" запускается снова, а в это время файл уже открыт в программе "Read_Tools_Gidropushitel".
"Достаточно одной таблэтки" - изменений по п.1 " В коде HMI(PRG) нужно сделать такие изменения". И после этого программа начинает правильно функционировать, даже несмотря на
​то, что каждое условие CASE будет выполняться в разные циклы ПЛК, в коде есть ошибка. В результате которой закрытие файла будет происходить сразу после записи в файл или чтения из файла, в одном и том же цикле ПЛК в одном и том же условии CASE Скорей всего собака зарыта именно в том, что
при попытке записать в файл по команде с панели, одновременно будут работать обе подпрограммы - "Write_Tools_Gidropushitel" и "Read_Tools_Gidropushitel"