Страница 4 из 6 ПерваяПервая ... 23456 ПоследняяПоследняя
Показано с 31 по 40 из 52

Тема: Вопрос по биб-ке ComService

  1. #31

    По умолчанию

    Видать руководство к SysLibCom просто не отражает объективную реальность.

  2. #32
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,317

    По умолчанию

    У системщиков с dint часто -1 это ошибка, 0 - норма. А вот в логике 0 false, <> 0 true. Наверно где-то тут случился октоберфест
    Как-то так:
    if (! bool_to_dint(comsetting(..)){проблема с установкой}
    Последний раз редактировалось Валенок; 25.02.2014 в 23:03.

  3. #33
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Сегодня вновь столкнулся с этой SysLibCom. Так получилось, что раньше я работал напрямую только с 485 портом и до сегодняшнего дня не знал, насколько всё плохо на самом деле. Если в двух словах, то документация — враньё.

    Началось с того, что я попробовал что-нибудь записать в 232 порт (COM1, порядковый 1). SysComWrite никак не работала, а результат SysComSetSettings я никак не мог понять (да, я знаю про NOT). Оказывается...

    SysLibCom на контроллерах Овен вопреки документации вообще не работает с дескрипторами! Везде только номера портов!

    Например, SysComOpen возвращает не дескриптор, а всего лишь успех/неудачу. В этом легко убедиться, если попробовать открыть сразу два разных порта — там и там функция вернёт ноль, но дескрипторы двух разных объектов не могут быть одинаковыми. На то они и дескрипторы. В общем, ноль — порт открыт, 16#FFFFFFFF — порт занят (очень похоже на дескриптор, но это не так). То есть по факту это булевая функция. Пользоваться ею надо так: portOpened := SysComOpen(COM1) = 0.

    Дальше жирный вывод подтверждается тем, что все остальные функции не работают с «дескриптором», который возвращает SysComOpen. Лишь по случайности они работают для RS-485-1, т.к. он нулевой по порядку, и лже-дескриптор от SysComOpen тоже нулевой. Из-за этого совпадения я заблуждался с 2011 года.

    Вот так нужно открывать порты и работать с ними в контроллерах Овен:
    Код:
    PROGRAM PLC_PRG
    VAR CONSTANT
        port: COMSETTINGS := (Port := COM1, dwBaudRate := 38400);
    END_VAR
    VAR
        portReady: BOOL;
        buf: ARRAY [0..512] OF BYTE;
    END_VAR
    
    
    IF NOT portReady THEN
        (* Сразу открываем и настраиваем порт *)
        portReady := SysComOpen(port.Port) = 0 = SysComSetSettings(port.Port, ADR(port));
    ELSE
        (* Работаем с открытым портом *)
        SysComRead(port.Port, ADR(buf), 1000, 0);
    END_IF
    А вот так надо открывать порты и работать с ними, если руководствоваться документацией (аккуратно, нерабочий код!):
    Код:
    PROGRAM PLC_PRG
    VAR CONSTANT
        port: COMSETTINGS := (Port := COM1, dwBaudRate := 1200);
        handle: DWORD;
    END_VAR
    VAR
        portReady: BOOL;
        buf: ARRAY [0..512] OF BYTE;
    END_VAR
    
    
    IF NOT portReady THEN
        (* Сначала открываем порт и получаем дескриптор *)
        handle := SysComOpen(port.Port);
        (* Теперь настраиваем порт через дескриптор; не забываем про странный NOT *)
        portReady := handle <> INVALID_HANDLE AND NOT SysComSetSettings(handle, ADR(port));
    ELSE
        (* Работаем с открытым портом — тоже через дескриптор *)
        SysComRead(handle, ADR(buf), 1000, 0);
    END_IF
    Работа через дескрипторы правильно реализована в SysLibFile — можете посмотреть примеры с ней, функции там похожие.

    Вот такая подстава, господа. И напоследок небольшой ликбез по следующему вопросу:
    Хоть файл это и не аппаратное устройство, но File file = new File("path");
    Приблизительно во всех одинаково, так file же неизменен, да его экземпляр имеет уникальный хеш но в проге, Вы будете использовать только имя file
    Хеш — вряд ли. Класс File как раз будет обёрткой вокруг дескриптора. Поле со словом handle в имени почти наверняка будет членом этого класса. А дескриптор, в свою очередь, это своего рода номерной билет на доступ к ресурсу, который выдаётся операционной системой. Номер в этом билете может быть любой, и упорядоченность этих номеров никак не гарантируется. Зато гарантируется уникальность в пределах контекста, то есть два файла не могут быть открыты под одинаковыми дескрипторами, и два порта тоже не могут.
    Последний раз редактировалось Yegor; 22.07.2015 в 13:32.

  4. #34

    По умолчанию

    Цитата Сообщение от Boris_K Посмотреть сообщение
    Не понятно что делает вход Enable у функционального блока COM_SERVICE. Сам экземпляр блока вызывается так: имяэкземпляра(Enable:=TRUE, Settings:=Settings1, Task:=OPEN_TSK); входу Settings передаётся структура с настройками порта, входу Task - код действия, которое надо сделать с портом. Единственный выход блока Ready собсно и показывает, открылся ли порт после вызова.

    Нигде не закомментировано, хелпа к биб-ке нет, скачал пример работы с биб-кой SysLibCom (где также используется ComService), там есть документ Описание, но тоже ничего не сказано. То, что входу Enable присваивают истину, когда стучатся в порт, и ложь если порт ещё не открыт - понятно, но какой смысл у этого входа? По идее надо бы просто указать что делать с портом (открыть/сменить настройки/закрыть) - вход Task и каковы будут настройки - вход Settings. И считать результат с выхода Ready... Буду рад если кто прояснит.
    А не могли бы документ свой скинуть? А то задача подключить МДВВ к ПЛК 63, с использованием данных библиотек, и очень нужен пример, чтоб понять ход работы.

  5. #35
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Цитата Сообщение от Bloodtrail Посмотреть сообщение
    А не могли бы документ свой скинуть? А то задача подключить МДВВ к ПЛК 63, с использованием данных библиотек, и очень нужен пример, чтоб понять ход работы.
    Откройте ComService как проект и поймете ход его работы, документация на SysLibCom идет на диске к плк
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #36
    Пользователь
    Регистрация
    20.02.2018
    Адрес
    Беларусь, г.Жабинка
    Сообщений
    1

    По умолчанию

    А как быть с функцией SysComСlose(HANDLE). Другими словами, как закрыть порт?

  7. #37

    По умолчанию

    Доброго всем здоровья! Гуру программеры, подскажите пож-та, как организовать настройку порта 485 через COM библиотеки для модбаса, но в ЛАДЕРЕ LD, у меня все проги в диаграммах пишутся, для киповцев понятен только он. Или может у кого есть документация по работе с функц. блоками в ЛАДЕРЕ. Ни где не могу найти.

    п.с. Работаю без проблем на СИМЕНСЕ, МИТСУБИСИ, ДЕЛЬТА и там в ладере все понятно для модбаса, а тут борода! ПОМОГИТЕ.

  8. #38
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Цитата Сообщение от LEXIES Посмотреть сообщение
    Доброго всем здоровья! Гуру программеры, подскажите пож-та, как организовать настройку порта 485 через COM библиотеки для модбаса, но в ЛАДЕРЕ LD, у меня все проги в диаграммах пишутся, для киповцев понятен только он. Или может у кого есть документация по работе с функц. блоками в ЛАДЕРЕ. Ни где не могу найти.

    п.с. Работаю без проблем на СИМЕНСЕ, МИТСУБИСИ, ДЕЛЬТА и там в ладере все понятно для модбаса, а тут борода! ПОМОГИТЕ.
    берете пример на ST конвертируете в LD. Одно не пойму, если это надо Вашим киповцам почему не они задают вопрос а Вы?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  9. #39

    По умолчанию

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

    Я нашел пример на FBD, чтение и записи регистров. Вроде получилось открыть порт и даже идет запрос с ответом. Но проскакивает ошибка 255
    SCR-1.jpg

  10. #40
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    какие приборы надо опрашивать: чтение, запись и количество слейвов?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Страница 4 из 6 ПерваяПервая ... 23456 ПоследняяПоследняя

Похожие темы

  1. ComService.compiled-library
    от GeLeX в разделе СПК2хх
    Ответов: 4
    Последнее сообщение: 30.09.2013, 10:08
  2. Вопрос по комплектации ПО.
    от rocky7 в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 04.01.2013, 10:31
  3. Ответов: 5
    Последнее сообщение: 20.11.2009, 23:18

Ваши права

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