Страница 1 из 6 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 54

Тема: SysLibCom

  1. #1

    По умолчанию SysLibCom

    Существует библиотека SysLibCom для CodeSys 3.5 ?

    Если да, то где ее скачать?

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Цитата Сообщение от ribamuka Посмотреть сообщение
    Существует библиотека SysLibCom для CodeSys 3.5 ?

    Если да, то где ее скачать?
    В состав CODESYS 3.5 входит несколько библиотек для работы с COM-портом - в частности, SysCom (аналог SysLibCom c приблизительно тем же набором функций/ФБ) и CAA SerialCom. Скачивать ничего не надо, просто добавьте их в Менеджере библиотек.

    Пример работы с CAA SerialCom приведен в документе СПК. Реализация нестандартных протоколов:
    http://ftp.owen.ru/index.html/CoDeSy...cols_v.1.0.pdf

  3. #3

    По умолчанию

    Спасибо за подсказку

  4. #4

    По умолчанию

    Здравствуйте.
    А подскажите, как работать с дескриптором открываемого порта на языке ST? (библиотека CAA SerialCom).

    При открытии порта мы должны получить дескриптор:
    myComOpen(usiListLength := SIZEOF(arrParams)/SIZEOF(COM.PARAMETER), pParameterList := ADR(arrParams));

    А при отправке в порт дескриптор использовать:
    myComWrite(xExecute := TRUE, udiTimeOut := 1000, hCom := myComOpen.hCom, pBuffer := ADR(arrMassive), szSize := 5);

    Правильно ли я его использую? В порт ничего не пишется.
    Что я делаю не так?

    UP: Почему этот hCom всегда равен 0? Пробовал разные порты.
    Скрин:
    myHandle.png
    Последний раз редактировалось ВладОвен; 11.08.2022 в 17:45.

  5. #5

  6. #6

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Потому что вы не дожидаетесь открытия порта (myComOpen.xDone).
    Хм... Странно.

    Скрытый текст:

    Декларация:
    Код:
    PROGRAM PLC_PRG
    VAR
        xOpen: BOOL := FALSE;
        myHandle : COM.CAA.HANDLE;
        myError : ERROR;
        xError: BOOL := FALSE;
        xSucces: BOOL := FALSE;
        myComOpen : COM.Open;
        arrParams : ARRAY [1..7] OF COM.PARAMETER := [    
        (udiParameterId := COM.CAA_Parameter_Constants.udiPort,             udiValue := 1),
       (udiParameterId := COM.CAA_Parameter_Constants.udiBaudrate,         udiValue := 115200),
       (udiParameterId := COM.CAA_Parameter_Constants.udiParity,           udiValue := 2), // no parity
       (udiParameterId := COM.CAA_Parameter_Constants.udiStopBits,         udiValue := 0), // 1 stop
       (udiParameterId := COM.CAA_Parameter_Constants.udiTimeout,          udiValue := 0),
       (udiParameterId := COM.CAA_Parameter_Constants.udiByteSize,         udiValue := 8),
       (udiParameterId := COM.CAA_Parameter_Constants.udiBinary,           udiValue := 1)  
        ];
    END_VAR
    Реализация:
    Код:
    IF xOpen THEN    
        xOpen := FALSE;
        myComOpen(usiListLength := SIZEOF(arrParams)/SIZEOF(COM.PARAMETER), pParameterList := ADR(arrParams));
    END_IF
    
    myHandle := myComOpen.hCom;
    xError := myComOpen.xError;
    myError := myComopen.eError;
    xSucces := myComOpen.xDone;
    Я нажимаю на клавишу на экране визуализации, которая устанавливает флаг xOpen.
    А далее долго-долго наблюдаю за 4-я параметрами. И они не меняются...
    Скрин:

    Жду с моря погоды.png

    Но ничего так и не происходит...
    Пробовал перебирать порты - результата нет.
    Может есть проект на ST для образца?

  7. #7

  8. #8

    По умолчанию

    В общем тестировал библиотеку CAA SerialCom, перебирал порты, курил доки Овена.
    Попытка открыть порт приводит к состоянию флагов:

    Зря потраченное время.png

    Что мы видим в этом окне:
    xDone - никогда не устанавливается,
    xError - никогда не устанавливается,
    xBusy - всегда установлен.

    Какой мы вывод делаем:
    Открытие порта не заканчивается
    Ошибок не возникает
    Процесс идет бесконечно долго.
    Последний раз редактировалось ВладОвен; 12.08.2022 в 11:59.

  9. #9
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Я могу порекомендовать только внимательнее "курить доки".

    Код:
    IF xOpen THEN    
        xOpen := FALSE;
        myComOpen(usiListLength := SIZEOF(arrParams)/SIZEOF(COM.PARAMETER), pParameterList := ADR(arrParams));
    END_IF
    У вас xOpen взводится на один цикл и myComOpen тоже вызывается только один цикл.
    За один цикл порт не успевает открыться, и блок зависает в xBusy.

    Обычно делают так:

    Код:
    myComOpen(xExecute := xOpen, usiListLength := SIZEOF(arrParams)/SIZEOF(COM.PARAMETER), pParameterList := ADR(arrParams));
    
    IF myComOpen.xDone THEN
        myHandle := myComOpen.hCom;
    END_IF
    Или можно использовать USR_COM_CONTROL из документа - это обертка над COM.Open / COM.Close, которая будет существенно более проста в использовании для начинающих программистов, чем эти блоки.

  10. #10

    По умолчанию

    Спасибо за помощь.
    Но:
    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Обычно делают так:
    Это далеко не обычно!

    Грёбаные циклы, которых не хватает за один проход! Кто-бы мог подумать!

    Это не объясняется в документации к библиотеке.
    Последний раз редактировалось ВладОвен; 12.08.2022 в 12:11.

Страница 1 из 6 123 ... ПоследняяПоследняя

Похожие темы

  1. SysLibCom
    от Антон12345 в разделе ПЛК1хх
    Ответов: 36
    Последнее сообщение: 21.11.2013, 15:44
  2. Syslibcom
    от Назаров Александр в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 28.04.2010, 17:34
  3. SysLibCom
    от demon в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 20.03.2009, 13:08
  4. ПЛК 150 и SysLibCom.lib.
    от Анатолий в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 13.12.2008, 13:48
  5. SysLibCom.lib
    от Nekit в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 05.05.2007, 11:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •