PDA

Просмотр полной версии : ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)



Страницы : 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Рамиль Ш
27.09.2012, 15:57
переменная x1 у вас как локальная, ее нужно перенести в VAR_INPUT. это можно сразу делать в окне объявление переменных. Также там можно указать физический адрес контроллера(это не всегда удобно). Также переменная y1 должна быть перенесена в VAR_OUT. Я обычно делаю так: удаляю переменную в таблице переменных, потом нахожу этот элемент стираю название и пишу заново, но уже выбираю каком разделе она должна быть(как на рисунке). Адреса входов и выходов смотрю в конфигураторе) Программу загрузил и изменил, попробуйте ее отправить прямо на ПЛК110-32 и проверить работу, задействован первый вход и первый выход. Потом отпишитесь:).

Сегодня загрузил программу в которой вы изменили адреса переменных и все заработало. При этом я удалил переменные в конфигураторе ПЛК в строке АТ. Теперь я понял как все делается. Попробовал даже светофор загрузить . Все работает отлично. Спасибо большое Flickeru за помощь! И вообще спасибо всем, кто откликнулся на мою просьбу!

Рамиль Ш
27.09.2012, 16:05
Простите великодушно, но не могу не вмешаться, так как проскальзывают не совсем верные утверждения.
Итак,
Рамиль, вы выложили пример некой пограммы, которая как-то работает, и что в ней правильно, а что нет, кроме вас никто не знает. Одно маленькое НО. В ней не указана целевая платформа, поэтому она годится только для работы в эмуляторе.

Кроме того, вы жаловались, что сделали простую программу с одним входом и одним выходом и она не работает. Вот ее и выкладывайте, будем начинать с простого.
Теперь о неверных или частично неверных утверждениях:
Flicker говорит о том, что привязки переменных к аппаратным входам и выходам нужно делать путем явного указания AT в разделе описания переменных. Можно делать так, а можно и по другому. Но в любом случае нужно выбрать целевую платформу и тогда в окне конфигурации ПЛК появится выбранный вами контроллер с его набором входов и выходов с конкретными обозначениями, которые вы можете прописывать после AT%.

Второй способ привязки переменных к физическим входам и выходам состоит в их внесении в конфигурацию. Об этом достаточно подробно рассказано в книге, которая начинает рождаться на сайте кодесис.рф усилиями Кирилла Гайнутдинова, за что ему огромное спасибо скажут многие, кто эту книгу прчитает. Так вот, если в конфирурации выделить один из входов или выходов, и щелкнуть по нему левой клавишей мышки, откроется квадратик для внесения имени переменной, которая будет связана с этим входом или выходом. НО (большое и жирное НО, потому что на эти грабли наступают почти все) эта переменная не должна дублироваться вами в программе. То есть вручную ее не нужно объявлять ни в разделе локальных переменных, ни в разделе глобальных.
Она сама попадет куда надо и будет иметь характер глобальной.
И теперь, если вы хотите ее использовать в программе, просто указывайте ее имя, и все будет работать. А чтобы не делать синтаксческих ошибок, удобно пользоваться ассистентом ввода. Выделяете в программе имя элемента, нажимаете А2 и получаете список всех доступных имен. Там в разделе глобальных переменных уже будет то имя, которое вы присвоили в входу в конфигурации. БОЛЬШЕЕГО НИГДЕ ОБЪЯВЛЯТЬ НЕ НУЖНО, В ПРОТИВНОМ СЛУЧАЕ, ИМЯ, ОБЪЯВЛЕННОЕ В ДРУГОМ МЕСТЕ, ПЕРЕОПРЕДЕЛИТ ЕГО, И СВЯЗЬ С ВХОДОМ ПОТЕРЯЕТСЯ.

Второе неверное утверждение Flickeraкасается Var_Input b Var_Output.
Эты типы переменных предназначены не для привязки к входам и выходам контроллера, а для создания функциональных блоков. Когда вы пишете не основную программу, а свой собственный функциональный блок, то там они реально нужны. Еу пкркменные, которые будут входами вашего функционального блока, нужно объявлять как var_Input, те, которые будут выходами - как Var_Output. Переменные для внутрениих нужд - как обычные var. А для связи с физическими выходами и входами этого вовсе не требуется. Для этого требуется ИЛИ прописать их в конфигурации ИЛИ прописать их в разделе описания переменных (в том числе при помощи окна автоопределения).

Ну и напоследок еще раз для Рамиля - выкладывайте маленькую программку, с ней разберемся, пойдете дальше, всё будет щелкать релюшками в соответствии с программой.



Наверное есть несколько путей решения одной и той же задачи? Будем потихоньку изучать.

YuriBel
27.09.2012, 17:50
Совершенно верно, есть несколько путей, о чем я и говорил. Но для того, чтобы потом не делать ненужных вещей, постарайтесь с самого начала разобраться, почему имеено раньше не работало, а теперь заработало.

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

Рамиль Ш
27.09.2012, 19:08
Совершенно верно, есть несколько путей, о чем я и говорил. Но для того, чтобы потом не делать ненужных вещей, постарайтесь с самого начала разобраться, почему имеено раньше не работало, а теперь заработало.

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


До меня позже дошло, что начал пользоваться программой без таргет файлов. Позже я их установил. Нельзя ли без составления программы на целевой платформе( в моем случае ПЛК 110-32 р-L ) просто импортировать их с того места , где я их составил?

Flicker
27.09.2012, 19:57
YuriBel спасибо и вам, сколько не пытался назначить входы/выходы в конфигураторе - все не получалось. После ваших разъяснений получилось.
У меня есть несколько вопросов:
1) Как загрузить программу из ПЛК100 в компьютер?
2) Записать файл в ПЛК - записывается проект программы? И можно записать любой файл, хоть фотографию?
3) Для чего визуализация в кодесисе? Как я понимаю, чисто для своего восприятия и проверки работы программы?

s3rjke
28.09.2012, 06:48
Кажется есть такая функция SysMemSet из библиотеки SysLibMem
Инициализирует блок памяти указанным значением. Как аргументы принимает адрес блока памяти, его размер, и значение для инициализации, например 0.

Спасибо, даже нашел ветку на форуме, где аналогичная задача обсуждалась и тоже рекомендовался этот вариант. Буду пробовать.



Да, значения будут не похожи, потому что надо менять местами байты в инт-ах, очистить же массив можно методом Валенка, в окне объявлений создать константный массив заполненный нулями и когда нужно присвоить его массиву который требуется очистить

Спасибо, буду пробовать. :-)

YuriBel
28.09.2012, 10:55
Позже я их установил. Нельзя ли без составления программы на целевой платформе( в моем случае ПЛК 110-32 р-L ) просто импортировать их с того места , где я их составил?
Не совсем понял, что вы собираетесь импортироварть, но применительно к вашей программе, учитывая, что никакой целевой платформы не задано, можно установить нужную платформу, и в конфигурации контроллера появятся входы и выходы. и их через поименование в конфигурации или в блоке описания переменных можно привязать. на самом деле ситуация бывает неприятной, когда вам на ходу нужно сменить целевую платформу, в этом случае конфигурация потеряется, и новую конфигурацию нужно будет вручную прописать (привязки входов-выходов, дополнительные элементы, связанные с обменом и т.д.



1) Как загрузить программу из ПЛК100 в компьютер?
2) Записать файл в ПЛК - записывается проект программы? И можно записать любой файл, хоть фотографию?
3) Для чего визуализация в кодесисе? Как я понимаю, чисто для своего восприятия и проверки работы программы?
1) программа в ПЛК хранится в откомпилированном виде поэтому загрузить ее из ПЛК в Кодесис не получится. Но на этапе записи прогораммы в ПЛК можно также загрузить в него файл с исходником программы, а потом его оттуда прочитать и с ним работать. сам откомпилированный файл вроде тоже можно выгрузить, но ценность его сомнительна. Он годится только для загрузки в точно такой же ПЛК с прошивкой, котороая совместима с тем Target-ом, который использовался при компиляции.
2) Запись файла в ПЛК - именно запись произвольного файла. запись программы производится командами "Создать загрузочный проект" - записывается скомпилированная программа, которая при старте ПЛК будет грузиться в память и запускаться на исполнение, и "Загрузка исходных текстов" - грузятся исходники, которые можно будет прочитать, если вы приехали на объект, а их у вас с собой нет.
3) Визуализация. во первых удобно ее использовать при написании и при отладке. Когда еще нет панели или СКАДА системы, кроме того, можно также просто пользоваться ей на компьютере, где установлен КОДЕСИС, можно купить у 3S отдельную лицензию на HMI и использовать визуализацию без запуска КОДЕСИС. Так что вещь в принципе полезная.

Andrei Z
28.09.2012, 11:07
а скажите возможно использовать визуализацию в Кодесис, как быдто при диспечерезации удалённо?

Flicker
28.09.2012, 11:13
"Загрузка исходных текстов" - грузятся исходники, которые можно будет прочитать, если вы приехали на объект, а их у вас с собой нет.
Поясните пожалуйста подробнее выбираю "Загрузка исходных текстов" и что происходит, идет какая то загрузка, а где это можно посмотреть что произошло?

YuriBel
28.09.2012, 13:40
Поясните пожалуйста подробнее выбираю "Загрузка исходных текстов" и что происходит, идет какая то загрузка, а где это можно посмотреть что произошло?

Зайдите в ПЛК-броузер и командой filedir посмотрите, какие файлы лежат у вас в контроллере. контроллер при этом должен быть на связи с Кодесисом. Программу лучше остановить.

YuriBel
28.09.2012, 13:43
а скажите возможно использовать визуализацию в Кодесис, как быдто при диспечерезации удалённо?

У вас контроллер должен быть на связи с КОДЕСИС. Если сумеете это организовать удаленно, то возможно, да. Ну и что вы понимаете под словом удоленно - сколько метров (километров)?

kip88
28.09.2012, 14:25
Всем здравствуйте.У меня есть опыт программирования ПР на языке FBD в среде Owen Logik,а также владею LD(но отдаю преимущество FBD).Сейчас появилась необходимость работать на ПЛК,а стало быть,изучить CoDeSys.Программа на Owen Logik написана,но у меня возникла трудность в нахождении аналогичных блоков в Кодесис.Подскажите,пожалуйста,каким образом представить различные блоки в данной среде на языке FBD.Не могу понять,как реализовать BLINK(генератор импульсов),а также систему привязок линий связи(я имею в виду,чтобы выход из одного блока шел на вход другого).Если кто-то может помочь,буду очень благодарен,схему в Owen Logik на FBD могу при необходимости предоставить.

YuriBel
28.09.2012, 14:52
Blink находится в библиотеке util.lib, которую нужно подключить через менеджер библиотек, он там в разделе signals.

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

Andrei Z
28.09.2012, 18:09
У вас контроллер должен быть на связи с КОДЕСИС. Если сумеете это организовать удаленно, то возможно, да. Ну и что вы понимаете под словом удоленно - сколько метров (километров)?
я имел ввиду 2 км, и связь через модем. Только вот думаю как лучше жпрс, или сдс... потому как через интернет хорошо что мог бы и дома и на работе выйдя в инет скачать архив или посмотреть параметры.. а то и на сотовом... Только смущает плохая скорость жпрс .. для водозабора не надо именно визулиазиция как таковая.. просто изредка зайти посмотреть и скачать архив параметров.. напрмер объём воды поднятой и потребление кВт

kip88
01.10.2012, 09:56
Спасибо за совет про CFS,я попробовал,понравилось.Скажите,пожалуйста,в чем все же различие у них с FBD? И еще вопрос про менеджер библиотек:у меня в списке нет библиотеки UTIL,как мне быть?

YuriBel
01.10.2012, 09:59
Думается мне, что для подобной задачи встроенная визуализация из Кодесис - не самое подходящее решение. Особенно когда речь заходит про "скачать архив". Когда подойдете поближе к реализации задумки и станет ясно, что именно хочется, и сколько на это есть денег, тогда можно пообсуждать поконкретнее.

Трофимов Артем
01.10.2012, 10:02
Спасибо за совет про CFS,я попробовал,понравилось.Скажите,пожалуйста,в чем все же различие у них с FBD? И еще вопрос про менеджер библиотек:у меня в списке нет библиотеки UTIL,как мне быть?

в языке СFS легче реализуются обратные связи блоков.
Библиатеку Util.lib вы можете добавить с диска ПЛК-Навигатор либо скачать их тут (http://www.owen.ru/catalog/67395347)

kip88
01.10.2012, 10:07
Все в порядке,разобрался,большой спасибо за помощь)

YuriBel
01.10.2012, 10:34
Спасибо за совет про CFS,я попробовал,понравилось.Скажите,пожалуйста,в чем все же различие у них с FBD? И еще вопрос про менеджер библиотек:у меня в списке нет библиотеки UTIL,как мне быть?
Ее надо установить, она не установлена по умолчанию. Вот для этого и нужен менеджер библиотек. Лежит эта библиотека в папочке library, называется Util.lib. Папочка Library лежит в codesysV2.3, который лежит в 3S software, который лежит в program files, который лежит сами знаете где.
А для того, чтобы ее установить, нужно в менеджере библиотек в окошке, где перечислены библиотеки, клацнуть правой клавишей мышки.

kip88
01.10.2012, 16:42
Снова возникла проблема,но на этот раз в режиме эмуляции.Программу написал,прокомпилировал,ошибок и предупреждений нет.Далее жму Онлайн-Подключение-Старт.Начинаю изменять входные переменные с False на True,но ничего на выходе не происходит.В чем моя ошибка? Мне говорили некоторые,что без подключения контроллера не получится проверить,правда ли это,т.к. эмуляция для того и создана,чтобы не подключать входные/выходные приборы?

kip88
01.10.2012, 17:18
Пробовали присваивать выходам входа в программе?
Я присваивал выходам значения VAR_OUTPUT,а входам VAR_INPUT,остальным блокам VAR,если Вы об этом.А больше ничего не присваивал.:confused:

YuriBel
01.10.2012, 18:25
Я присваивал выходам значения VAR_OUTPUT,а входам VAR_INPUT,остальным блокам VAR,если Вы об этом.А больше ничего не присваивал.:confused:
Вы бы выложили сюда вашу программку, нам бы легче было советовать...

kip88
02.10.2012, 09:57
Вы бы выложили сюда вашу программку, нам бы легче было советовать...

Без проблем...

YuriBel
02.10.2012, 11:17
Откройте страницу 119 этой же ветки, и начинайте читать ВНИМАТЕЛЬНО, я там разжевал максимально тщательно, как привязывать переменные к входам-выходам, и нужны вам или нет Var-input и var-output.
Не ззабудте отрапортовать об успехах:)

kip88
02.10.2012, 11:42
Откройте страницу 119 этой же ветки, и начинайте читать ВНИМАТЕЛЬНО, я там разжевал максимально тщательно, как привязывать переменные к входам-выходам, и нужны вам или нет Var-input и var-output.
Не ззабудте отрапортовать об успехах:)

Да,спасибо,прочел.Я так понял,что с моими INPUT и OUTPUT косяк вышел:D . Вы писали,что должна быть целевая платформа со всеми входами и выходами моего контроллера.Я так понимаю,что у меня такого нет,но я в самом начале программы выбирал тип контроллера. И еще "Так вот, если в конфирурации выделить один из входов или выходов, и щелкнуть по нему левой клавишей мышки, откроется квадратик для внесения имени переменной, которая будет связана с этим входом или выходом"... что имеется в виду под словом "конфигурация"?

YuriBel
02.10.2012, 12:40
Целевая платформа (т.е. тип ПЛК) у вас выбрана.
Теперь, если на закладке ресурсов выбрать ресурс "конфигурация ПЛК", то откроется окно редактирования конфигурации. там будет дерево ресурсов контроллера (входы, выходы, туда же можно добавлять элементы для связи) Выбираете нужный вход или выход, далее все по приведенной цитате.

kip88
02.10.2012, 13:23
Целевая платформа (т.е. тип ПЛК) у вас выбрана.
Теперь, если на закладке ресурсов выбрать ресурс "конфигурация ПЛК", то откроется окно редактирования конфигурации. там будет дерево ресурсов контроллера (входы, выходы, туда же можно добавлять элементы для связи) Выбираете нужный вход или выход, далее все по приведенной цитате.

Я понял,нашел.В моем ПЛК 36 входов и 24 выходов.Но в конфигурации они почему-то разбиты на Fast discrete input(SLOT) и Discrete input(FIX),также есть Special input (та же ситуация с output),в чем их различие и каким образом узнать их нумерацию?Я имею в виду,как понять,какие входы в конфигурации соответствует,например,I1,I2,I3....на контроллере. Уточните,пожалуйста,про "туда же можно добавлять элементы для связи"...добавлять таймеры,триггеры,логические блоки?

YuriBel
02.10.2012, 14:17
Соответствуют по порядку сверху вниз. Быстрые входы и выходы умеют быть быстрыми, но тогда, когда это нужно. Для вас они сейчас ничем не отличаются от обычных. Специальный вход -это кнопочка на контроллере, спецальный выход-это пищалка. А вообще про все это написано в документации, которую совсем не лишне читать и перечитывать. Есть подробное описание на кодесис, есть РЭ на контроллер и инструкции по программированию и конфигурированию.

kip88
02.10.2012, 14:20
А вообще про все это написано в документации, которую совсем не лишне читать и перечитывать. Есть подробное описание на кодесис, есть РЭ на контроллер и инструкции по программированию и конфигурированию.

Спасибо большое за разъяснение,дело в том,что мануалок валом,пролистывая CoDeSys,натыкался на множество информации,которая мне не пригодилась,вот и решил спросить прямым текстом:)

kip88
02.10.2012, 15:11
Уж простите но у меня вопрос по какому критерию Вы приобретали плк если не знаете его ттх

Прощаю...дело в том,что до этого я не сталкивался с контроллерами,а работал с ПР110.Сейчас возникла необходимость решать задачи,с которой ПР не спраляется по своим ттх.Для меня основным вопросом было наличие требуемого количества входов и выходов и величины напряжения питания,с это задачей справился данных ПЛК.На Owen Logic (на ней программируется ПР110) эмуляция и запись программы в прибор происходила без проблем.В кодесис я никогда не работал,что и привело меня на данную ветку ("ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)"...я напоминаю на всякий случай). Поверьте,в тот момент,когда я задаю вопрос,параллельно листаю .pdf по CoDeSys и данному ПЛК,если кто-то знает ответ на вопрос заранее,то я благодарен за ответ.

kip88
02.10.2012, 16:18
спасибо за ссылку.Я минут 10 назад получил книгу с www.кодесис.рф.,изучаю:)

kip88
02.10.2012, 17:29
СВЕРШИЛОСЬ! Эмпирическим способом я нашел косяк в своей программе,а точнее в ее эмуляции.Я пытался менять логические значения входных переменный,а нужно было кликать их в конфигурации ПЛК.

GregorySoft
03.10.2012, 23:18
Приветствую.
имеется два ПЛК150-220.У-L для контроля ПДК газа (4-20мА).
Пытаюсь читать аналоговые входа (датчики подключены) - у меня значения одинаковы по всем четырём входам и ведут себя как счётчики - нарастают до предела и опять с нуля повышается.
PROGRAM PLC_PRG
VAR
vi1 : WORD;
vi2 : WORD;
vi3 : WORD;
vi4 : WORD;
END_VAR
__________________
vi1 :=%IW3.1;
vi2 := %IW4.1;
vi3 := %IW5.1;
vi4 := %IW6.1;
понимаю что такого не может быть.
что я упустил из виду и как всё наладить (что сконфигурировать, быть может настроить и т.д.)?

http://s002.radikal.ru/i197/1210/41/005f6c545078t.jpg (http://radikal.ru/F/s002.radikal.ru/i197/1210/41/005f6c545078.jpg.html)

P.S. только сейчас понял что это я читаю какой-то "Circular time" (что это?) и как мне привести значение %ID3.0 в какой-то нормальный вид (что на что разделить, там какое-то большое значение)? :confused:

вроде бы разобрался... FUNCTION_BLOCK DECODE_FLOAT (в библиотеке PID_Regulators.lib). на выходных буду пробовать! (и ещё вопрос - в каком соотношении я должен получить сигнал? например значение 10.02 это 10.02 мА?)

ssl
04.10.2012, 02:12
Приветствую.
имеется два ПЛК150-220.У-L для контроля ПДК газа (4-20мА).
Пытаюсь читать аналоговые входа (датчики подключены) - у меня значения одинаковы по всем четырём входам и ведут себя как счётчики - нарастают до предела и опять с нуля повышается.
PROGRAM PLC_PRG
VAR
vi1 : WORD;
vi2 : WORD;
vi3 : WORD;
vi4 : WORD;
END_VAR
__________________
vi1 :=%IW3.1;
vi2 := %IW4.1;
vi3 := %IW5.1;
vi4 := %IW6.1;
понимаю что такого не может быть.
что я упустил из виду и как всё наладить (что сконфигурировать, быть может настроить и т.д.)?

http://s002.radikal.ru/i197/1210/41/005f6c545078t.jpg (http://radikal.ru/F/s002.radikal.ru/i197/1210/41/005f6c545078.jpg.html)

P.S. только сейчас понял что это я читаю какой-то "Circular time" (что это?) и как мне привести значение %ID3.0 в какой-то нормальный вид (что на что разделить, там какое-то большое значение)? :confused:

вроде бы разобрался... FUNCTION_BLOCK DECODE_FLOAT (в библиотеке PID_Regulators.lib). на выходных буду пробовать! (и ещё вопрос - в каком соотношении я должен получить сигнал? например значение 10.02 это 10.02 мА?)

Значение %ID3.0, представлено типом REAL, значит никаких манипуляций с ним проводить не стоит, а в конфигурации канала проверьте тот ли тип датчик Вы указали

service
05.10.2012, 17:09
подскажите как поставить метку в LD чтобы,например,при срабатывании определенного входа программа переходила на выполнение метки?

Irina77777
07.10.2012, 15:40
Доброго дня всем!
Приобрела терморегулятор ТРМ1, но, к сожалению, не могу его настроить. Кто знает подскажите.
спасибо.

Irina77777
07.10.2012, 22:17
мне нужна рабочая температура в печи 500 град и выдержка на 30 мин
как можно такое запрограммировать?
заранее спасибо)

MadJOk
08.10.2012, 19:41
Здравствуйте!
Подскажите пожалуйста, всю голову сломал.
Нужно записать в текстовый файл данные с контроллера (пока не важно какие). пользуюсь библиотекой SysLibFile.
вот пример кода:
f1:=SysFileOpen('c:\Test.txt', 'a');
Но он почему-то отказывается открывать данный файл и записывать в него что либо.
Запись осуществляю с помощью:
SysFileWrite(f1,ADR(x),LEN(x));
В "онлайн" показывает, что f1=0...
Помогите пожалуйста!!!!
Заранее благодарен.

MadJOk
08.10.2012, 20:25
у плк нет файловой системы, как Вы можете наблюдать в ОС Windows, поэтому с:\ несколько лишнее
Ок. а как тогда прописать куда сохранять надо файл?
Пошарясь с помощью браузера, нашел мои записи теста в текстовом формате.
Так вот, как мне можно сделать, чтобы файл можно было допустим через ftp глянуть?
В общем идея такая. надо сохранять данные в файл excel. Но пошарив и поняв что DDE меня не устраивает, нету такой возможности. Решил сделать сначала в текстовик, а потом уже с помощью макросов в Excel'у всё это дело собрать....

capzap
08.10.2012, 20:43
http://oscat.de/downloadmanager/finish/4-oscatnetwork/84-oscat-network-codesys-2x.html можно тут посмотреть как фтп организовать, только мне кажется через пару часов откажетесь от этой идеи :)

MadJOk
08.10.2012, 20:55
большое спасибо за помощь

Yegor
09.10.2012, 08:22
Поищите программу plc_io на этом сайте и, в частности, на форуме. Она консольная и ею можно пользоваться для выкачивания файлов с контроллера.

ssl
09.10.2012, 11:06
http://oscat.de/downloadmanager/finish/4-oscatnetwork/84-oscat-network-codesys-2x.html можно тут посмотреть как фтп организовать, только мне кажется через пару часов откажетесь от этой идеи :)

Где можно почитать, об организации фтп в Codesys?

ssl
10.10.2012, 08:42
Подскажите поддерживает ли ПЛК-160 встроенную Web-визуализацию Codesys? В настройках целевой платформы окошко напротив надписи Web-визуализация не активно.

Amko
10.10.2012, 19:27
Вопрос. Как лучше организовать хранение связных переменных? Я хочу использовать промежуточные переменные между модулями входов/выходов и логикой программы. Т.е. мне нужно данные из модулей входов перенести КУДА-ТО, чтобы потом спокойно использовать в своей программе. При этом, очень бы хотелось, чтобы данные хранились в одном месте (как структура - доступ через точку). Однако при использовании структур вроде как нельзя называть отдельные биты как вздумается, что затрудняет в последующем использование. Можно, конечно, придумать много отдельных битовых переменных, но такое решение несколько некрасиво. Подскажите, или даже ткните носом, что ли :) Первый крупный проект, теряюсь пока что...

Amko
10.10.2012, 20:00
Т.е. вы намекаете на использование структур?

Yegor
11.10.2012, 06:23
Т.е. вы намекаете на использование структур?Он намекает на доступ к отдельным битам в словах по номеру через точку.
VAR
dw: DWORD;
END_VAR

dw.0 := TRUE;
dw.17 := TRUE;Однако это не имена — это индексы. И чтобы узнать, как именовать биты, обратитесь к руководству по кодесису (Указатель > bitaccess).

Amko
11.10.2012, 17:55
Обратился. Там написано, что можно обратиться к биту через фиксированный номер (dw.0) или через переменную (dw.numb). Про назначение названия каждому биту по-отдельности не нашел... Придется делать через создание нового типа данных.

a_sergeevich
12.10.2012, 16:37
Подскажите, пожалуйста по такому вот вопросу. Как можно запустить в программе таймер ? Т.е, например, в программе объявлен таймер Tmr1: TOF, и мне его надо запустить если выполняется какое-то условие. Я знаю как его запустить, допустим, сигналом со входа, например кнопкой, а вот как сделать то же самое просто внутри программы не пойму.
Буду очень благодарен за подсказку.

a_sergeevich
12.10.2012, 16:42
И ещё вопрос. Если я запущу в программе цикл FOR, например, от 1 до 10000, он тормознёт цикл ПЛК в этом месте и пока не выполнится, цикл ПЛК соответственно дальше не пойдёт и ПЛК перезагрузится, или счётчик в цикле FOR будет увеличиваться с каждым проходом цикла ПЛК и соответственно перезагрузки не будет ?

Amko
12.10.2012, 18:46
Вместо сигнала со входа Вы можете подставить любой другой битовый сигнал (переменную). ПЛК не перезагружается в любом случае. Циклы работы - не перезагрузка.
Где то читал, что большие циклы в теле программы для ПЛК - моветон. Типо зачем придумывать дополнительные циклы, если работа ПЛК сама по себе представляет собой бесконечный цикл.

Александр Ушаков
13.10.2012, 08:04
Здравствуйте. Есть вопросы по работе с быстрыми входами плк110- 60М:
Самое главное, почему контроллер начинает работать из прерываний таймера только при тайминге 60мкс.
Написал небольшой код счёта энкодера из прерываний таймера,основная программа взята из примера покритекуйте
in:=SysPortIn(0);
IF in.0<>Old_in THEN
IF in.0 THEN
IF in.1 THEN
Schet:=Schet+1;
ELSE
Schet:=Schet-1;
END_IF
END_IF
END_IF
OLD_in:=in.0;
спасибо

a_sergeevich
13.10.2012, 16:38
Почему у меня не запускается таймер такой командой:
tmr1:TOF объявили таймер
Flag:BOOL;
дальше в программе:

tmr1 ( IN:=Flag, PT:=T#20s );

тут условие, если оно истина тогда

Flag:=TRUE;
Flag:=False;

Почему делаю так, просто я таким образом имитирую нажатие кнопки, но у меня таймер не запускается, эта часть просто как бы пролетает и дальше, соответственно я получаю не ту реакцию программы какую надо.
Чтобы было понятнее, что мне надо, скажу, я делаю управление насосами с функцией АВР, всё работает, кроме этого таймера. Я поэтому и спрашиваю про цикл FOR, может его вставить между Flag:=TRUE цикл от 1 до 1000; Flag:=FALSE ? Прошу мне этот момент разъяснить подробнее, просто я ещё никак до конца не могу переключиться с программирования МК на ПЛК :)

capzap
13.10.2012, 16:55
как только Вы присвоите флагу фальш, на следущем цикле таймер перестанет работать, только когда tmr1.Q станет равным истине, можно входной переменной присвоить фальш

Andrei Z
13.10.2012, 22:19
Направьте пожалуйста, как соединить ВКТ-5 и например СПК207. В будущем хотелось бы использовать 8 дискретных входов и 16 аналоговых входов теплосчётчика в качестве источника параметров. Набираю поиск ВКТ на форуме говорит что нет.. Гдето на сайте ОВЕН я видел месяца три назад что там разъяснения дают по нестандартным протоколам .. не могу найти(((((
На данный момент на подающей трубе висит три термометра сопротивления, каждый для своих нужд, а ведь надо то всего один, и в дальнейшем просто использовать эту инфу например с ВКТ 5

Николаев Андрей
15.10.2012, 11:28
ВКТ5 и ВКТ7 имеют нестандартный протокол, и поэтому данное подключение при отсутствии опыта может вызвать затруднения.
Мы делали подключение ВКТ7.
Пример можем выслать - пишите в почту.

Как подсказали коллеги - у ВКТ5 "сильно ModBus подобный протокол".
С ним можно попробовать работать с помощью нашей библиотеки ModBus.lib

Александр Ушаков
16.10.2012, 06:15
Здравствуйте.
Ища ответа на свой вопрос натолкнулся вот на такой пост:
(Здравствуйте!
Для периодов срабатывания высокочастотного таймера чаще, чем раз в 60 мкс (т.е. получается раз в 40 мкс и раз в 20 мкс) необходимо использовать прошивку версии 2.10.9. Для версии прошивки 2.14 период срабатывания должен быть не менее 60мкс. Но для поной работоспособности этого функционала все-таки советуем откатиться до прошивки 2.10.9, т.к. на прошивке 2.14 может происходить сброс остальных (не быстрых) выходов, если они задействованы в программе, при срабатывании высокочастотного таймера.
На данный момент ведутся работы по созданию новой версии проошивки, где должен быть поправлен и этот момент в том числе, в ближайшую неделю - две, будет произведено ее тестирование.
P.S. На текущий момент советутем откатываться до прошивки версии 2.10.9 для работы с высокочастотным таймером.)
перепрошил и все заработало, как-то у ОВЕН все сложно похоже на испорченный краковяк (почему-то все шаги назад) и ни гу-гу на вопрос.
Спасибо за участие.

Александр Ушаков
16.10.2012, 12:10
Здравствуйте
Заработало да не совсем, прорамма работает стаймингом 20мкс есть счет и в +и в - но только есле вращать энкодер медленно в протвном случае пропускает безбожно. Я считал как 2000 им на оборот и 500об в мин получается что то около 16000 им в с (60мкс примерно) вродибы все должно работать ан нет.
Где я делаю ошибку? Неоставляйте без ответа Спасибо.

p-nik
16.10.2012, 13:17
Здравствуйте! Опишите пожалуйста расчет адреса в HEX для OPC LECTUS, желательно с примерами.
(примерное описывается в посте №982)
ПЛК -100RM
Можно ли сделать эту адресацию для переменных привязанных к FB?

Спасибо!

websint
16.10.2012, 16:34
Здравствуйте. Контроллер ПЛК63. После загрузки программы в контроллер, с дисплея вносились изменения. Сейчас при подключении к контроллеру пишет - программа была изменена, закачать? Говорю - нет, вижу онлайн программу. Как сохранить на диск копию для редактирования?

Николаев Андрей
17.10.2012, 09:06
Это сообщение говорит о том, что в момент установления связи в CoDeSys на ПК открыт проект отличный от того, что был ранее залит в контроллер.
Изменение с дисплея не влияют на изменение проекта.

Aleksandr_Sorokin
17.10.2012, 19:20
Вопрос:
Что значит ошибка компилятора 4060 "Параметр 'VAR_IN_OUT' '<название параметра> в '<название программы> требует переменной с доступом по записи"? Подозреваю, что что-то очень легко решаемое, но понять не могу. Что это вообще такое "переменная с доступом по записи"?

в мануале только скудное: "Для параметра VAR_IN_OUT должен иметь доступ на запись, поскольку его значение может быть изменено в POU." чего мне для понимания недостаточно. Поиск по форуму тоже ничего не дал.
Спасибо.

capzap
17.10.2012, 19:28
у нас для записи не доступны физические входы плк и константы

Aleksandr_Sorokin
17.10.2012, 22:26
То есть описывать входы/выходы ПЛК как VAR_IN_OUT нельзя, так? А что же тогда за переменные описываются как VAR_IN_OUT?

ssl
18.10.2012, 02:56
То есть описывать входы/выходы ПЛК как VAR_IN_OUT нельзя, так? А что же тогда за переменные описываются как VAR_IN_OUT?

VAR_IN_OUT - это внутренние переменные функциональных блоков, у функциональных блоков есть входные переменные, есть выходные переменные, а есть внутренние переменные которые привязывают выходные переменные к входным.

S.A.D.
18.10.2012, 12:50
доброго времени суток. подскажите пожалуйста как разложить строку на символы-элементы массива array of string в ST базовыми средствами? Необходимо в дальнейшем собрать из этих элементов другую string переменную

Yegor
18.10.2012, 13:37
Наверное, array of byte, а не array of string? Не надо ничего раскладывать. Всё давно разложено за вас:
PROGRAM PLC_PRG
VAR
str: STRING(6) := 'Hello';
arr: POINTER TO ARRAY [0..6] OF BYTE;
END_VAR

arr := ADR(str);

http://images.devs-on.net/Image/oKOp4ibo1zWwGGtf-CoDeSysUntitled.png

Если же речь о выделении подстрок, то SysMemCpy — ваш товарищ.

S.A.D.
18.10.2012, 15:18
Yegor, capzap,
спасибо!

Александр Ушаков
02.11.2012, 06:24
Здравствуйте. При компиляции проекта с POU обрабатываемыми по системным событиям появляется предупреждение:
2501: A callback function is not allowed to contain local variables.
Что делаю неправильно?
Спасибо.

capzap
02.11.2012, 07:55
Здравствуйте. При компиляции проекта с POU обрабатываемыми по системным событиям появляется предупреждение:
2501: A callback function is not allowed to contain local variables.
Что делаю неправильно?
Спасибо.

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

Yegor
02.11.2012, 11:40
2501: A callback function is not allowed to contain local variables.
Что делаю неправильно?
On PPC, functions used as Callback have got no stack. So they must not contain local variables.
A warning message shall be displayed at compile if a function with name prefix "Callback" has local variables.

the problem is not special for PPC. So, if a POU, registered as callback via taskconfiguration, contains local variables, a warning is produced.
To handle the situation when a callback is used with SysCallbackRegister, we produce also a warning for all functions with local variables starting with "callback" on PowerPC-systems. So sometimes the warning may be produced twice.[А это текст от меня, т.к. движок форума считает, что я должен написать минимум 10 символов]

Inna
02.11.2012, 16:22
Здравствуйте! У меня такая проблема: требуется ввести переменную, в которую бы записывался телефонный номер, причем значение этой переменной нужно менять без компиляции. Пыталась сделать это через EasyWorkPLC. Но максимальная длина переменной в конфигураторе — 32бита, 11-ти значный номер не помещается. Буду признательна за любую помощь))

capzap
02.11.2012, 16:30
телефон помещается в строку, строка может быть и массивом байт, массив можно заполнить как разом так и по элементно

Inna
02.11.2012, 16:52
Из easywork я могу обращаться только к константам, записанным в конфигурации плк, а там указан максимальный размер... Я чего—то не понимаю.

capzap
02.11.2012, 16:59
к примеру если сейчас речь о модбас, то создайте шесть регистров этого хватит на строку из 12 символов. Я бы показал пример какой нибудь но у меня под рукой только телефон

capzap
02.11.2012, 17:03
чего это я :) есть вариант совсем простой. Разделите номер на сам номер и код оператора или города а в плк их преобразуете в строки и склеите

Inna
02.11.2012, 18:04
Спасибо за помощь!
Разделить номер телефона на 2 части - я так и реализовала сейчас, только у меня 6 номеров и, возможно, разных операторов :) Прочитала незнакомое слово - модбас. Буду разбираться.
P.S. Если кажусь совсем тупой - строго не судите. Первый раз увидела контроллер 3 недели назад :) А регистры - вообще тёмный лес...

Yegor
02.11.2012, 22:59
Как разберётесь с модбас-регистрами, могу накидать программу для передачи на них телефонного номера с компа.

Александр Ушаков
03.11.2012, 06:30
Можно поступить по разному, самому перевести или отыскать в русскоязычной справке значение ошибки. В справке так же можно найти из чего должна состоять функция по событию.
А чтоб другим не ломать голову, что же у Вас там не так, исходный код выложите, чтоб более предметом разговаривать

Здравствуйте,Всем, доброго времени суток.
Говорила мне мамка в молодости, учи немецкий в жизни пригодится, а я вот не послушал.
В русскоязычной справке список предупреждений заканчивается на 2500.
Спрашиваю потому, что сам разобраться не смог.
К сожалению мне доступны вложения только в виде изображений.
Спасибо.

capzap
03.11.2012, 07:19
Здравствуйте,Всем, доброго времени суток.
Говорила мне мамка в молодости, учи немецкий в жизни пригодится, а я вот не послушал.
В русскоязычной справке список предупреждений заканчивается на 2500.
Спрашиваю потому, что сам разобраться не смог.
К сожалению мне доступны вложения только в виде изображений.
Спасибо.

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

Yegor
03.11.2012, 07:27
Я ж вам написал, что это значит. Ладно, переведу самую суть:
На PPC функции обратного вызова работают без стека, и поэтому у них не должно быть локальных переменных. Обнаружив переменные в таких функциях, компилятор выдаст предупреждение. Проблема касается не только PPC.Видите у себя локальные переменные в Start_schet? Вот оно и есть. Однако на овеновских ПЛК это вроде как допустимо и работает. Поэтому можно смело игнорировать предупреждение.

Александр Ушаков
03.11.2012, 12:25
Вот там где системные события, когда написали имя функции, должна активироватся кнопка создать поу. Жмите на неё и будет Вам счастье продвинутся в этом вопросе
Уважаемый, Capzap, в инструкции по программированию РЛК110 на стр. 142 написано :Использовать кнопку Create POU не следует, т.к. она создает POU тип Function, а для работы требуется POU типа Program.
Спасибо.

capzap
03.11.2012, 12:33
прямо таки для работы системных событий нужна программа или вообще для работы плк. Мне картинки Ваши с телефона невидны, но если требуется что то инициировать, то хватит и функции, смысл не в типах поу, а наличие специфичных входных аргументах для события ну и отсутствие локальных переменных которые могут использоваться для хранения на следущий цикл, а раз событие случается один раз то и наличие их полная безсмыслица

Александр Ушаков
03.11.2012, 14:40
прямо таки для работы системных событий нужна программа или вообще для работы плк. Мне картинки Ваши с телефона невидны, но если требуется что то инициировать, то хватит и функции, смысл не в типах поу, а наличие специфичных входных аргументах для события ну и отсутствие локальных переменных которые могут использоваться для хранения на следущий цикл, а раз событие случается один раз то и наличие их полная безсмыслица

Ну, Вы, и выдали, так я вообще дураком сатану, извините.
Это не картинки с телефона, а скриншот с 21" монитора,опять же извиняюсь.
Но при инициализации POU из В.Ч Таймера необходима именно программа а не функция, и это не я придумал.
И почему такой сарказм в ГОЛОСЕ, я повода не давал, и если , Вам, мои вопросы кажутся глупыми, НУ ТАК ПРОСВЕТИТЕ.
Я с большим удовольствием выложил-бы вам пробы проекта в другом формате но мне такого права не предоставлено .
Спасибо.

capzap
03.11.2012, 15:15
по моему Вы больше вникаете в окрас моего голоса, чем в проблему. При чем тут запуск вчтаймера и системные события. Событие наступает один раз за время работы, а таймер работает через заданные промежутки времени. У меня в мыслях небыло смеятся над Вами

petera
04.11.2012, 01:09
Ну, Вы, и выдали, так я вообще дураком сатану, извините.
Это не картинки с телефона, а скриншот с 21" монитора,опять же извиняюсь.
Но при инициализации POU из В.Ч Таймера необходима именно программа а не функция, и это не я придумал.
И почему такой сарказм в ГОЛОСЕ, я повода не давал, и если , Вам, мои вопросы кажутся глупыми, НУ ТАК ПРОСВЕТИТЕ.
Я с большим удовольствием выложил-бы вам пробы проекта в другом формате но мне такого права не предоставлено .
Спасибо.
Зря Вы обиделись. Просто capzap в интернете работает с помощью телефона и не может видеть прикрепленные изображения.

Александр Ушаков
04.11.2012, 07:36
по моему Вы больше вникаете в окрас моего голоса, чем в проблему. При чем тут запуск вчтаймера и системные события. Событие наступает один раз за время работы, а таймер работает через заданные промежутки времени. У меня в мыслях небыло смеятся над Вами

Здравствуйте, Всем, доброго времени суток.
Уважаемый CAPZAP, значит, насколько я понял компилятор CoDeSys
ругается на POU типа PROGRAM?
На функционирование проекта эти ругательства влияния не оказывают,
просто хотелось разобраться .
К стати слова ,Уважаемый CAPZAP, имеют прямой смысл, Ваше подвижнечество на этом форуме действительно заслуживает уважения.
Спасибо.

capzap
04.11.2012, 08:45
Давайте определимся, Вам нужна работа ВЧТ , а не просто службы системных событий. Если ошибка касается события start то создайте функцию, там появятся три системных аргумента, своих аргументов добавлять не нужно. Событие старт не запустит программу, вернее "прогонит" ее всего один раз,поэтому фб получающие результат в следующий цикл не выполнят своей функции, тоже самое касается собственных объявлений переменных, если хотите сменить состояние это должны быть глобальные переменные

ЗЫ компилятор не ругается а предупреждает и еще раз повторю не на тип ПОУ, а на наличие переменных в блоке VAR

Александр Ушаков
04.11.2012, 10:02
Давайте определимся, Вам нужна работа ВЧТ , а не просто службы системных событий. Если ошибка касается события start то создайте функцию, там появятся три системных аргумента, своих аргументов добавлять не нужно. Событие старт не запустит программу, вернее "прогонит" ее всего один раз,поэтому фб получающие результат в следующий цикл не выполнят своей функции, тоже самое касается собственных объявлений переменных, если хотите сменить состояние это должны быть глобальные переменные

ЗЫ компилятор не ругается а предупреждает и еще раз повторю не на тип ПОУ, а на наличие переменных в блоке VAR

Запуск программы по событию Start мне нужна только для того чтобы при включении оборудования активировался счёт, и всё, дальше эта программа может и не работать .
Спосибо.

Sergey1024
05.11.2012, 12:05
День добрый!
ПЛК-73, читаю из порта данные от прибора - посылка 20 байт, примерно 30 раз в секунду. При чтении периодически пропадают куски данных.
Вот код чтения:


buf: ARRAY[0..511] OF BYTE;
bufc: INT;

IF XferPortCheck() THEN
REPEAT
c := DWORD_TO_INT(SysComRead(acom.Settings.Port, ADR(rxbuf), SIZEOF(rxbuf), 0));
FOR i := 0 TO c - 1 DO
buf[bufc] := rxbuf[i];
bufc := bufc + 1;
IF bufc >= SIZEOF(buf) THEN bufc := 0; END_IF
END_FOR
UNTIL c = 0
END_REPEAT
END_IF

вот функция проверки порта:


IF NOT acom.ready THEN
p.settings.Port := 0;
p.settings.dwBaudRate := 115200;
p.settings.byParity := 0;
p.settings.dwTimeout := 0;
p.settings.byStopBits := 0;
p.settings.dwBufferSize := 0;
p.settings.dwScan := 0;
acom(Enable:=TRUE, Settings:=p.settings, Task:=OPEN_TSK);
END_IF
XferPortCheck := acom.ready;

Цикл 10мс, приемный буфер rxbuf 127 байт.

Что криминального в коде, почему теряются данные?

Yegor
05.11.2012, 16:06
Какое-то гуманитарное описание проблемы. Прибор сам посылает без запроса что ли? Что у него там за протокол? Число принятых байт всегда 20 разве?

Gans
05.11.2012, 16:17
Здравствуйте, Sergey1024.

Что криминального в коде, почему теряются данные?
Возможно на момент считывания буфера, ПЛКххх еще не успел получить все данные от внешнего устройства.

Sergey1024
05.11.2012, 16:26
Какое-то гуманитарное описание проблемы. Прибор сам посылает без запроса что ли? Что у него там за протокол?
Вы вопрос читали? Какая разница, какой протокол и кто шлет данные контроллеру?

Число принятых байт всегда 20 разве?Этот вопрос к чему? Где вы в тексте вопроса увидели сообщение про число принятых байт?

Еще раз: с одной стороны непрерывно шлются данные в порт, с другой - ПЛК тупо читает данные из порта и складирует в буфер. ВСЕ.
При этом в буфере-приемнике (который buf в коде) принятые данные отличаются от посылаемых - часть данных теряется, примерно каждая 20 посылка приходит битая.
Где собака порылась? Смена скорости с 115200 на 19200 ничего не дала.

Sergey1024
05.11.2012, 16:28
Возможно на момент считывания буфера, ПЛКххх еще не успел получить все данные от внешнего устройства.Без разницы - если не успел, в следующих циклах принятый остаток должен считаться и дописаться в буфер buf.

