Просмотр полной версии : Нужен совет!
Люди добрые подскажите
Решил поюзать в первый раз ПЛК 110-60 и
столкнулся с проблемой ПЛк 110-60 не хочет записывать данные в файл на свою флеш
по средством SysFileWrite
хотя точно такой же код на плк 100 работает корректно пишет и читает
Вопрос конечно, но может ли плк 110-60 не понимать библиотеки SysFileWrite SysFileRead ?
У меня нормально записывалось на ПЛК160 и ПЛК110-32. Давайте вы хоть код покажете?
Дмитрий Артюховский
23.09.2014, 08:34
Все работает. Может в эмуляторе запускаете?
Причина того что плк не может прочитать файл потому что он собака часть просто не создает поэтому и открывать не чего для чтения или записи почему может создаваться только лишь часть в какую сторону капать? знатоки подскажите уже бубен порвал :(
14506 сам код второго бубна нет с первым допрыгался
таргет v2.10 плк 110-60 все перекапал собаку не нашел руки опускаются ума не преложу:(
Дмитрий Артюховский
25.09.2014, 09:44
глубоко код не смотрел, но бросилось в глаза, вы используете тип PRG для вставленных блоков, а надо бы FB... по идее PRG выполнившись, прервет текущий цикл, и у вас не будет выполняться часть кода следующая за вставкой...
Дмитрий если Вас не затруднит можно по подробней
Просто многое приходится постигать самостоятельно и не всегда бывает правильное понимание, а советы знатоков за частую дают правильное направление !
Кроме того есть большое стремление к правильному коду :)
Дмитрий Артюховский
26.09.2014, 12:04
вы часть кода оформили как отдельные модули и вставили их в основной блок. Если модуль имеет тип PRG - то после выполнения будет прерван цикл ПЛК, и часть кода, размещенная после модуля не будет выполняться никогда.
Выполняется код PLC_PRG, в нем выполняется Read_Tools() а вот все что ниже не выполняется никогда
вы часть кода оформили как отдельные модули и вставили их в основной блок. Если модуль имеет тип PRG - то после выполнения будет прерван цикл ПЛК, и часть кода, размещенная после модуля не будет выполняться никогда.
Выполняется код PLC_PRG, в нем выполняется Read_Tools() а вот все что ниже не выполняется никогда
Это утверждение не соответствует действительности! Не пишите глупости.
Дмитрий Артюховский
27.09.2014, 10:39
Это утверждение не соответствует действительности! Не пишите глупости.
как ни странно, но да, выполняется... а в чем тогда разница FB и PRG?
а в чем тогда разница FB и PRG?PRG — самостоятельный элемент, FB — шаблон самостоятельного элемента. Соответственно PRG можно вызвать, а FB — нельзя (вызывается экземпляр, созданный по шаблону).
как ни странно, но да, выполняется... а в чем тогда разница FB и PRG?
У FB есть локальные переменные VAR_INPUT, VAR_OUTPUT, VAR, а у PRG только VAR.
Если модуль имеет тип PRG - то после выполнения будет прерван цикл ПЛК, и часть кода, размещенная после модуля не будет выполняться никогда.
И откуда такой несусветный бред? :eek: блок PRG выполнился, и далее управление снова передаётся в PLC_PRG, к первой команде после блока. Иначе не было бы особого смысла в подпрограммах.
У FB есть локальные переменные VAR_INPUT, VAR_OUTPUT, VAR, а у PRG только VAR.
Ничто не мешает в PRG создать VAR_INPUT, VAR_OUTPUT, часто так делаю.
а в чем тогда разница FB и PRG?
Вставлю свои 5 копеек в интересное обсуждение. На сколько я понимаю PRG - это глобальный элемент и может использоваться в задачах. Его не надо описывать в разделе переменных, а FB напоминает мне описание типа структуры, только с кодом (хотя можно и без него), для его использования надо создать соответствующую переменную.
Вставлю свои 5 копеек в интересное обсуждение.
А чем это оно интересное? ;) Это азы языка, поддерживающего ООП, без них далеко не "уедешь".
Просто на этом форуме многие учатся азам, а в документации не всегда таким мелочам уделяется внимание.
Sergey666
28.09.2014, 00:29
Что , понижение IQ глобальное , или память подзафрагментировалась?!
И не лузеры вроде-бы :
ВОЛЬД - У PRG Легко могут быть переменные var_input and var_output.
Функциональный блок или функция вызывается с присвоением входных переменных и выходных , при этом функциональный блок отличается от функции тем , что у него может быть выхдных переменных более 1й . Программа вызывается просто по имени.
Но! В ST можно ВСЕ вызвать просто по имени и оно выполнится , но как ... одному процессору ведомо .
В приложенном проекте каша какая-то , должна быть ИЕРАРХИЯ , а там ... как будто кто-то специально извратился , чтобы все запутать .
Кстати программу по идее в ST можно вызвать даже из функционального блока и это выполнится , но .... результат выполнения программы (ЛЮБОЙ) тот , что соответствует логике процессора и не всегда соответствует желанию (хотению , думке и тд) программиста.
-------------------------------
функциональный блок или функция (зависит от функционала) применяются для вызова ЭКЗЕМПЛЯРА КОДА с различными присвоенными входными значениями в СКАНЕ программы . Типа TON или аналогичными .
НО !
Все , что написано корректно с точки зрения компилятора БУДЕТ ВЫПОЛНЕНО !!! Единственное условие выхода из Экземпляра программы или функционального блока или функции - оператор RETURN !
--------------------------------
Интересно сам Афтар логическую цепочку приложенной программы просекает ?
Я особо не разгребал , но в примерах открытие-запись-закрытие выполняется в одном цикле , какого ... разбивать процесс оператоом CASE ??? И !!! делать это в экземпляре ФБ !!!
Есть инструмент хороший TRACE с его помощью можно проследить что и когда реально происходит .
--------------------------------
Сегодня , или нет уже вчера День города КРАСНОДАР . 220 с каким-то лет , более чем государствам некоторым , например США.:)
Это утверждение не соответствует действительности! Не пишите глупости.Такое краткое замечание вызвало такую длинную полемику:)
как ни странно, но да, выполняется... а в чем тогда разница 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
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" есть много несуразностей, которые требуют отдельного обсуждения
Не сочтите за невежество попробую оправдаться по поводу кода
- Объявленные переменные но отсутствующие в коде - просто части кода не имеющие отношения к проблеме были удалены чтобы не загружать лишним видимо обрывки остались :) конкретно переменная 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 что то за парил - спешка нужно при ловле блох.
Да еще и опыта маловато пробелы в мат части начинаешь просто иной раз загоняться и начинают терзать сомнения :)
а сомнения от не знания поэтому Оооогромное человеческое СПАСИБО!! всем тем кто подсказывает нам с какой стороны легче грызть гранит науки!!
Как доберусь до компа сразу возьмусь за исправления с учетом замечаний еще раз большое спасибо всем откликнувшимся
...................
По поводу чтения- записи литература, говорит автора не вспомню: чтение, открыл- прочитал -закрыл лучше разделять на несколько циклов
запись: открыл-записал-закрыл то же несколько циклов поэтому С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"
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot