PDA

Просмотр полной версии : Использование старых библиотек



Boris3B
16.02.2011, 17:35
Здравствуйте!

В наличии PLC-304. Пытаюсь разобраться со средой программирования CoDeSys V3.4. Patch 2. Есть необходимость перенести старый код (CoDeSys V2.3.8.1.).
В старой программе для работы с 232 и 485 портами использовал библиотеку UNM.lib. Среди новых библиотек её не оказалось. Что ж. Подключил старую, переконвертировав ее в новый формат. Инсталлировал в CoDeSys V3.4. Создал новый проект под ПЛК-304 (ST). Подключил к проекту данную библиотеку. Откомпилировал проект в режиме эмуляции - ОК. Снимаю флажок эмуляции и пытаюсь залить проект в контроллер - 2 ошибки и обе на имена функций из этой конвертированной UNM.lib.
[FATAL ERROR] Unresolved reference: 'LOCKDEVICE'
[FATAL ERROR] Unresolved reference: 'RELEASEDEVICE'

В чем может быть проблема?

Евгений Сергеевич
17.02.2011, 09:56
Присылайте проект и библиотеку (под 2.3 и под 3.4). Будем смотреть.

Boris3B
17.02.2011, 10:36
Не могу найти где хранится конвертированная UNM.lib. Подскажите.
Вот скрин с отображением проекта, библиотеки, её функций и сообщения об ошибке.

Все. Нашел. Выслал.

Boris3B
17.02.2011, 13:09
Что-то я заждался ответа.

Евгений Сергеевич
17.02.2011, 13:22
получили, теперь будем смотреть.

Малышев Олег
17.02.2011, 13:40
В настоящий момент UNM на ПЛК 304 не поддержана. Используйте SysCom.

Boris3B
17.02.2011, 14:02
Меня такой ответ в корне не устраивает!

Что значит не поддержана. Поддержка конвертации заявлена. Она же конвертирована. Хотите сказать, что конвертор глючит так, что 6-7 функций не смог преобразовать? Тот проект, где я использую unm одних тока мною созданных функций содержит порядка 30 шт. Сами понимаете, что при программировании ПЛК на СТ использование функций из unm расползлось по всему проекту, который создавался 6-8 месяцев и что теперь? Опять врубаться в каждую строчку проекта... в общем выход, но не в моем случае. Меня срок очень душит.

Вы уж напрягитесь пожалуйста.
Сразу скажу, что я еще использовал библиотеки SysLibFile b SysLibTime.
Их тоже бесполезно конвертировать?

Boris3B
17.02.2011, 14:20
Хотя если задуматься, то как я буду посредством unm настраивать параметры порта?
Вот ведь незадача! На CoDeSys 2 я уделался пытаясь работать с SysLibCom. Да не только я. Полазить по форуму - трындец, а не библиотека. Похоже, что большинство уходило на использование unm. Сейчас в ветке CoDeSys 3 всего 11 тем, среди которых есть про 485. И опять вижу те же проблемы. И опять тема так и не закрыта.
Сделайте уже пожалуйста небольшой пример на ST под CoDeSys 3 как открыть/настроить/прочитать/записать данные в/из порты 232 и 485. Желательно использование обеих портов в одном проекте.

Boris3B
17.02.2011, 15:33
Опять зашифровались.
Дайте хоть описание библиотеки SysCom хоть на каком-нибудь языке.

Евгений Сергеевич
17.02.2011, 15:47
данная библиотека использует внутреннее ПО контроллера (его прошивку), поэтому она и не работает на 304, т.к. на нем не поддержаны эти функции на уровне прошивки.

А по поводу обоих портов если вы имеете один физический порт 232/485 то режим выбирается переключателем.

Евгений Сергеевич
17.02.2011, 15:58
в 3м CDS есть два вида библиотек: новые и старые. Старые точно такие же , описание на новый SysCom во вложение, правда на английском.

описание идет вместе с самой средой и лежит в папке C:\Program Files\3S CoDeSys\CoDeSys\Documentation\

Boris3B
17.02.2011, 16:23
Спасибо. Читаю.

Появилась еще одна проблема. Написал небольшой кусок кода. Компилирую его - 0 ошибок, 0 сообщений. Пытаюсь сделать логин к контроллеру - долго-долго (1-2 мин.) думает, потом выдает "В экземпляре объекта не задана ссылка на объект".
Это что значит?

Евгений Сергеевич
17.02.2011, 16:37
выкладывайте ваш проект)) будем смотреть

Boris3B
17.02.2011, 17:00
Проект в прикрепленном архиве.

Евгений Сергеевич
21.02.2011, 10:19
К сожалению проект пустой, там нет кода. Давайте попробуем еще раз.

Boris3B
24.02.2011, 12:42
У меня CoDeSys Gateway SysTray(stopped) - и я ни как не могу его запустить. Видимо из-за этого мои глюки. То не логинится, то во время работы разрывается связь, то я не могу остановить работу контроллера и разорвать с ним соединение пока не убью CoDeSys как процесс.
Полный хаос.

Не подскажете какие порты используются для работы CoDeSys Gateway и как проверить - кем они заняты?

Евгений Сергеевич
28.02.2011, 10:43
В вашем проекте есть ряд недоработок:

1) опущена структура ComSettingsEx при открытие порта, а в ней есть важный параметр byByteSize, который определяет биты данных (формат посылки)

2)Res - это результат выполнения операции (0- все прошло без ошибок, иначе код ошибки)

3) Функция SysComOpen2 возвращает ссылку на ком порт (Com Handle), именно то, что вам и нужно при последующей работе с портом, и нужно брать это значение.

Boris3B
28.02.2011, 16:46
Евгений Сергеевич! Вы написали "2)Res - это результат выполнения операции (0- все прошло без ошибок, иначе код ошибки)".
В инструкции указано, что значение 0xFFFFFFFF - вот это ошибка, а не 0.

Кто ошибается?

Евгений Сергеевич
28.02.2011, 17:06
pResult типа "POINTER TO RTS_IEC_RESULT" имеет описание "Error code, see Document „Runtime Error Codes“."(Код ошибки, смотрите документ "Коды ошибок во время выполнения программы")

И там в описание видим 0 - No error (нет ошибок)

то о чем вы говорите это видно вот это:
"The return value of type RTS_IEC_HANDLE gives a handle for the port. This handle can be passed to other library functions. If the port cannot be opened, 0xFFFFFFFF will be returned as handle."
(возвращаемое значение типа RTS_IEC_HANDLE выдает ссылку (Handle) на порт. Этот дескриптор может быть передан другим функциям библиотеки. Если порт не может быть открыт, 0xFFFFFFFF будет возвращено как ссылка.)

Если я ничего не путаю, то в ситуации, когда порт кем-то занят, и мы пытаемся его открыть еще раз, то ошибка открытия (Res) равна нулю, а Handle равен 0xFFFFFFFF. А вот если порт не исправен (сгорел например), то значение Res будет отлично от нуля, а вот что будет присвоено в Handle я затрудняюсь ответить так с ходу, это смотреть надо на приборе с мертвым портом.
Если порт исправен и никем не занят, то при открытие мы получим ссылку на порт (Handle) отличный как от 0 так и от 0xFFFFFFFF, и Res=0.

Причем Handle = SysComOpen2 (..., adr(Res));