Gans
05.11.2012, 17:51
Без разницы - если не успел, в следующих циклах принятый остаток должен считаться и дописаться в буфер buf.
всё правильно, но вот после считывания данных программой буфер снова ПУСТ! и в следующий раз Вы считаете остатки данных которые не успели попасть в буфер на момент первого считывания. Если предыдущие данные Вы не сохранили для добавление остатков данных пришедших в буфер - то практически эти данные утеряны :-(
P. S. Это же не С+/делфи, VBA и т.д. здесь нет генерации события что данные пришли :( это оставлено программисту самому разбираться :-)

Sergey1024
05.11.2012, 18:27
всё правильно, но вот после считывания данных программой буфер снова ПУСТ! и в следующий раз Вы считаете остатки данных которые не успели попасть в буфер на момент первого считывания. Если предыдущие данные Вы не сохранили для добавление остатков данных пришедших в буфер - то практически эти данные утеряны :-(
В коде примера видно, что все пришедшие данные по мере поступления накапливаются в буфере buf. В реальном приложении я естественно анализирую и обрабатываю данные, в примере просто показана логика считывания данных.
Допустим в порт я постоянно шлю посылки типа 11 22 33 44 55 66 77 88 FF FF
В CDS при заполнении буфера я ставлю точку останова, смотрю в отладчике что пришло и вижу, что в буфере данные могут быть к примеру:
11 22 33 FF FF 11...

Вот и спрашиваю - что может быть причиной потери данных при приеме?

capzap
05.11.2012, 18:59
В коде примера видно, что все пришедшие данные по мере поступления накапливаются в буфере buf. В реальном приложении я естественно анализирую и обрабатываю данные, в примере просто показана логика считывания данных.
Допустим в порт я постоянно шлю посылки типа 11 22 33 44 55 66 77 88 FF FF
В CDS при заполнении буфера я ставлю точку останова, смотрю в отладчике что пришло и вижу, что в буфере данные могут быть к примеру:
11 22 33 FF FF 11...

Вот и спрашиваю - что может быть причиной потери данных при приеме?

Ну видеть в буфере можете и просто мусор, прежде чем входить в цикл for обнулите буфер.
Увеличивали ли период опроса, чтоб проверить пропадает ли информация

Sergey1024
05.11.2012, 19:11
Ну видеть в буфере можете и просто мусор, прежде чем входить в цикл for обнулите буфер.Зачем? Буфер заполняется полностью входными данными, после заполнения я в точке останова смотрю, что получил.

Увеличивали ли период опроса, чтоб проверить пропадает ли информацияЧто имеется в виду под периодом? Цикл ПЛК, таймаут на чтение?

capzap
05.11.2012, 20:05
Зачем? Буфер заполняется полностью входными данными, после заполнения я в точке останова смотрю, что получил.
Что имеется в виду под периодом? Цикл ПЛК, таймаут на чтение?

я вот не заметил, что у Вас идет проверка на равентство переменной с количеству ячеек буффера, вернее есть, но что будет если принято меньшее, начнется ли прием следующей партии данных с нулевого индекса буффера?
Обнуляли бы, увидели

Под периодом я понимаю чтоб принимать данные не 30 раз в секунду, а 15, 10, один раз в секунду, думаю намек понятен. Я же не предлагаю работать с такими параметрами, а протестировать

Sergey1024
05.11.2012, 20:18
я вот не заметил, что у Вас идет проверка на равентство переменной с количеству ячеек буффера, вернее есть, но что будет если принято меньшее, начнется ли прием следующей партии данных с нулевого индекса буффера?
Обнуляли бы, увиделиНе очень понял, зачем нужна такая проверка?
тут делаем попытку считать данные из порта:
c := DWORD_TO_INT(SysComRead(acom.Settings.Port, ADR(rxbuf), SIZEOF(rxbuf), 0));

если получили какие-то данные - сохраняем в приемный буфер:
FOR i := 0 TO c - 1 DO
buf := rxbuf[i];
bufc := bufc + 1;
IF bufc >= SIZEOF(buf) THEN
bufc := 0; [b](* тут я ставлю точку останова и смотрю содержимое buf *)
END_IF
END_FOR


Под периодом я понимаю чтоб принимать данные не 30 раз в секунду, а 15, 10, один раз в секунду, думаю намек понятен. Я же не предлагаю работать с такими параметрами, а протестироватьДа, пробовал - при посылке 5 раз в секунду на 19200 все равно иногда данные теряются.
PS. Я так понимаю, что для ПЛК-73 альтернатива SysComLib в виде UNM не пройдет? В конфигураторе я не могу добавить модуль UNM.

Sergey1024
05.11.2012, 23:56
Простой как плинтус пример:


VAR_GLOBAL
comsvc: COM_SERVICE;
cs: COMSETTINGS;
END_VAR



PROGRAM PLC_PRG
VAR
c: INT;
rxbuf: ARRAY[0..511] OF BYTE;
END_VAR

IF XferCheck() THEN
REPEAT
c := DWORD_TO_INT(SysComRead(cs.Port, ADR(rxbuf), SIZEOF(rxbuf), 0));
IF c > 0 THEN BYTESREAD := BYTESREAD + c; END_IF
UNTIL c = 0
END_REPEAT
END_IF

функция проверки порта:

IF NOT comsvc.ready THEN
cs.Port := 1;
cs.dwBaudRate := 115200;
cs.byParity := 0;
cs.dwTimeout := 0;
cs.byStopBits := 0;
cs.dwBufferSize := 0;
cs.dwScan := 0;
comsvc(Enable:=TRUE, Settings:=cs, Task:=OPEN_TSK);
ELSE
comsvc.Enable := FALSE;
END_IF
XferCheck := comsvc.ready;

Запускаем пример, стартуем передачу в порт, ждем, тормозим передачу, получаем:
передано байт: 27060
BYTESREAD: 26981

В порт каждые 30 мсек шлется посылка длиной 16 байт, цикл ПЛК 1мс. Кто-то может объяснить, какого лешего теряются данные?

Валенок
06.11.2012, 02:57
каждые 30 мсек шлется посылка длиной 16 байт

посылка 20 байт, примерно 30 раз в секунду

11 22 33 44 55 66 77 88 FF FF
Все-таки какая длина посылок ?

capzap
06.11.2012, 05:38
Не очень понял, зачем нужна такая проверка?
тут делаем попытку считать данные из порта:
c := DWORD_TO_INT(SysComRead(acom.Settings.Port, ADR(rxbuf), SIZEOF(rxbuf), 0));

если получили какие-то данные - сохраняем в приемный буфер:
FOR i := 0 TO c - 1 DO
buf := rxbuf[i];
bufc := bufc + 1;
IF bufc >= SIZEOF(buf) THEN
bufc := 0; [b](* тут я ставлю точку останова и смотрю содержимое buf *)
END_IF
END_FOR



Можно было повторно не объяснять, лучше ответить что будет если всего приняли и присвоили переменной с меньше чем размер буфера
PS попробуйте не прибавлять bufc в теле цикла а в условии цикла уменьшать до нуля переменную с. И после окончании работы тела цикла поставте останов и посмотрите на сколько заполняется массив

Sergey1024
06.11.2012, 06:42
Все-таки какая длина посылок ?
Посылки я уже просто имитирую с другого компа - разницы нет, что слать посылки в 20, что в 10, что в 50 байт - при большом количестве посылок на контроллере обязательно принимается меньше, чем посылается в порт.

Sergey1024
06.11.2012, 06:52
Можно было повторно не объяснять, лучше ответить что будет если всего приняли и присвоили переменной с меньше чем размер буфера
PS попробуйте не прибавлять bufc в теле цикла а в условии цикла уменьшать до нуля переменную с.

Я пару постов назад написал код простейшего примера, где я просто инкрементирую счетчик, без заполнения какого-то буфера:
c := DWORD_TO_INT(SysComRead(cs.Port, ADR(rxbuf), SIZEOF(rxbuf), 0));
IF c > 0 THEN BYTESREAD := BYTESREAD + c; END_IF

С другого компьютера просто шлю в порт последовательность посылок, потом отключаю посылку, и сравниваю - сколько отослано, сколько получено на контроллере. На контроллере BYTESREAD всегда отстает от количества отосланных байт (вот еще раз попробовал, 902 отослано, 896 принято).


И после окончании работы тела цикла поставте останов и посмотрите на сколько заполняется массив
Поставил точку останова на строку BYTESREAD := BYTESREAD + c;, дал одиночную посылку в порт длиною 57 байт. В точке было два останова - сначала с=3, потом с=0F. Без точки останова принимается 57 байт, но при непрерывной передаче таких посылок 8 раз в сек получаю 4731 отправлено, 4708 принято.

capzap
06.11.2012, 07:00
Я пару постов назад написал код простейшего примера, где я просто инкрементирую счетчик, без заполнения какого-то буфера:
c := DWORD_TO_INT(SysComRead(cs.Port, ADR(rxbuf), SIZEOF(rxbuf), 0));
IF c > 0 THEN BYTESREAD := BYTESREAD + c; END_IF

С другого компьютера просто шлю в порт последовательность посылок, потом отключаю посылку, и сравниваю - сколько отослано, сколько получено на контроллере. На контроллере BYTESREAD всегда отстает от количества отосланных байт (вот еще раз попробовал, 902 отослано, 896 принято).

Ну и к чему Вы склоняетесь, виновато железо? В работе последовательных портов есть понятие таймаут, оно как раз на тот случай если данные пропали, а мы ждем определенное их количество
Пример с таймаутом приведен не совсем удачно, но существуют всевозможные проверки, контроль четности контрольная сумма и т.п. Идеальной линии связи не бывает, данным свойственно теряться

Валенок
06.11.2012, 08:25
Посылки я уже просто имитирую с другого компа - разницы нет, что слать посылки в 20, что в 10, что в 50 байт - при большом количестве посылок на контроллере обязательно принимается меньше, чем посылается в порт.
512 плохо делицца на 20,10 и даже 50. Брекпоинт - внутри цикла. Вы тормозитесь не получив полностью даже текущую полсылку. Как там и что делается дальше - знаете только Вы. Повлиять может даже тип "с". Вдруг он WORD ? Кто кроме Вас знает ?
И поменяйте местами ПЛК и комп для сравнения. Может пк чудит ? На ПЛК оба порта есть ?

Sergey1024
06.11.2012, 08:48
Ну и к чему Вы склоняетесь, виновато железо?[/CODE]Я ни к чему пока не склоняюсь, только начал щупать ПЛК.

[QUOTE=capzap;95140]В работе последовательных портов есть понятие таймаут, оно как раз на тот случай если данные пропали, а мы ждем определенное их количество. Пример с таймаутом приведен не совсем удачно, но существуют всевозможные проверки, контроль четности контрольная сумма и т.п. Идеальной линии связи не бывает, данным свойственно теряться
Почему же тогда компьютер вместо контроллера считывает абсолютно все посылки? Я бы понял потерю данных на длинной линии или с экстремальной плотностью посылок, но на линии длиной 10см терять до нескольких процентов данных непонятно куда - хз.

Sergey1024
06.11.2012, 08:52
512 плохо делицца на 20,10 и даже 50. Брекпоинт - внутри цикла. Вы тормозитесь не получив полностью даже текущую полсылку.Брейк поставлен просто для проверки количества принятых за один раз байт.

Как там и что делается дальше - знаете только Вы.Ничего там не делается, вот весь код:
REPEAT
c := DWORD_TO_INT(SysComRead(cs.Port, ADR(rxbuf), SIZEOF(rxbuf), 0));
IF c > 0 THEN BYTESREAD := BYTESREAD + c; END_IF
UNTIL c = 0
END_REPEAT


И поменяйте местами ПЛК и комп для сравнения. Может пк чудит ? На ПЛК оба порта есть ?Оба порта есть, проверял на обоих - одинаково.
С ПЛК на комп посылки отсылал - 20000 отправлено, 20000 принято на компе.

P.S. Проверил еще раз преобразователи - комп1-> преобразователь1 232\485->преобразователь2 232\485->комп2
В обе стороны - 300тыс байт без единой потери.
Так что варианта всего три - мои кривые руки, кривость железа ПЛК73, кривость SysComLib. Очень хочется варианта 1, ибо в противном случае проект накрывается медным тазом просто :-(

PPS. SysLibCom версии 20.2.06 12:31:08, может есть версии посвежее?

Валенок
06.11.2012, 18:05
Оба порта есть
Пошлите с 1-ого на 2-ой

PS
Если проект накрывается тазом из-за каких-то потерь - однозначно руки.

Sergey1024
06.11.2012, 18:28
Пошлите с 1-ого на 2-ойЧто это даст в практическом плане, интересно?


Если проект накрывается тазом из-за каких-то потерь - однозначно руки.:) По делу есть что сказать?

capzap
06.11.2012, 18:34
валенок видимо уже отдал на производство 73-й плк, поэтому достоверно подтверждать примером не будет, я вообще такими плк не пользовался еще, да и не начем сейчас видео записать чтоб наглядно показать об отсутствии потерь

vasylye
06.11.2012, 18:50
Здравствуйте!
нужно обнулить старший байт в переменной типа UINT



VAR
sum : UINT := 0;
END_VAR
.....
sum := sum AND 16#00FF;
.....

вылетает ошибка Type mismatch in parameter 1 of 'AND': Cannot convert 'UINT' to 'ANY_BIT'

как правильно сделать такую маску ?

capzap
06.11.2012, 18:59
Здравствуйте!
нужно обнулить старший байт в переменной типа UINT



VAR
sum : UINT := 0;
END_VAR
.....
sum := sum AND 16#00FF;
.....

вылетает ошибка Type mismatch in parameter 1 of 'AND': Cannot convert 'UINT' to 'ANY_BIT'

как правильно сделать такую маску ?

Преобразуйте uint в word и попробуйте

vasylye
06.11.2012, 19:02
Благодарю!

Валенок
06.11.2012, 21:16
По делу есть что сказать?
Ну 73-ого - нету. Рояль в кустах - 100 и 63 (тот же 73)
100 просто шлет. 63 просто ловит. 20 байт каждые 15..16ms. Циклы у обоих 1мс. Все посылки отличны друг от друга (счетчики прокручиваются). Прогнал около 40тыс посылок (0.8М) Контроль по длине и содержимому. Ошибок 0. Думаю достаточно.
Я бы и не выступал, но т.к. при обмен по 485 организую только через syslibcom (мб-RTU),а там и 250 без проблем в некоторых случаях, имею право сказать про руки.
Хоть и ваяете свой протокол, советую изучить релиз modbus.lib. Сам его сейчас неиспользую - но авторам огромное спасибо. Делаете что-то свое и хотите надежности - исходите из возможности нормальной работы при любом уровне помех. si vis pacem - para bellum - про это.

Sergey1024
06.11.2012, 23:03
100 просто шлет. 63 просто ловит. 20 байт каждые 15..16ms. Циклы у обоих 1мс. Все посылки отличны друг от друга (счетчики прокручиваются). Прогнал около 40тыс посылок (0.8М) Контроль по длине и содержимому. Ошибок 0. Думаю достаточно.
Можно ли получить кусок кода приема данных - просто чтение и инкремент счетчика, который гарантированно работает у вас?

Делаете что-то свое и хотите надежности - исходите из возможности нормальной работы при любом уровне помех. si vis pacem - para bellum - про это.Это понятно, но любая потеря входных данных ведет к искажению конечного результата, поэтому хочется избежать этого, тем более что передающее оборудование работает нормально.

genchik
09.11.2012, 06:58
Генератор блинк на языке st не могу реализовать, помогите.:confused:

capzap
09.11.2012, 07:07
Генератор блинк на языке st не могу реализовать, помогите.:confused:

Так Вы покажите на какой стадии застряла Ваша реализация

genchik
09.11.2012, 07:40
blink.enable:= in; blink.timelov:= t#30s; blink.timehich:= t#30s; out:= blink.out; clock.:=?

capzap
09.11.2012, 07:48
а описание? Мне вот не понятен Ваш знак вопроса. И чтоб запустилось мне кажется надо после всех этих присвоений добавить blink()

genchik
09.11.2012, 07:55
При запуске програмы clock не ведёт отчёт времени. Переменные присвоены правильно и меняются в выполнении програмы.

genchik
09.11.2012, 07:58
blink.enable:= in; blink.timelov:= t#30s; blink.timehich:= t#30s; out:= blink.out; clock.:= blink
Так получается?

genchik
09.11.2012, 13:08
Помогите закончить блинк

petera
09.11.2012, 13:31
Помогите закончить блинк
Вам же ответили
И чтоб запустилось мне кажется надо после всех этих присвоений добавить blink()
Т.е просто добавьте в свой код вызов hit()

PROGRAM PLC_PRG
VAR
hit: BLINK;
out: BOOL;
END_VAR
hit.ENABLE:= TRUE; hit.TIMEHIGH:=t#30s; hit.TIMELOW:= t#30s;out:= hit.OUT;
hit();Где-то так

spinogryz57
09.11.2012, 15:25
1. Как правильно стереть проект, программу, алгоритм (не знаю как правильно называется) из памяти ПЛК 100 через кодесис 2 ?

2. Как правильно записать проект... в память ПЛК 100 через кодесис 2 ?
Проект создан в кодесис 2 надо стереть старый и записать новый в плк.

3. Как вообще узнать сколько свободной памяти в плк доступно, может программка есть какая?

Николаев Андрей
09.11.2012, 15:54
1. Как правильно стереть проект, программу, алгоритм (не знаю как правильно называется) из памяти ПЛК 100 через кодесис 2 ?

2. Как правильно записать проект... в память ПЛК 100 через кодесис 2 ?
Проект создан в кодесис 2 надо стереть старый и записать новый в плк.

3. Как вообще узнать сколько свободной памяти в плк доступно, может программка есть какая?

1. Читаем документацию и ПЛК и по CoDeSys. В ней есть все ответы.

Теперь по вопросам:
1. Просто запишите новый проект, и старый будет удален. Можно просто связавшись с контроллером удалить программу подачей команды сброс заводской.
2. Записать проект: Связаться с контроллером. Для того, чтобы сохранить на flash - из меню онлайн выполнить команду "создание загрузочного проекта".
3. Размер проекта CoDeSys выдает при компиляции. Что с памятью можно глянуть с помощью гипертерминала.

petera
09.11.2012, 15:55
1. Как правильно стереть проект, программу, алгоритм (не знаю как правильно называется) из памяти ПЛК 100 через кодесис 2 ?

2. Как правильно записать проект... в память ПЛК 100 через кодесис 2 ?
Проект создан в кодесис 2 надо стереть старый и записать новый в плк.

3. Как вообще узнать сколько свободной памяти в плк доступно, может программка есть какая?
Нажимаем F1 и в справке кодесис читаем

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

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

spinogryz57
09.11.2012, 16:50
Николаев Андрей, petera, Спасибо! Помогли.

genchik
09.11.2012, 20:52
Вам же ответили
Т.е просто добавьте в свой код вызов hit()

PROGRAM PLC_PRG
VAR
hit: BLINK;
out: BOOL;
END_VAR
hit.ENABLE:= TRUE; hit.TIMEHIGH:=t#30s; hit.TIMELOW:= t#30s;out:= hit.OUT;
hit();Где-то так

Спасибо, что ткнули носом в очевидное. :)

Steppe
10.11.2012, 21:17
С ПЛК ранее не сталкивался. Только PIC и только С для них. При освоении ПЛК все релейные реализации ручками прощупал - понятно. А вот со связью по RS485 с модулями МЭ110 завис. Каша в голове оттого, что в микроконтроллерах интерфейс общения по последовательным портам определялся на мой взгляд, несколько конкретнее - стартовая последовательность, обмен и т.д. В ПЛК я не могу понять куда загружаются данные. Они мне нужны для для дальнейшей модификации и анализа. Перелопачиваю примеры и пока ничего не понял. На что обратить внимание?

yaggna
11.11.2012, 11:02
Кодесис не только хорошая программа, но ещё и весёлая, в общем как с программированием у меня не знаю но с тестами получается хорошо умудряюсь вытаскивать такие косяки с плк, аш самой весело.
Вот работала и на те. Смотрите фото.

Валенок
11.11.2012, 11:41
Картинка ни о чем. Вырванный кусок.
Какой вопрос был при загрузке ?
PS
"Дорогая, ты там осторожней на дороге. По радио сказали что одна дура по встречке едет"
"Милый ! Одна ?!!! Да тут их сотни !!!"

Валенок
11.11.2012, 11:43
На что обратить внимание?
Рук-во по конфигурированию

Inna
11.11.2012, 21:55
Здравствуйте! Уже писала о своей проблеме: необходимо с помощью ПК записывать в контроллер начальные значения некоторых переменных, например, текст сообщения, номер телефона и т. д. С помощью какой программы можно это сделать? Может быть, через гипертерминал... Или ещё как-нибудь. Смотрела примеры обмена обмена контроллера с ПК, но там приводится программа, которая загружена в контроллер, а как этот обмен осуществляет компьютер? Может быть посоветуете, что почитать или пример какой-нибудь... Заранее спасибо!

capzap
11.11.2012, 21:58
Здравствуйте! Уже писала о своей проблеме: необходимо с помощью ПК записывать в контроллер начальные значения некоторых переменных, например, текст сообщения, номер телефона и т. д. С помощью какой программы можно это сделать? Может быть, через гипертерминал... Или ещё как-нибудь. Смотрела примеры обмена обмена контроллера с ПК, но там приводится программа, которая загружена в контроллер, а как этот обмен осуществляет компьютер? Может быть посоветуете, что почитать или пример какой-нибудь... Заранее спасибо!

Вроде самое простое это визуализация самой среды КДС, все остальное можно сделать посредством стандартных протоколов, например модбас

Inna
11.11.2012, 22:07
Вроде самое простое это визуализация самой среды КДС, все остальное можно сделать посредством стандартных протоколов, например модбас

Очень уж не хочется устанавливать КДС, чтобы работать с контроллером, ведь это нужно использовать лишь один раз, далее контроллер к ПК не подключен.

А как использовать Модбас? Писать свою программу, чтобы осуществлять обмен? А можно написать свою команду для гипертерминала?

capzap
11.11.2012, 22:13
модбас это тоже из простых для понимания методов, но как все простое не очень удобен.

Мой совет изучить как работает веб-сервер в плк, поспрашивать сисадминов или тех кто умеет делать сайты о технологии ajax. И если появится понимание как работать с сокетами между плк и ПК то будет самый шикарный вариант, бесплатный в отличии от визуализации КДС и более емкий по передаче информации чем модбас

Inna
11.11.2012, 22:19
модбас это тоже из простых для понимания методов, но как все простое не очень удобен.


Как-то нет у меня понимания. Создаю регистр в программе, а как в него что-то записать... Т. е. как обратиться с ПК...

За совет спасибо. Обязательно воспользуюсь, только работу нужно сделать срочно.Боюсь, что с моим уровнем зананий, я эту тему не скоро осилю )))

capzap
11.11.2012, 22:23
Боюсь, что с моим уровнем зананий, я эту тему не скоро осилю )))

Видео должно помочь о преимуществах метода http://www.owen.ru/forum/showpost.php?p=83833&postcount=11
Понимаю, что если пойдете по этому пути вопросов будет масса, а я к сожалению не смогу помочь, завтра снова в командировку. Лучше конечно не браться, тогда только визуализация КДС

Inna
11.11.2012, 22:33
capzap, спасибо!!!
Вы мне очень помогли! Буду изучать визуализацию))

capzap
11.11.2012, 22:34
capzap, спасибо!!!
Вы мне очень помогли! Буду изучать визуализацию))

где то техподдержкой выложены проекты по sms-кам там уже готовая визуализация отправки и приема смсок как именно называется не помню

petera
11.11.2012, 22:35
Очень уж не хочется устанавливать КДС, чтобы работать с контроллером, ведь это нужно использовать лишь один раз, далее контроллер к ПК не подключен.

А как использовать Модбас? Писать свою программу, чтобы осуществлять обмен? А можно написать свою команду для гипертерминала?
А как на счет EasyWorkPLC, вроде специально предназначена для этого случая? Есть на диске с ПЛК и руководство к ней там же, а здесь статья о ней http://78.107.137.186/pub/AiP/32/aip0108s12-13.pdf

Правда у меня с ПЛК160 отказывается работать:confused:

Andrei Z
11.11.2012, 22:35
блин какие ужасы в ролике((( и кто придумал весь этот геморой((( неужели так всё сложно блин

capzap
11.11.2012, 22:36
блин какие ужасы в ролике((( и кто придумал весь этот геморой((( неужели так всё сложно блин

это просто видео тормозит, у меня винда в виртуалбокс крутится, видимо еще процессор чем то нагружен был

Andrei Z
11.11.2012, 22:40
да я вообще про программу с сокетами на экране(((( стольок всяких не русских букв.. и ещё в этом смысл какойто есть в наборе всяких символов((( какой дурень придумал кудесис((( и всякую отсальную замороченую хрень

capzap
11.11.2012, 22:42
да я вообще про программу с сокетами на экране(((( стольок всяких не русских букв.. и ещё в этом смысл какойто есть в наборе всяких символов((( какой дурень придумал кудесис((( и всякую отсальную замороченую хрень

ну на CFC это было бы красивее, но влазило бы на экран еще меньше того что показано на ST

rovki
11.11.2012, 22:57
((( какой дурень придумал кудесис((( и всякую отсальную замороченую хрень
Это что то новое:confused: ;)Или общение с Овен лоджик так повлияло

Andrei Z
11.11.2012, 23:11
Да овен лоджик как то попроще.. как графика, я вообще про незнакомое, регистры модбас всё это програмирование ((( куча окон и инфы.. вот смотрю и думаю неужели нельзя как то попроще было придумать всё это .. думаю не разберусь уже.. руки опускаются изучать это.. особенно когда нужно то всегото на пару проектов

capzap
11.11.2012, 23:13
Да овен лоджик как то попроще.. как графика, я вообще про незнакомое, регистры модбас всё это програмирование ((( куча окон и инфы.. вот смотрю и думаю неужели нельзя как то попроще было придумать всё это .. думаю не разберусь уже.. руки опускаются изучать это.. особенно когда нужно то всегото на пару проектов

в моем видео небыло ни чего про модбас, просто тупая передача данных (байт) от передатчика к приемнику

Andrei Z
11.11.2012, 23:15
да я просто жалуюсь и злюсь что не понимаю в этом.. уж простите за моё бурчание

Inna
11.11.2012, 23:17
А как на счет EasyWorkPLC, вроде специально предназначена для этого случая?

К сожалению, не подходит, Там есть ограничение на размер переменных, которые можно установить - 32 бита. В идеале, конечно, хотелось бы написать что-нибудь на подобие, только для совей темы. ))

Vukkub
11.11.2012, 23:28
Доброе время суток, вопрос наверное для некоторых покажется идиотский, но ... Установил CoDeSys version 2.3.9.36 русифицированный и теперь все мои проекты открываются с масштабом в 106% :-) при попытке изменить масштаб он меняется на какие то доли секунды и назад прыгает в 106%. Мелочь я понимаю но не комфортно работать ... Подскажите где поправить.

petera
12.11.2012, 01:22
К сожалению, не подходит, Там есть ограничение на размер переменных, которые можно установить - 32 бита. В идеале, конечно, хотелось бы написать что-нибудь на подобие, только для совей темы. ))Не переменных, а констант и они могут быть 16, 32 и float.
Тогда другой экзотический способ.
Начальные значения некоторых переменных, например, текст сообщения, номер телефона и т. д. хранить в файле на ПЛК в удобном для редактирования в ПК текстовом формате. Изменили, например, номер телефона в "Блокноте" и записали новые параметры в ПЛК с помощью утилиты PLC_IO.
Это конечно не лучшее решение.
Но если использовать визуализацию кодесиса, то его надо устанавливать.
А как быть, ведь
Очень уж не хочется устанавливать КДС, чтобы работать с контроллером, ведь это нужно использовать лишь один раз, далее контроллер к ПК не подключен.
А ведь можно найти хорошее решение вопроса
А как использовать Модбас? Писать свою программу, чтобы осуществлять обмен? Для того, чтобы использовать Модбас и не писать свою программу обмена нужно воспользоваться миниSCADA от конфигуратора панели СП270.
В ПЛК нужно создать модуль slave с нужными переменными. Затем с помощью конфигуратора панели СП270 разработать Вашу визуализацию. Конфигуратор СП270 позволяет использовать режим эмуляции панели с реально подключенным контроллером. Запускаем, отлаживаем визуализацию и при необходимости программу в ПЛК.
Теперь самое интересное для того, чтобы полученная визуализация работала автономно на компьютере потребителя, выбираем "Файл"-"Встроить в SCADA" , указываем папку где будет готовая SCADA, все мы создали совершенно автономную систему, которая будет работать и без конфигуратора.
Находим в этой папке "AutoWin.exe" и запускаем его.
Фактически это SCADA размер 630 кб (без учета размера файла скомпилированной визуализации)! Правда без лицензии наша SCADA будет работать 30 мин, затем ее нужно перезапускать. Но и это вроде можно обойти.
При некоторых ухищрениях разрешение окна можно сделать не 480Х234, как у СП270, а другое (стандартные разрешения монитора) вплоть до 1440X900:)

askaev
12.11.2012, 14:16
Вопрос про скорость обработки сигналов по сети RS-232, скорее всего для тех.поддержки:

Если я непосредственно на сам ПЛК-100 повешу кнопку и реле, которое будет щёлкать при нажатии на эту кнопку, время задержки реакции реле после нажатия/отжатия кнопки будет стремиться к 0. Если же я кнопку повешу на МДВВ-1, а реле на МДВВ-2 (при этом на входах и выходах обоих модулей МДВВ будут висеть ещё прочие устройства), то задержка задержка уже будет заметна.

Вопросы: Как рассчитать возможное кол-во подключаемых внешних модулей (МДВВ, МВА,...) к ПЛК-100 по RS-232 при котором особо не будут заметны подтормаживания (не более 0,5 сек.) при опросе портов периферийных устройств или выдачи на них сигналов? Влияет ли на скорость обработки кол-во используемых портов на периферийном устройстве (1 порт, 8, 16 портов)?
Т.е каково макс.время опроса каждого периферийного устройства в сети? Как влияет ли на это скорость подключения RS-232? Как влияет на общее время опроса устройств кол-во этих устройств в сети? Как влияет на время опроса каждого периферийного устройства кол-во его портов?

ЗЫ: боимся ситуации, когда нажимаешь на кнопку аварийной остановки, а реакции нет и нет, нет и нет...

capzap
12.11.2012, 14:57
Вопрос про скорость обработки сигналов по сети RS-232, скорее всего для тех.поддержки:

Если я непосредственно на сам ПЛК-100 повешу кнопку и реле, которое будет щёлкать при нажатии на эту кнопку, время задержки реакции реле после нажатия/отжатия кнопки будет стремиться к 0. Если же я кнопку повешу на МДВВ-1, а реле на МДВВ-2 (при этом на входах и выходах обоих модулей МДВВ будут висеть ещё прочие устройства), то задержка задержка уже будет заметна.

Вопросы: Как рассчитать возможное кол-во подключаемых внешних модулей (МДВВ, МВА,...) к ПЛК-100 по RS-232 при котором особо не будут заметны подтормаживания (не более 0,5 сек.) при опросе портов периферийных устройств или выдачи на них сигналов? Влияет ли на скорость обработки кол-во используемых портов на периферийном устройстве (1 порт, 8, 16 портов)?
Т.е каково макс.время опроса каждого периферийного устройства в сети? Как влияет ли на это скорость подключения RS-232? Как влияет на общее время опроса устройств кол-во этих устройств в сети? Как влияет на время опроса каждого периферийного устройства кол-во его портов?

ЗЫ: боимся ситуации, когда нажимаешь на кнопку аварийной остановки, а реакции нет и нет, нет и нет...

http://ru.wikipedia.org/wiki/Modbus
Немного об интервалах (речь идёт о Serial Modbus RTU): при скорости 9600 и 11 битах в кадре (стартовый бит + 8 бит данных + бит контроля чётности + стоп-бит): 3.5 * 11 / 9600 = 0,00401041(6), то есть более 4 мс; 1.5 * 11 / 9600 = 0,00171875, то есть более 1 мс. Для скоростей более 19200 бод допускается использовать интервалы 1,75 и 0,75 мс соответственно.

Terrano1992
12.11.2012, 15:52
боимся ситуации, когда нажимаешь на кнопку аварийной остановки, а реакции нет и нет, нет и нет...
Правильно боитесь... Кнопка аварийной остановки ("Not-Aus", "E-Stop") должна действовать абсолютно независимо от PLC и его периферийных устройств. То есть отключать управляющее напряжение на всех исполнительных устройствах (например, пневмоклапанах) и гарантированно обесточивать все электроприводы.
На вход PLC можно завести дополнительную контактную группу этой кнопки, с целью самодиагностики. Например, чтобы сообщить оператору, на каком из нескольких пультов управления установки был нажат "грибок", или выполнить какую-то особую процедуру перезапуска установки после аварийного стопа. Тут уже время реакции некритично - можно и через модуль ввода, подсоединенный через Modbus, за ее состоянием следить.

askaev
12.11.2012, 15:55
Ясно.

ЗЫ: я там в вопросе опечатался -- речь, естественно, идёт не о RS-232, а о RS-485.

Rinas
12.11.2012, 21:53
В глобальных переменных объявил переменную, присвоил адрес
rMass AT %MD30:REAL:=12.5;
Теперь в программе пишу
%MD30:=16.0;
Понятное дело ошибка преобразования REAL to DWORD.
Как присвоить значение переменной по адресу? В шнайдере можно было %MF:=16.0

capzap
13.11.2012, 00:09
%MD30:=REAL_TO_DWORD(16.0); так случайно не получится?

lara197a
13.11.2012, 00:37
извиняюсь, такой вот детский вопрос:
При использовании sms.lib
sPhone_in-номер как правильно пишется(с +7, с 8 или без них)
Text_or_PDU- эта переменная для чего?
Какой номер у RS232 на плк 100?

Валенок
13.11.2012, 01:08
rMass AT %MD30:REAL:=12.5;..
Как присвоить значение переменной по адресу? В шнайдере можно было %MF:=16.0
rMass:=16.0;
Зачем имя-то ? Абсолютный адрес - зло в 99.9% случаях.

Валенок
13.11.2012, 01:11
Какой номер у RS232 на плк 100?


ПЛК100,150,154
COM0 – RS485, COM1 – RS232, COM2 – Не исп., COM3 - Не исп., COM4 – RS232-Debug

ПЛК110
COM0 – RS485-1, COM1 – RS232, COM2 – RS485-2, COM3 - Не исп.,COM4 – RS232-Debug

ПЛК63
COM0 – RS485, COM1 – RS232, COM2 – Не исп., COM3 - Не исп., COM4 – RS232-Debug

где-то тут было нарыто

drvlas
13.11.2012, 02:10
где-то тут было нарыто
Я вот роюсь в конфигурациях, нашел в файле hardware.cfg, который находится в папке IOModules таргет-файлов следующее:


[Module.DEBUG_USART]
Name=Debug RS-232
;rus_name=Отладочный порт RS-232
Id=200

[Module.COM1_USART]
;rus_name=Порт RS-485
Name=RS-485-1
Id=201

[Module.COM2_USART]
Name=RS-232
;rus_name=Порт RS-232
Id=202

[Module.COM3_USART]
Name=RS-485-2
Id=203

[Module.COM4_USART]
Name=Port COM4
Id=204

Немного отличается от того, что ты привел.

А попутно спрошу свое: смотрю в ПЛК-браузере, там пишет, что хочет таргет 2.05. А где в таргет-файлах узнать, какая у них версия? Или как вообще узнать, что таргет подходит моему экземпляру ПЛК?
Почему вопрос: пишет, собака, что не инициализированы модули. Почему - не пойму. Сообщение прилагаю.

capzap
13.11.2012, 08:07
При использовании sms.lib
sPhone_in-номер как правильно пишется(с +7, с 8 или без них)
Text_or_PDU- эта переменная для чего?


Сейчас вроде до ума доведена вот эта библиотека SmsOwenLib.zip
Краткая инструкция по номерам к ней вот: http://www.owen.ru/forum/showpost.php?p=86678&postcount=1
По поводу текст или ПДУ, это формат отправки сообщения, либо обычным текстом либо в кодированном виде

Валенок
13.11.2012, 08:21
.....
Немного отличается от того, что ты привел.

Так я чего.Я не чего.Вот :confused: :
http://www.owen.ru/forum/showthread.php?t=10263&highlight=%ED%EE%EC%E5%F0%E0+%EF%EE%F0%F2%EE%E2

lara197a
13.11.2012, 08:43
capzap, Валенок
Спасибо!

drvlas
13.11.2012, 12:33
А попутно спрошу свое: смотрю в ПЛК-браузере, там пишет, что хочет таргет 2.05. А где в таргет-файлах узнать, какая у них версия? Или как вообще узнать, что таргет подходит моему экземпляру ПЛК?
Почему вопрос: пишет, собака, что не инициализированы модули. Почему - не пойму. Сообщение прилагаю.
Собсно, вопрос остался. Отзовитесь, плз, кто знает.

Еще один вопрос по модулю статистики. В описании конфигурирования ПЛК написано, что параметр PLC_CYCLE_TIME показывает реальный цикл в сотнях микросекунд. Значит ли это, что число 5000 дает

5000 * 100 мкс = 500000 мкс = 500 мс ?

Если да, то совершенно не могу понять вот такую картину
7374

И это в работающем ПЛК, который, вроде бы, вполне нормально отрабатывает события. То есть, его цикл, по самым щедрым прикидкам, не более 30 мс. А то, что мы видим в отладке (5320) КАГБЭ намекает на цикл в полсекунды.
Что я не так понимаю?

Спасибо!

Валенок
13.11.2012, 13:36
Да уж. Полсекунды в глаза.
1.Cчитали типа в dword, а пихнули в ворд. Но тогда цикл типа 70ms
2.Цикл действительно полсекунды. Это легко проверяется.
3.Фотомонтаж
4.???

drvlas
13.11.2012, 13:47
1.Cчитали типа в dword, а пихнули в ворд. Но тогда цикл типа 70msЯ привел скриншот с работающей КДС, окно - Конфигурация ПЛК. Там переменные я не считаю и не преобразовую. Это в модуле статистики делает сам ПЛК. Тогда какие могут быть ошибки с типами?


2.Цикл действительно полсекунды. Это легко проверяется.Я смотрю логическим анализатором обмен между ПЛК и АЦП, а также дискретные выходы ПЛК. Видно, что время реакции - десятки миллисекунд (могу списать на реле, хотя удивлен). Но уж никак не полсекунды.


3.ФотомонтажВас тут подурачить, да.


4.???Вот и я говорю: ???

Кста, твоя библиотека бросает запросы с какой частотой? Сейчас рассмотрел на ЛА, команды идут с периодом около 30 мс. Скрин обмена прилагаю.
7375

Валенок
13.11.2012, 14:05
1.Ну тут только авторы могут объяснить механизм расчета. А вдруг у них база в мкс,а счетчик в word ?
2.Проверяем реальный цикл :
цикл:=time()-p;
p:=time();
3.))
4.Может какая путаница в таржетах ?

capzap
13.11.2012, 14:10
закоментируйте все блоки в основной программе, а потом включайте последовательно и соответственно следите за статистикой, если в программе дело время вырастет на каком нбудь фб, если в конфигурации, таргетах и т.п. значит на другом плк попробовать надо

ЗЫ как то странно давно уже 05 версией ни кто не пользуется

drvlas
13.11.2012, 14:13
4.Может какая путаница в таржетах ?Это и пугает.
У меня на диске С, столь навязчиво используемом авторами КДС, записаны и обычные Targets, и какие-то NEW Targets. Не помню, откуда их взял. И - простой вопрос: как же узнать, какие таргеты, какая версия?

А на вопрос о стандартной, задокументированной (как утверждает Андрей Николаев - вполне чудесно задокументированной) переменной PLC_CYCLE_TIME можно все же получить ответ от представителей ОВЕНа? Был бы очень признателен!

Валенок
13.11.2012, 14:13
А тут с флеш работаем ?

drvlas
13.11.2012, 14:16
Здравствуй, дорогой Спасатель! Ждал, ждал. Рад читать!


закоментируйте все блоки в основной программеДык, нет там цикла 500 мс! Это я вижу из записываемых логическим анализатором данных. Вопрос - почему ПЛК пишет, что у него такой дикий цикл?
И мы тут с Валенком подозреваем таргеты, да. Посмотри, плз, мой вопрос об определении версии таргет-файлов!


ЗЫ как то странно давно уже 05 версией ни кто не пользуетсяПЛК куплен у СВ-Альтеры 2-3 недели назад...

drvlas
13.11.2012, 14:19
А тут с флеш работаем ?
В этих цикла - нет. То есть, я исследую большую программу. в которой и ФЛЕШ юзается - но не сейчас.
Еще раз: цикла в полсекунды нет. То есть, я не пытаюсь понять, почему такой цикл. Я пытаюсь понять, что у меня со связью между железом и прогой. А это - таргеты.

capzap
13.11.2012, 14:24
находите и открываете файл hardware.cfg, в нем
;Version 2.11
;Recommended for versions: 2.14 для сотого, для 63
;version 2.0 и для 160
;Version 2.10
;Recommended for versions: 2.10такие строчки
Не мучайтесь прошейте плк, после обязательно удалите таргеты и поставте по новой, после должно пойти без непоняток

drvlas
13.11.2012, 14:41
находите и открываете файл hardware.cfgЯ же его смотрел! Но искал другое - модуль 200 :)

ОК, сделал ревизию тех 3-х таргет-файлов, что у меня есть. Один набор - 2.05, второй и третий - 2.10.


Не мучайтесь прошейте плк, после обязательно удалите таргеты и поставте по новой, после должно пойти без непонятокСтрашновато... Но не только это. Дело в том, что при смене тагрет-файла грохается конфигурация ПЛК. Получается, мне нужно:
- скачать последние таргет-файлы 2.11
- скачать прошивку ПЛК 2.14 и залить ее
- в проекте выбрать новый тагрет-файл - и согласиться с немецким предупреждением о том, что моя конфигурация накроется медным тазиком
- набрать ручками конфигурацию по-новой. Теперь у меня, по сути, будет новая версия проекта, совершенно не применимая к старым ПЛК. Так?

Ну, вроде так. Не напутал?
А как быть с ПЛК, которые уже уехали и работают... Ладно, если нужно - буду перепрошивать.

capzap
13.11.2012, 14:49
основательно подготовтесь, скрины сделайте конфигурации, под запись её задиктуйте стенографистке, экспорт проекта сделайте, чтоб при пропадании было с чего восстанавливать :)
Хотя если проект сохранен то почему конфигурация должна слететь, Вы же не меняете целевую платформу. Я когда открываю чужие проекты без разницы какой давности, у меня все на месте в конфигурации

Валенок
13.11.2012, 15:00
А эта циферка (5320) на что-то влияет ?
А про ручками перенабирать - это да. Так понял слейв длинный ?

drvlas
13.11.2012, 15:10
основательно подготовтесьМля... А я уже перепрошил ПЛК (хорошо сделана продедура, ничьо читать вообще не надо!) и запустил установку нвых таргетов.
Испугал! Ну вот, открыл старый проект, не меняя пока тагрет-файла - конфигурация видна. Ща ее действительно тщательно обфотографирую как порнозвезду, а то ведь действительно, чем черт не шутит...


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

Спасибо!

2 Валенок: Видишь ли, начались траблики с сообщением об неинициализированном модуле. Еще барахлил ПЛК. В результате я начал интересоваться работоспособностью текущего таргета. А сама цифирька - да ладно, что она мне. Так, хотелось понимать...
Но есть вторая надежда: говорили, что в каком-то модуле Конфигуратора можно бороться с батарейкой, чтобы она не мешала перестартовывать быстро. Тогда я не стал возиться (тупо выпаиваем батарейки), ибо ручками перенаббирать Конфигурацию действительно не в кайф. А теперь вернусь к вопросу.

drvlas
13.11.2012, 18:49
Ну-с, что имеем:

1) ПЛК перепрошил на 2.14, таргеты поставил 2.11. Почему-то переписывать Конфигурацию в проекте не пришлось (что не так, Валенок?)

2) Прога в ПЛК грузится, сообщение, с которого все начиналось, иногда появляется
7377
после чего ПЛК отваливается от КДС
А иногда не появляется. И ПЛК работает.

Все тот же вопрос не дает спать ночами: какого?

3) Модуль статистики, на который у меня были надежды (здесь мне советовали его использовать, чтобы увидеть Power Status и резко отрубиться при выключении питания), теперь вообще перестал работать. То есть, в Конфигурации есть этот модуль, но все его переменные не живые.
Прилагаю картинку, на которой видно и неработающий модуль статистики, и часть кода, в которой самостоятельно вычисляю время цикла по SysLibTime
7378
Как видим, реальное время цикла теперь - порядка 13 мс. Я говорю с прижимом теперь, потому что обмен по Модбасу, который раньше (прошивка 2.05) имел период 30 мс, теперь внезапно стал происходить с периодом 50 мс. "Хорошенькое дело, она меня покусала"... Новейшая прошивка похуже, или у меня руки не оттуда растут?

capzap
13.11.2012, 18:54
теперь попробуйте создать новый пустой проект, залейте его в плк и посмотрите заработает ли модуль статистики, если да, то можно попробовать импортировать предыдущий проект, если не пойдет, значит судьба Вам переписать конфиг с нуля :)

drvlas
13.11.2012, 19:08
теперь попробуйте создать новый пустой проект, залейте его в плк и посмотрите заработает ли модуль статистикиУх ты! Как раз престав валяться по земле и посыпать голову пепелом, я и решил сделать иименно так! Приятно, что я на правильном пути!

capzap
13.11.2012, 19:14
ну и, заработал?

drvlas
13.11.2012, 19:44
Да! И как это понимать? Почему мне теперь набирать ручками конфигруацию? Я-то наберу, но понять же хочицца!

Кста, счетчик длительности циклов в модуле статистики таки да не работает! Измеряю время цикла через библиотеку - на уровне 1 мс, а статистика говорит какие-то 3-4 единицы...
Пруф:

7379

ДОБАВЛЕНО: Работает, работает... Там получается, что ПЛК искусственно увеличивает цикл, т.к. я оставил время MinCycleLength = 1 ms. В общем-то, считается все не очень точно, но тут уже трудно проверить: теоретически должно быть так, что сумма длительности цикла + запас (Free Processor Resourse) равны MinCycleLength. Оно похоже, но равенство трудно отловить...
Да, это пустяки уже. Главное, что же за таинственная связь между сменой таргета и преренабором конфигурации...

ДОБАВЛЕНО (со смущенным видом): грохнул старый модуль статистики, заработал новый. Теперь видно, что со статистикой у нас все хорошо:
7380

Что ж, если неким таинственным образом и сообщение об ошибке рассосется, то можно будет радоваться новой прошивке ПЛК.

Николаев Андрей
14.11.2012, 08:42
Могу только предположить.
Я каждый раз перед записью нового проекта даю команду очистить все, чтобы все концы подчистить в программе и в ПЛК.

capzap
14.11.2012, 09:05
что же за таинственная связь между сменой таргета и преренабором конфигурации...

Не сменой таргета, а либо сменой целевой платформы, т.е. использовать проект в плк150 написанный для плк100, либо после изменения прошивки, может возникнуть ситуация, что определенные модули конфигурации изменили свое расположение (порядок следования) в области памяти и соответственно обращение к ним из старого таргета будет не возможно, поэтому конфигурация может "рассыпаться"

drvlas
14.11.2012, 13:41
Спасибо за ответы, уважаемые коллеги!

Что ж, замысловатое немецкое ругательство время от времени появляется. Исследовать это явление помогут 3 новых ПЛК, которые сегодня буду пробовать. Очень, очень, на мое ИМХО, было бы здорово увидеть некий связный рассказ для танкистов о том, например, что нужно последовательно проделать, чтобы

- в имеющемся старом проекте перейти с одного ПДК на другой (да те же 100 и 150 - братья по разуму)
или
- сменить прошивку ПЛК и привязать это к существующему проекту
или
- загружить от производителя новые таргеты и сделать правильную и безболезненную миграцию от старых - чтобы и поддержка вышедших из наших рук ПЛК не пострадала, и чтобы с новыми ПЛК развивать проект далее...

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

capzap
14.11.2012, 13:57
Спасибо за ответы, уважаемые коллеги!

Что ж, замысловатое немецкое ругательство время от времени появляется. Исследовать это явление помогут 3 новых ПЛК, которые сегодня буду пробовать. Очень, очень, на мое ИМХО, было бы здорово увидеть некий связный рассказ для танкистов о том, например, что нужно последовательно проделать, чтобы

- в имеющемся старом проекте перейти с одного ПДК на другой (да те же 100 и 150 - братья по разуму)
или
- сменить прошивку ПЛК и привязать это к существующему проекту
или
- загружить от производителя новые таргеты и сделать правильную и безболезненную миграцию от старых - чтобы и поддержка вышедших из наших рук ПЛК не пострадала, и чтобы с новыми ПЛК развивать проект далее...

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

такие рекомендации очень сложно писать, это как с USB у кого то ставятся драйверы, у кого то нет и ни чего не помогает ни новый ПК, ни выполнение других советов. Так и здесь, по какому пути пойти заранее не известно

drvlas
14.11.2012, 14:02
такие рекомендации очень сложно писатьБыло бы просто - сам бы написал :)

В том-то и дело, коллега! Смотри, мы здесь только говорим об этом - и то уже все непросто. А где-то в деревне киев сидит пацанчик и пробует сделать это - со всеми своими нюансами, на которые ты намекаешь! Разве это не повод для гуру, отличающих тагрет файл от таргет процессора, упорядочить свой опыт и выдать такое, что сгодится в 99% случаев?
Ладно, флужу. Извините.

Inna
15.11.2012, 15:25
Добрый день!
Не могу сделать так,чтобы в ответ на системное событие вызывался программный блок. Может, здесь есть какие-то тонкости? Мне бы примерчик какой-нибудь посмотреть.. Нет ни у кого?

capzap
15.11.2012, 17:39
Добрый день!
Не могу сделать так,чтобы в ответ на системное событие вызывался программный блок. Может, здесь есть какие-то тонкости? Мне бы примерчик какой-нибудь посмотреть.. Нет ни у кого?

http://www.owen.ru/forum/showpost.php?p=71457&postcount=36

Sergey1024
16.11.2012, 02:08
Доброго дня!
Хочу на контроллере реализовать slave-режим modbus rtu, использую функцию MB_RTU_RX(port, buf, ptr, frame): жду пока результат не будет RX_COMPL. При этом buf[ptr] - первый байт CRC (предпоследний в пакете).
Получается, мне надо вручную просканить приемный буфер на предмет номера функции, адреса и прочих параметров запроса?
Вопрос - это так и реализуется, или надо делать иначе?

Inna
16.11.2012, 12:26
http://www.owen.ru/forum/showpost.php?p=71457&postcount=36

Спасибо за видео. Но проблема осталась: когда я выполняю сброс, вызов программы по событию старт прекращается (((.

capzap
16.11.2012, 12:40
Спасибо за видео. Но проблема осталась: когда я выполняю сброс, вызов программы по событию старт прекращается (((.

А сама прога в плк остается после сброса?

Inna
16.11.2012, 12:59
Да, конечно. И событие по сбросу выполняется. А по старту — нет, сколько раз ни запускала.

capzap
16.11.2012, 13:03
Да, конечно. И событие по сбросу выполняется. А по старту — нет, сколько раз ни запускала.

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

Inna
16.11.2012, 13:13
Ну тогда из положения можно выйти следующим способом, по событию сброса устанавливаете ретайн переменную в определенное состояние и по запуску плк в нутри тела условия этой переменной запускаете инициализацию
Мне нужно отследить момент запуска программы. При этом не важно, был выполнен сброс, или просто нажата кнопка стоп. Как это сделать, если задача после сброса перестает выполняться. И почему это происходит?

capzap
16.11.2012, 13:16
так это еще проще, в библиотеке оскат можно найти блоки, где контролируется первый цикл программы именно на подобных примерах я и давай предыдущий совет

Inna
16.11.2012, 13:35
так это еще проще, в библиотеке оскат можно найти блоки, где контролируется первый цикл программы именно на подобных примерах я и давай предыдущий совет
В какой библиотеке?

capzap
16.11.2012, 13:50
FUNCTION_BLOCK PULSE_T
VAR_INPUT
IN : BOOL;
T1 : TIME;
T2 : TIME;
RST : BOOL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
init: BOOL;
last: TIME;
tx: TIME;
edge: BOOL;
END_VAR
*******************************************
tx := DWORD_TO_TIME(T_PLC_MS());
IF NOT init THEN
init := TRUE;
last := tx;
ELSIF RST THEN
(* asynchronous reset *)
Q := FALSE;
ELSIF IN AND NOT edge AND NOT Q THEN
(* a rising edge on in will reversre the output status, if new pulse is startet the start time is stored in last *)
last := tx;
Q := TRUE;
ELSIF NOT IN AND edge AND ((tx - last) > T1) THEN
(* a falling edge on IN will clear the output if in was high for more then T1 *)
Q := FALSE;
ELSIF (tx - last) >= T2 THEN
(* timeout for long pulse if second click did not occur or in stays high *)
Q := FALSE;
END_IF;

edge := IN;
вот один из блоков, здесь переменная init при включении плк будет в состоянии ФАЛЬШ, после первого цикла когда выполнится устовие с использованием этой переменной, она становится равной ИСТИНЕ и больше в программе не участвует, вернее тело условия. А в нутри этого тела можно вести статистику включений ну и т.д.


PS бибка по адресу http://oscat.de/downloadmanager.html, называется oscat_building_100.lib

Inna
16.11.2012, 14:04
В какой библиотеке?


вот один из блоков, здесь переменная init при включении плк будет в состоянии ФАЛЬШ, после первого цикла когда выполнится устовие с использованием этой переменной, она становится равной ИСТИНЕ и больше в программе не участвует, вернее тело условия. А в нутри этого тела можно вести статистику включений ну и т.д.


PS бибка по адресу http://oscat.de/downloadmanager.html, называется oscat_building_100.lib

Даже не знаю, как Вас и благодарить...))) Конечно, остается вопрос, почему кодесис работает, мягко говоря, не совсем корректно...

capzap
16.11.2012, 14:09
работает он одинаково, возможно на плк заряд батарейки как то влияет или взаимосвязь прошивки, таргета и мусора в КДС оставшегося от прошлых проектов или еще что то, у меня тоже иногда по стартовому событию не работает, ну это как бы не проблема :)

Inna
16.11.2012, 14:26
работает он одинаково, возможно на плк заряд батарейки как то влияет или взаимосвязь прошивки, таргета и мусора в КДС оставшегося от прошлых проектов или еще что то, у меня тоже иногда по стартовому событию не работает, ну это как бы не проблема :)

Страшно представить, что же тогда проблема... )))

capzap
16.11.2012, 14:42
проблема мне пока не когда сесть и написать библиотеку модбаса, чтоб опрос модулей был как у Валенка, менее 10мс

Inna
16.11.2012, 14:54
В какой библиотеке?


проблема мне пока не когда сесть и написать библиотеку модбаса, чтоб опрос модулей был как у Валенка, менее 10мс

Нехватка времени — это действительно проблема. Желаю удачи!

новичек23
19.11.2012, 17:25
соединяю ПЛК-100 и МУ110-6У.
Modbus(master)- Universal Modbus device- 6 Real output module.
подскажите пожалуйста, какие Register adress'а нужно ставить в этих 6 Real output module-ях.

Andrei Z
19.11.2012, 18:22
Вот мучаюсь вопросом, необходимо сделать регулирование температуры подачи из котельной в зависимости от температуры на улице. Выходной сигнал одно реле. Замыкает на большое горение.. разомкнут будет на малом горении.
Вот думаю между ПЛК 73 и ПР114, разница в цене в два раза. Подкупает то что на ПЛК можно видеть температуры на улице и на подаче.
Есть такие вопросы, к сожалению забыл. Возможно ли в дальнейшем ПЛК 73 сделать слейвом для СПК 207? И на данный момент можно ли на ПЛК 73 сделать небольшую архивацию, например среднесуточную температуру в течении недели. Чтобы оператор мог списывать её в журнал уже посчитаную за сутки. и можно было хотябы раз семь пролестать за предидущие сутки?

ASo
19.11.2012, 20:36
Забудьте про экономию каждой копейки на оборудовании. Это путь в никуда.
Все ваши хотелки можно сделать на ПЛК73.

capzap
20.11.2012, 07:07
соединяю ПЛК-100 и МУ110-6У.
Modbus(master)- Universal Modbus device- 6 Real output module.
подскажите пожалуйста, какие Register adress'а нужно ставить в этих 6 Real output module-ях.

http://www.owen.ru/uploads/rie_mu110-6u_888.pdf
страница 32, таблица В.4
первые четыре строчки таблицы

S.A.D.
20.11.2012, 13:27
Создал FB который преобразует токовый сигнал датчика давления в метры водяного столба. Объявил в проге, загнал туда данные. Но он не работает. Т.е. данные исходные (параметры датчика) там висят, но вычисления не производятся. Уже всю голову сломал. Почему так?

Yegor
21.11.2012, 10:58
Проект в студию!

kolyan
21.11.2012, 12:14
Создал FB который преобразует токовый сигнал датчика давления в метры водяного столба. Объявил в проге, загнал туда данные. Но он не работает. Т.е. данные исходные (параметры датчика) там висят, но вычисления не производятся. Уже всю голову сломал. Почему так?

Вообще-то, в библиотеке util.lib существует готовый ФБ для подобных целей LIN_TRAFO.
Зачем ещё что-то изобретать?

S.A.D.
21.11.2012, 16:27
Вообще-то, в библиотеке util.lib существует готовый ФБ для подобных целей LIN_TRAFO.
Зачем ещё что-то изобретать?

есть некоторые особенности(
проект (FB называется PRESS_TO_LEVEL):

petera
21.11.2012, 17:23
есть некоторые особенности(
проект (FB называется PRESS_TO_LEVEL):
У Вас только выполняется присваивание значений входным и выходной переменным FB. А сам FB PRESS_TO_LEVEL не вызывается

LEVEL_1_FB.A:=Acof_1; (*вычисление уровня в 1 РЧВ*)
LEVEL_1_FB.B:=Bcof_1;
LEVEL_1_FB.SIGNAL:=LEVEL_1_MAV;
LEVEL1:=LEVEL_1_FB.LEVEL;
А должно быть, например так

LEVEL_1_FB.A:=Acof_1; (*вычисление уровня в 1 РЧВ*)
LEVEL_1_FB.B:=Bcof_1;
LEVEL_1_FB.SIGNAL:=LEVEL_1_MAV;
LEVEL_1_FB(); (*вызов функционального блока*)
LEVEL1:=LEVEL_1_FB.LEVEL; (*он рассчитал уровень и вернул значение*)

S.A.D.
21.11.2012, 17:29
У Вас только выполняется присваивание значений входным и выходной переменным FB. А сам FB PRESS_TO_LEVEL не вызывается

А должно быть, например так

LEVEL_1_FB.A:=Acof_1; (*вычисление уровня в 1 РЧВ*)
LEVEL_1_FB.B:=Bcof_1;
LEVEL_1_FB.SIGNAL:=LEVEL_1_MAV;
LEVEL_1_FB(); (*вызов функционального блока*)
LEVEL1:=LEVEL_1_FB.LEVEL; (*он рассчитал уровень и вернул значение*)

точно)))) СПАСИБО БОЛЬШОЕ) я и думаю что явно какую-то мелочь упустил) спасибо за помощь)

petera
21.11.2012, 17:31
Или так

LEVEL_1_FB(
A:=Acof_1 ,
B:=Bcof_1 ,
SIGNAL:=LEVEL_1_MAV ,
PRESSURE=> ,
LEVEL=>LEVEL1 );

Andrei Z
22.11.2012, 20:06
Подскажите по такому вопросу, остановил свой выбор на ПЛК-73 для котельной, всётаки мой первый ПЛК и сразу на СПК 207 замахиватся не стану. Возможно ли по RS 232 подключить теплосчётчик ВКТ 7 к ПЛК 73, и в дальнейшем сделать 73 ведомым, а мастером СПК 207. Как в таком случае будет 73й опрашивать ВКТ, ведь он же станет слейвом.

rovki
22.11.2012, 20:10
В сети может быть только 1 мастер ,поэтому напрямую ПЛК(cлейв) не может опрашивать ни как .Только СПК(мастер) может опрашивать ВКТ и отправлять данные в ПЛК.А не избыточно ли и ПЛК и СПК?

Andrei Z
22.11.2012, 20:35
незнаю, вообще я загорелся СПК потому что очень наглядно, можно сразу нарисовать всю котельную со всеми температурами расходами и давлениями, глянул на схему и всё сразу видно что пороисходит.
20 тысяч конечно дороговато, да ещё если учесть что надо аналоговые входы 8 штук хотябы, дискретные выходы и входы... на всё это ещё 10 тысяч = 30
Плк 73 со всем набором этим.. (чуть меньше по входам) сразу 8 тысяч, причём есть всё таки индикация.
Поэтому решил знакомство в реале с ПЛК начать с 73, чтобы хотябы управлять котлом по погодозависмому графику. Ну и паралельно всякие мелочи там по подпитке, заполнения резервуаров, ГВС)))) боюсь что на этом остановится и до СПК не дойду тогда.. очень трудно денег просить

rovki
22.11.2012, 20:46
можно сразу нарисовать всю котельную со всеми температурами расходами и давлениями, глянул на схему и всё сразу видно что пороисходит.

Это уже результат ,а до этого не один год потеть :rolleyes: ,набираться опыта и знаний.;)Начните с простого и доведите до конца .А уж потом ....может и деньги появятся ,может пенсия или еще что(начальником станете):D .

Andrei Z
22.11.2012, 20:56
вот это точно...медленно но главное в гору иду)))) кстати ПР 110 уже согласие дали)) только не на ёлку а на трансорант новогодний)) на восемь дорожек тоже будет)))

YuriBel
23.11.2012, 13:13
...я загорелся СПК потому что очень наглядно, ... Поэтому решил знакомство в реале с ПЛК начать с 73...

Осмелюсь высказать крамольную мысль.
Такое ощущение, что вы при выборе варианта смотрите только на цену, причем оценивая ее с точки зрения сиюминутной, а это не совсем правильно по многим причинам. Оставляя в стороне различного рода вопросы применимости того или иного оборудования на объектах, подконтрольных Ростехнадзору, равно как и законность применения на этих объектах самописного программного обеспечения, я бы на вашем месте не выбрал бы ни ПЛК 207, ни ПЛК 73, и вот почему:
На мой взгляд, 73-й, как закнченное недорогое решение, хорош там, где вы применяете его на тиражируемых законченных изделиях и он полностью вас устраивает. Ну, например, вы делаете и продаете супер-пупер-стиральные машины или печки-духовки для домохозяек или еще что-то. Вы один раз разработали конструкцию, электрическую схему и пограмму, вам хватает входов, выходов, кнопок и строк на панели - тогдаэто то, что нужно. и здесь цена имеет значение. Вы экономите на каждом изделии.
Для вашего случая, где уже сейчас есть хотелки на будущее видеть всю котельную, не очень понятно зачем сейчас именно 73-й.
Равно как и не понятно, зачем потом 207-й. На мой взгляд, его предназначение такое-же, только у него, как бы сказать, масштаб немного другой.
Я бы для начала посмотрел на связку простенькой панели (например ИП 320) и контроллера из 100 или 110 семейства, причем, учитывая будущие хотелки, выбирал бы контроллер с как можно большим количеством интерфейсов для связи с внешним миром, например для 110 семейства при выборе между 32-м и 30-м предпочел бы 30-й, при условии, что входов и выходов мне хватает.
Наличие или отсутствие на борту контроллера аналоговых входов и выходов - тоже вопрос, который следует тщательно обдумать, возможно более правильным будет решение с внешними блоками.
Ну и с точки зрения надежности, ремонтопригодности, и необходимости иметь некий ЗИП тоже не забывайте.
А для осуществления дальнейших хотелок позже докупите дополнительные модули (или достанете их из ЗИПа) и другую панель, или СКАДА систему с ПК.
Деньги считать конечно нужно, но скупой платит дважды почтивсегда (исключения в большинстве своем составляют случаи, когда скупой платит трижды).

rovki
23.11.2012, 13:39
Так это скупой платит дважды,трижды ,а бедный платит малость.;) А в остальном -я за модульную систему в сложных проектах.:rolleyes:

Рамиль Ш
23.11.2012, 16:31
Помогите пожалуйста реализовать делитель на два в СFC.

rovki
23.11.2012, 16:46
Есть много вариантов ,смотря что на выходе нужно ,если миандр ,то нужен счетный триггер и все ,который можно собрать на D-триггере (выход через инвертор на вход D).А если нужны просто короткие импульсы ,на каждый второй входящий ,то поставьте счетчик с автосбросом (N=2)

Andrei Z
23.11.2012, 18:25
Осмелюсь высказать крамольную мысль.


Всё правильно пишите :) Всё это мои хотелки. с небольшой долей необходимости.
Почему СПК-207, потому что во первых красиво и интуитивно приятно глянуть оператору котельной. Котельная небольшая (нагрузка 1.5 Гкал/ч) Хотелось бы в дальнейшем сидя дома посмотреть как и что работает какие температуры и скачать архив.
Почему ПЛК 73,на СПК сразу денег такую сумму не выделят, и купив спк он ляжет мёртвым грузом, какоето время. ПЛК имеет весь спектр входов выходов как аналоговых так и дискретных, и в дальнейшем я могу его переставить например на баню управления двумя парилками, с автоматическим включением подогрева например в пять утра.
На данном этапе хотелось бы управлять котлом дискретно (больше меньше) по погодозависмому графику. Тоесть измерять температуру в подаче и наружного воздуха. Затем по формуле вычислять температру задания и сравнивать с Т подачи, если меньше сигнал замыкание одного контакта и всё (большое горение)
С ПЛК 73 я могу сделать уже сейчас такое, :) я давно уже мучаюсь выбором, ведь я в реальном виде видел тока ПЛК 100 на новом построенном мелькабинате у нас (другая контора) Поэтому и хотел с чегонибудь начать, а там видно будет, если смысл визуализации и всей СКАДЫ системы. Другой ПЛК тот же 100 у него нет индикации, и аналоговых входов. А цена выше чем у ПЛК 73. В ЖКХ научился копейки считать.. а хотелки есть, по доброму завидую кто такие ситемы автоматики делает:)
Извините за разговор не в тему, замолкаю

Рамиль Ш
23.11.2012, 19:17
Есть много вариантов ,смотря что на выходе нужно ,если миандр ,то нужен счетный триггер и все ,который можно собрать на D-триггере (выход через инвертор на вход D).А если нужны просто короткие импульсы ,на каждый второй входящий ,то поставьте счетчик с автосбросом (N=2)

Суть задачи в том, чтобы от одной кнопки можно было бы и включать, и отключать какую-то функцию в станке. Это вызвано нехваткой входов в ПЛК. Приходится мудрить.

rovki
23.11.2012, 19:29
Самое простое -кнопка с фиксацией .Используйте счетчик инкрементальный и анализируйте младший разряд (EXTRACT)

YuriBel
23.11.2012, 19:48
Извините за разговор не в тему, замолкаю

Ну во первых ничего страшного, что не в тему, я думаю, что можно сказать "не совсем в тему". Думаю, что нас из этой ветки вряд-ли попрут за наши повествования.
Во-вторых, молодец, что не обижаетесь, я может чуть резковато пишу.
Я очень хочу донести до вас следующую мысль - стоимость владения отличается от стоимости покупки, причем иногда разительно.
Допустим, увас система на 73, а у меня на 110+320+модули. Допустим мы одинаково криворукие (не в обиду, естественно), и одновременно спалили по аналоговому входу, и свободных входов ни увас ни у меня нет. Я иду покупать модуль за 3тыр, вы идете за новым контроллером.
Потом например мы от великого усердия при настройках задолбали до смерти какую-нибудь кнопочку. Вы на 73, я на 320. Я иду за новой панелью за 3 тыр., вы опять за новым ПЛК. И уже у нас вложения практически одинаковые. Если дальше что-то повторяется, то я в выигрыше. не говоря уже о имеющихся у меня в запасе портах для связи с внешним миром для моих хотелок, продемонстрировав которые в ограниченном функционале на бесплатных средствах, я получу повод просить еще копеечку.
Если вы верите в абсолютную надежность, то я - не верю, ибо за последние год-полтора при монтаже и вводе в эксплуатацию довольно дорогого оборудования (импортного, укомплектованного брэндовыми вещами) на стадии детских болезней (в первые несколько месяцев эксплуатации) вышло из сторя 3 панели. без каких-либо видимых причин.
И еще, практически везде, за небольшим исклюсением, контроллеры и панели применены раздельные, а не совмещенные. Из совмещенных, за мою историю, погиб один из имеющихся четырех, тоже без видимых причин.
Так что ничего абсолютно надежного нет.
А уж если соберетесь делать на 73 - внимательно прочитайте все темы, где люди по нему задают вопросы. Там есть, что почитать и о чем подумать.

Рамиль Ш
23.11.2012, 20:03
Самое простое -кнопка с фиксацией .Используйте счетчик инкрементальный и анализируйте младший разряд (EXTRACT)
Кнопки уже стоят. Они не фиксируются. А счетчик наверное из библиотеки достать? А еще я не знаю язык, на котором назначаются входы и выходы на счетчиках.Столько литературы перерыл. Не могу найти.

rovki
23.11.2012, 20:10
http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf .Счетчик CTU,вход CU,выход CV на вход ФБ EXТRACT ,на входе N-0 (INT).

Andrei Z
23.11.2012, 21:08
А уж если соберетесь делать на 73 - внимательно прочитайте все темы, где люди по нему задают вопросы. Там есть, что почитать и о чем подумать.

Ну тоже самое можно написать и о СПК в таком случае, только он стоит 20 штук, а вых-вх конечно отдельно можно взять за 3 тыщи.
Про Плк 73 встречал и жалобы тут, только признатся когда много всего читаешь изучаешь, инфа как то не откладывается, и если брать связку ПЛК + панель + ввод, то вслучае чего я могу два ПЛК 73 взять, как видите палка о двух концах. А критики я особо не увидел, и вообще однозначного мнения я своего не имею по этому поводу, поэтому и нахожусь в "творческих муках"
Каждый отталкивается только от своего опыта, на ютубе видел про ПЛК 73 ролик.. довльные люди

S.A.D.
03.12.2012, 16:10
Помогите пожалуйста советом. Нужно вести время наработки двигателей. Может есть какой-то ФБ в какой-то библиотеке под это дело? И еще вопрос. Как сделать так, чтоб эти мото-часы не стирались при перезаливке проекта? Нужно в какой-то файл писать, правильно я понимаю? А то энергонезависимая память стирается при перезаливке.

kgsh82
04.12.2012, 06:01
Помогите пожалуйста советом. Нужно вести время наработки двигателей. Может есть какой-то ФБ в какой-то библиотеке под это дело? И еще вопрос. Как сделать так, чтоб эти мото-часы не стирались при перезаливке проекта? Нужно в какой-то файл писать, правильно я понимаю? А то энергонезависимая память стирается при перезаливке.

Примеров для подсчета моточасов - уйма на форуме, поиск должен дать результат. По переменным - почитайте в справке по кдс про retain-переменные

SBER
04.12.2012, 10:53
Помогите пожалуйста советом.

VAR_GLOBAL RETAIN
T1_WORK: BOOL;
END_VAR


tm1(PT:=T#60s);
IF T1_Q=1 AND tm1.IN=0 THEN tm1.IN:=1;
END_IF;
IF tm1.Q=1 THEN T1_WORK:=T1_WORK+1; tm1.IN:=0;
END_IF;

Переменная T1_WORK - наработка в минутах, делите на 60 получаете в часах.

drvlas
06.12.2012, 02:14
Кто может подсказать, как работать с кириллицей в КДС?

Не раз поднимался вопрос - и полного ответа нет. Ведь нужно и это:

- чтобы русифицировалось меню. Это и не главное, но хотя оно у меня русифицировано, однако же при наведении на некоторые объекты показывает козябрики. Пример: подсветка иконок, расположенных под (русифицированным) pull-down меню.

и это:
- чтобы можно было не только набрать комментарии кириллицей, но потом эту кириллицу копипастить в какой-то редактор - и увидеть там. Пока у меня не получается это сделать, перебираю шрифты, все без толку.

Спасибо!

Валенок
06.12.2012, 09:33
кдс 2.3.9.22
При установке сначала спросил про язык - но там был приемлимым только аглицкий. В процессе переспросил снова про язык : аглицкий или русский ?. И все нормально. В ворд и блокнот - копипастицца всё.

drvlas
06.12.2012, 10:42
Спасибо за ответ!


кдс 2.3.9.22кдс 2.3.9.20
Думаю, это не играет роли?

Так что выходит - пронятного простым смертным пути нет? Нужно снести КДС, установить по-новой, ответить "да", "рус" - и? Радоваться подарку богов, если вдруг получится. Или увидеть, что ничего не изменилось?
А без танца с бубном можно?

Yegor
06.12.2012, 10:54
чтобы можно было не только набрать комментарии кириллицей, но потом эту кириллицу копипастить в какой-то редактор - и увидеть тамРазработчики кодесиса проигнорировали локаль системы и просто-напросто зашили код немецкой страницы. Декодировать крякозяблики можно, например, здесь — http://www.artlebedev.ru/tools/decoder/, а оттуда скопировать куда требуется.

drvlas
06.12.2012, 11:06
Разработчики кодесиса проигнорировали локаль системы и просто-напросто зашили код немецкой страницыУважаемому товарищу Валенку они поставили какую-то блатную версию? У него же копипастится...
Кста, снес свою20-ю, поставил ажно 36-ю. Те же яйца :(


Декодировать крякозяблики можно, например, здесьВот за это - огромное спасибо! Все же выход. Более того, он будет полезен и в других случаях (старые тексты под ДОС или еще там что). Так что уже захомячил ссылку.

Andrei Z
06.12.2012, 11:08
Так что выходит - пронятного простым смертным пути нет? Нужно снести КДС, установить по-новой, ответить "да", "рус" - и? Радоваться подарку богов, если вдруг получится. Или увидеть, что ничего не изменилось?
А без танца с бубном можно?

Нравится мне стиль Вашего общения))))):D побольше спрашивайте, и прикольно и я на ответах чуточку учусь

