PDA

Просмотр полной версии : Массивы на ST и другие вопросы новичка



Phaust
07.03.2011, 20:59
Так сложилась моя жизнь,что пришлось вместо программирования на моем любимом C# обратиться к прямой специальности,частью которой является и программирование ПЛК.
С одной стороны,вроде и то и то программирование,но вот некоторые нюансы ставят в тупик начисто :confused: С той частью верхнего уровня ,что на C# проблем особых нет,а вот с самим контроллером... Назрели у меня некие вопросы,на которые бы хотелось бы получить ответ у более опытных специалистов.
1) Где можно найти более менее исчерпывающие материалы по языках ST и LD? Именно по синтаксису.
2) Вопрос по синтаксису ST. Могу ли я при объявлении массива пользовательских структур инициализировать его элементы значениями отличными от default значений. С массивом простого типа понятно, но вот со структурами что то никак. Как вы делаете такую инициализацию?

lara197a
08.03.2011, 09:19
В КДС есть справка. В ней примеры и прочее

Phaust
08.03.2011, 10:39
shift+f2 помогло со вторым вопросом. Справка Кодесиса,к сожалению,оставляет желать лучшего. Привычка к другому очевидно не раз сыграет со мной дурную шутку в этом деле... Есть какая то литература помимо справки?

kolyan
08.03.2011, 10:50
shift+f2 помогло со вторым вопросом. Справка Кодесиса,к сожалению,оставляет желать лучшего. Привычка к другому очевидно не раз сыграет со мной дурную шутку в этом деле... Есть какая то литература помимо справки?

"Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования (И.В. Петров, 2004)"

"Программируемые контроллеры - руководство для инженера. Э.Парр 2007".

Ссылок на скачивание нет, но, если в инете поискать, то обязательно найдётся.

drvlas
08.03.2011, 11:05
Справка Кодесиса,к сожалению,оставляет желать лучшего. Привычка к другому очевидно не раз сыграет со мной дурную шутку в этом деле... Есть какая то литература помимо справки?
Я тут прославился, как огульный критикан справочной литературы как по КДС, так и по ОВЕНовской продукции. Поэтому хочу утешить - ты не одинок :)

Справка в CoDeSys, по-моему, эквивалентна материалу, который есть в документации, поставляемой с ПЛК (у меня эта директория называется "Документация").
При установке CoDeSys в дефолтные директории устанавливается также раздел Profram Files\3S Software\CoDeSys V2.3\Documents - там тоже есть описание КДС.
А по языку мне очень помогла книга уважаемого товарища Петрова. Набирай в гугле "программируемые контроллеры. стандартные языки и приемы прикладного проектирования".
Есть и другие книги. Но много не нужно, если ты уже Сикал :)

И - спрашивай. Мое внимание гарантировано. Сам хожу по граблям - и другим помогаю :) А уж если подключатся Метры, то реально много узнаешь. Только старайся поконкретнее, если умеешь :)

Удачи!

drvlas
08.03.2011, 11:33
2) Вопрос по синтаксису ST. Могу ли я при объявлении массива пользовательских структур инициализировать его элементы значениями отличными от default значений. С массивом простого типа понятно, но вот со структурами что то никак. Как вы делаете такую инициализацию?

Похоже, что с этим уже все в порядке? Тем не менее, могу предложить метод, подсказанный товарищем Валенок - см.здеся (http://owen.ru/forum/showthread.php?t=9285). Использую теперь этот подход - и очень доволен! Если что заинтересует, но будет непонятно - могу развернуть лаконичные советы Валенка.

Phaust
08.03.2011, 16:46
drvlas Спасибо!
Книга Петрова у меня есть,когда то изучал. Но она далеко от справки КДС не ушла,не Троелсен однозначно :D Вторую нашел и скачал,сейчас просматриваю...
Совет Валенка попробую изложить своими словами,если что поправьте.
1) Объявляем структуру,массив оных. + Флаг выполнения и количество полей в структуре
2) Пишем функцию,которая присваивает значения одному элементу,потом вызываем ее необходимое количество раз. Сбрасываем флаг.
Так?
Мои грабли еще в том,что задачи прямого использования ПЛК у меня нет, он у меня для экспериментов... Самая мрачная, на мой взгляд, задача это реализация вот этого алгоритма:
http://clip2net.com/clip/m72069/1299591544-clip-54kb.png (это у заказчика стояла система на Ремиконтах-130 :( )
Ну и как то эмулировать объект,которым управляем.
Может есть какие то наработки в общем доступе,от которых можно оттолкнуться?

drvlas
08.03.2011, 17:24
Совет Валенка попробую изложить своими словами,если что поправьте.
Ну, не поправлю, ибо верно, но просто вот вырежу, как у меня инициализуется:


wParIndx := 0;
(* # Type Group Mdf Node MinVal MaxVal Ptr*)
set( 100, W_T, NO_S, CNST, PLC, 0, 0, ADR(_100_PLC_VER));
set( 101, W_T, NO_S, RO, ILC, 0, 0, ADR(_101_ADC_VER));
set( 102, BY_T, NO_S, CNST, PLC, 0, 0, ADR(_102_Addr_IP));
...

Как видишь, здесь визуально хорошо видно, что присваиваешь.

Phaust
08.03.2011, 18:00
drvlas
У меня еще была надежда,что я неправильно понял :) Диковато выглядит, что поделаешь,специфика.
Кстати,есть проблема, КДС регулярно теряет связь с контроллером. После отсоединения не могу соединиться снова, пишет
The connection to the specified gateway could not be established. Это у меня персональная проблема,или нечто общеизвестное?

drvlas
08.03.2011, 18:09
Диковато выглядит
Смирись, отрок :)

Это на самом деле мелочи. Не суди по ним о КДС!


КДС регулярно теряет связь с контроллером...
Это у меня персональная проблема,или нечто общеизвестное?

Не скажу. У меня тоже были проблемы, ИМХО, от моего непонимания или кривых рук. Но как-то наладилось и теперь - очень редко связь слетает.
Оставлял в работе со включенной отладочной связью (онлайн) по несколько часов, хоть бы хны.

Так что есть смысл уделить этому внимание. Должно быть хорошо. Ты покури мануалы, потормоши знатоков. Но сразу скажу - приготовь описание того, что у тебя и как связано, т.к. именно в нУансах чаще всего дело.

Phaust
08.03.2011, 18:28
Оставлял в работе со включенной отладочной связью (онлайн) по несколько часов, хоть бы хны.
Так что есть смысл уделить этому внимание. Должно быть хорошо. Ты покури мануалы, потормоши знатоков. Но сразу скажу - приготовь описание того, что у тебя и как связано, т.к. именно в нУансах чаще всего дело.
1) Ну пару часов оно и у меня работает. Даже ночь работает. А вот после этого повторно подключиться нельзя. Перезагружаю рабочую станцию-все нормально. Жить можно,но раздражает :)
2) Нюансы: Windows7 x64,Codesys 2.3,ПЛК 150(И-L). Связь по Ethernet.

Николаев Андрей
09.03.2011, 10:45
А есть вариант с этим же контроллером на 32 разрядной попробовать (ну или хотя бы последнюю версию CoDeSys с сайта www.3s-software.com поставить)? Или внешней сетевой картой воспользоваться.
Чтобы приходилось ПК перезагружать ни разу не слышал...

Phaust
09.03.2011, 12:45
Codesys последний стоит,с сайта скачан 2 недели назад. Ноутбуков хватает,попробую поэкспериментировать.

Phaust
09.03.2011, 13:12
p.s. А что значит вот такое окно при открытии проекта?
http://clip2net.com/clip/m72069/1299665544-clip-11kb.png
Ничего не менял,с утра появятся стало

Николаев Андрей
09.03.2011, 19:29
Подозреваю это значит, что Вы пытались с Eni сервером поработать...
И видимо как то не срослось... Удалите Eni сервер вообще.

Phaust
10.03.2011, 00:22
Проверил сегодня с 32битной версией ОС,все нормально работает. Сие есть печаль,ибо от х64 никуда не деться.
p.s. Eni сервер удалил,не помогло:) Все равно логин/пароль спрашивает. Хотя я его и не трогал,вроде как,это сервер...

Игорь Петров
10.03.2011, 11:27
Последняя версия V2.3.9.26. Она?

В опциях снимите галки 'Сохранять удостоверения ENI' и 'Использовать контроль версий ENI', сохраните проект с новым именем.

Phaust
10.03.2011, 17:44
Последняя версия V2.3.9.26. Она?

В опциях снимите галки 'Сохранять удостоверения ENI' и 'Использовать контроль версий ENI', сохраните проект с новым именем.
2.3.9.25... Сейчас скачаю свежую,переустановлю,проверю. Спасибо.
upd. Вроде помогла установка свежей версии,спасибо еще раз.

Phaust
10.03.2011, 22:36
Дело,как оказалось,не в КДС,и даже не Windows,а в раздаче интернете по wi-fi :)

Phaust
11.03.2011, 13:57
Скажите, а разве вот такая вот строчка не должна инвертировать выход:
%QX1.0:=NOT %QX1.0;
?
С обычными переменными работает,а с выходами ПЛК - нет.
upd.А нет,все нормально,просто глючит...

swerder
11.03.2011, 14:38
Скажите, а разве вот такая вот строчка не должна инвертировать выход:
%QX1.0:=NOT %QX1.0;

пардон, а зачем вам каждый цикл ПЛК менять состояние выхода?

Phaust
11.03.2011, 17:09
пардон, а зачем вам каждый цикл ПЛК менять состояние выхода?
А зачем каждый цикл? :) Там условие есть,просто я их не писал.

swerder
11.03.2011, 17:32
вот та строчка, выделенная жирным, будет менять состояние выхода каждый цикл. потому и спросил зачем

Phaust
11.03.2011, 20:27
Это выполняется по фронту сигнала.

Phaust
13.03.2011, 12:43
Вопрос по OPC соединению.
Насколько я понял, то весь доступ к контроллеру(отладочная связь, ОРС и.т.д.) осуществляется через программку под названием gateway. Возможен ли параллельный отладочный доступ и работа ОРС? У меня сейчас, когда я пытаюсь запустить это параллельно - создается второй экземпляр процесса gateway который уже не имеет доступа к контроллеру. Это нормально ?

Николаев Андрей
13.03.2011, 13:01
Это нормально. Gateway - протокол обмена между ПЛК и CoDeSys. OPC от CoDeSys базируется на этом же протоколе.
Одновременная работа ПЛК с несколькими устройствами по Gateway не возможна, по этому и отваливается.

Phaust
13.03.2011, 13:11
Это нормально. Gateway - протокол обмена между ПЛК и CoDeSys. OPC от CoDeSys базируется на этом же протоколе.
Одновременная работа ПЛК с несколькими устройствами по Gateway не возможна, по этому и отваливается.
Ясно,спасибо!:) Признаюсь, что выяснение этого факта стоило мне довольно большого количества времени :D И в настройках DCOM наконец-то осмысленно разобрался, и с администрированием IIS и еще с кучей всего. А вот оно как все просто на самом деле.

aidsh2008
13.03.2011, 13:50
Вопрос новичка: КАК правильно организовать задержку в ПЛК110 между выключением одного реле и включением другого на ST. Если не трудно пример или ссылку.
(обычное программирование->out1:=false; delay(1sec); out2:=true;)

Phaust
13.03.2011, 13:56
Вопрос новичка: КАК правильно организовать задержку в ПЛК110 между выключением одного реле и включением другого на ST. Если не трудно пример или ссылку.
(обычное программирование->out1:=false; delay(1sec); out2:=true;)
Задержку реализуйте через проверку времени. Прошла секунда-присвоили значение выходу. Хотя на FBD это будет проще и нагляднее.

Николаев Андрей
13.03.2011, 23:30
Есть полезные штуки - таймера называются. TON и TOF

aidsh2008
14.03.2011, 20:59
спасибо за советы ... попробую реализовать через таймеры

aidsh2008
15.03.2011, 17:55
Можно еще вопрос: Как обнулять в программе (*Fast Counter*). Ну например если он в проекте описан примерно так: SQ14 AT %IW0.0(*Fast Counter*). Сам пытался писать так SQ14:=0; на что codesys v2 ругается коворит что переменная только для чтения. А мне счетчик (аппаратный) обнулять обязательно надо.

Николаев Андрей
16.03.2011, 00:46
Обнуляйте промежуточную переменную, в которую складываете значение с счетчика.

aidsh2008
16.03.2011, 09:39
Обнулять переменную это понятно, но мне необходимо именно счетчик сбрасывать. Неужели никак нельзя сделать?

aidsh2008
30.03.2011, 18:13
Можно еще вопрос: Уважаемые знатоки ПЛК110 , где можно посмотреть реализацию Slave-режима по CОМ-порту (для библиотеки SysLibCom) ?
P.s. Необходимое условие ПЛК110 кроме обмена должен заниматься еще и другой работой!

Николаев Андрей
30.03.2011, 18:26
Slave устройство правильнее всего делать в конфигурации ПЛК.

aidsh2008
01.04.2011, 17:50
Николаев Андрей спасибо за совет!

Можно Еще один вопрос:
Вся программа написана на ST для ПЛК110-32.M. Почему моя программа по-разному работает (возможно по-разному отрабатывает задержки таймеров ТОN), если я втыкаю и вытыкаю кабель отладки в COM-порт Debug RS232. Я знаю что в кабели есть перемычка. Но почему контроллер ведет себя по-разному из-за этой перемычки?

Если возможно обьясните по-подробнее или дайте ссылку...

Николаев Андрей
01.04.2011, 21:09
C удовольствием.
Могли бы Вы объяснить что значит "по разному" ну и саму программу посмотреть надо...

lara197a
01.04.2011, 21:55
Замечал, что
При подключении к КДС происходит увеличение времени цикла ПЛК,
в зависимости от веса программы, причем в модуле статистик этого не видно.

Николаев Андрей
02.04.2011, 13:19
1. Естественно, что цикл увеличится - обмен с CoDeSys - достаточно не простая ресурсоемкая задача из за протокола Gateway.
2. Статистика должна точно отображать загрузку.

aidsh2008
03.04.2011, 12:05
По-разному - это значит с воткнутым кабелем программа работает правильно (контроллер работает по программе верно). Если же я вытыкаю кабель программирования то начинаются сбои в работе контроллера (т.е. начинаются не своевременные отключения\включения плк110). При всем при этом другой конец кабеля программирования я никуда не втыкаю(он висит в воздухе т.е. как я понимаю обмена с Codesys не происходит!).

Р.S. Программу свою я прилагаю. (Сильно меня не пинайте это моя первая программа на ПЛК).

aidsh2008
08.04.2011, 10:56
Попробую задать совсем глупый попрос:
Возможно-ли в Сodesys v2 в режиме эмуляции отлаживать работу по СОМ-портам ПЛК110 (например СОМ1-RS232 настроенный в Modbus-slave режиме) ?

P.S. Контроллера нет в наличии(под рукой) есть только ПК+Сodesys v2 в режиме эмуляции, а программу роботы с СОМ-портом Modbus-slave режима хотелось бы отладить.