petera
06.12.2012, 13:06
Кто может подсказать, как работать с кириллицей в КДС?

Не раз поднимался вопрос - и полного ответа нет. Ведь нужно и это:

- чтобы русифицировалось меню. Это и не главное, но хотя оно у меня русифицировано, однако же при наведении на некоторые объекты показывает козябрики. Пример: подсветка иконок, расположенных под (русифицированным) pull-down меню.

и это:
- чтобы можно было не только набрать комментарии кириллицей, но потом эту кириллицу копипастить в какой-то редактор - и увидеть там. Пока у меня не получается это сделать, перебираю шрифты, все без толку.

Спасибо!
По личному опыту знаю, что это проблема возникает не только с Кодесисом но и с другими программами. Это разработчики программ виноваты, как правильно сказал Yegor
Разработчики кодесиса проигнорировали локаль системы и просто-напросто зашили код немецкой страницы. А могут вобще код страны не указать. В этом случае Windows для таких шрифтов берет почему-то "CE" и будут крякозябры.
Я добавляю в реестре Windows в ветке "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" для системных шрифтов явное указание кодовой страницы 204. Т.е
"Arial,0"="Arial,204"
"MS Sans Serif,0"="MS Sans Serif,204" и т.д
У меня эта ветка выглядит так

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"Arial CE,238"="Arial,238"
"Arial CYR,204"="Arial,204"
"Arial Greek,161"="Arial,161"
"Arial TUR,162"="Arial,162"
"Courier New CE,238"="Courier New,238"
"Courier New CYR,204"="Courier New,204"
"Courier New Greek,161"="Courier New,161"
"Courier New TUR,162"="Courier New,162"
"Helv"="MS Sans Serif"
"Helvetica"="Arial"
"MS Shell Dlg 2"="Tahoma"
"Times"="Times New Roman"
"Times New Roman CE,238"="Times New Roman,238"
"Times New Roman CYR,204"="Times New Roman,204"
"Times New Roman Greek,161"="Times New Roman,161"
"Times New Roman TUR,162"="Times New Roman,162"
"Tms Rmn"="MS Serif"
"Arial Baltic,186"="Arial,186"
"Courier New Baltic,186"="Courier New,186"
"Times New Roman Baltic,186"="Times New Roman,186"
"Arial,0"="Arial,204"
"Times New Roman,0"="Times New Roman,204"
"System,0"="System,204"
"Fixedsys,0"="Fixedsys,204"
"Small Fonts,0"="Small Fonts,204"
"MS Serif,0"="MS Serif,204"
"MS Sans Serif,0"="MS Sans Serif,204"
"Courier,0"="Courier New,204"
"Arial Cyr,0"="Arial,204"
"Courier New Cyr,0"="Courier New,204"
"Times New Roman Cyr,0"="Times New Roman,204"
"Helv,0"="MS Sans Serif,204"
"Tms Rmn,0"="MS Serif,204"
"MS Shell Dlg"="Microsoft Sans Serif"
"Microsoft Sans Serif,0"="Microsoft Sans Serif,204"
"Tahoma,0"="Tahoma,204"
"Verdana,0"="Verdana,204"
И еще в реестре полезно исправить

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
"1253"="c_1251.nls"
"1254"="c_1251.nls"
"1255"="c_1251.nls"
Может по этому в кодесис (2.3.9.35 Rus) у меня тоже проблем нет как и у товарища Валенка
Уважаемому товарищу Валенку они поставили какую-то блатную версию? У него же копипастится...

drvlas
06.12.2012, 13:21
Уже хотел рвануть к реестру, но на всякий случай проверил, что же теперь (в версии 2.3.9.36) всплывает при наведении на пиктограммы. И, о чюдо! - вижу нормальные русские слова "Найти", "Найти далее" и т.д.
Вот и думай, что изменилось после снесения версии 20 или 22 и установки версии 36...

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

Спасибо за ответ, понятный даже танкисту!

petera
06.12.2012, 13:21
Забыл сказать, что после правки реестра новые значения начинают действовать после перезагрузки системы:)
Если, drvlas, Вы все же рванете к реестру, то скорей всего копипаст заработает.

drvlas
06.12.2012, 13:55
Рванул...


Я добавляю в реестре Windows в ветке "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" А почему именно в ней? имеет ли значение, что у меня семерка? Есть ли иные FontSubstitutes?


И еще в реестре полезно исправить

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Nls\CodePage]
...
"1252"="c_1251.nls"

Здесь тоже вопрос:
имеет ли значение версия винды.
И второй вопрос:
"1252"="c_1251.nls"
означает, что нужно выйти на меню и выбрать "изменить"?
(Кстати, именно перевод с 1252 на 1251 и был выполнен в студии Лебедева, у них там есть фича, после трансляции написать, что же именно было выполнено).

petera
06.12.2012, 14:31
Рванул...

А почему именно в ней? имеет ли значение, что у меня семерка? Есть ли иные FontSubstitutes?

Здесь тоже вопрос:
имеет ли значение версия винды.
И второй вопрос:
"1252"="c_1251.nls"
означает, что нужно выйти на меню и выбрать "изменить"?
(Кстати, именно перевод с 1252 на 1251 и был выполнен в студии Лебедева, у них там есть фича, после трансляции написать, что же именно было выполнено).
Я работаю в XP, но для и 7 будет справдливым, я думаю. Рееестр и там тоже есть, и не будут МелкоМягкие изобретать его новым для 7.
По первому вопросу
Ветка "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" одна и больше таких нет.
Она является наследием от предыдущих версий Windows, начиная с версии 3.10, где не было реестра, а настройки задавались в файле win.ini и system.ini.
В этой ветке реестра описано соответствие шрифтов используемых в программах и интерфейсе windows шрифтам установленным в системе.
Например у Вас не установлен шрифт с названием "Helvetica", а какой-то программе приспичит использовать именно это шрифт, а его нет. В этом случае запись "Helvetica"="Arial" заставит программу использовать шрифт "Arial", при этом она будет уверенна, что использует именно "Helvetica".
Для внесения изменений в реестр нужно выполнить "Пуск-Выполнить-regedit-ОК" и работать в редакторе реестра.
Но если Вы не знакомы с реестром и с его редактором, то лучше не стоит экспериментировать, а просто скопируйте весь код в блокнот, включая Windows Registry Editor Version 5.00, и сохраните с любым именем и расширением .reg если дважды щелкнуть на этом файле в проводнике, то информация из него добавиться в реестр сама (если Вы будете не против этого:) ).

drvlas
06.12.2012, 14:44
Ветка "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" одна и больше таких нет.
...
Но если Вы не знакомы с реестром и с его редакторомШикарно! Действительно удобно. Так и сделал.
Но, не поверите, ничего по копипейсту не изменилось :(

petera
06.12.2012, 14:55
Шикарно! Действительно удобно. Так и сделал.
Но, не поверите, ничего по копипейсту не изменилось :(
А перезагрузить Windows не забыли?