Показано с 1 по 2 из 2

Тема: странная логика в ФБ COM_SERVICE

  1. #1

    По умолчанию странная логика в ФБ COM_SERVICE

    По ссылке https://owen.ru/product/codesys_v2/example_program в разделе "Примеры подключения стороннего оборудования и устройств с нестандартными протоколами" в первом примере "SysLibCom - библиотека, позволяющая принимать/отсылать в порты RS-232/485 любую информацию. В архиве пример управления портом (открытие/закрытие/изменение настроек) и пример реализации протокола с помощью данной библиотеки" скачал пример программы "Инициализация порта".

    В этом примере программы используются две библиотеки ComService.lib и SysLibCom.lib. В библиотеке ComService.lib есть функциональный блок COM_SERVICE.

    Листинг программы и функционального блока в приложении.


    В процессе разбора логики программы и функционального блока возникли следующие вопросы:

    Программа
    Во второй строке программы (если не считать комментарии) com_num:=0. Переменная com_num типа перечисление TYPE PORTS : (COM1:=1, COM2, COM3, COM4, COM5, COM6, COM7, COM8); END_TYPE
    Почему здесь com_num присваивается значение 0, если такого значения нет в перечислении.

    Функциональный блок COM_SERVICE
    1) Для чего нужна переменная Delay и почему условие в IF (Delay MOD 100) = 0

    2) Ready: = NOT SysComSetSettings (Settings.Port, ADR(Settings));
    Получается выходная переменная Ready может получить значение 1, только в одном случае, если функция SysComSetSettings вернет FALSE, то есть установка параметров не была успешной.

    3) Функция SysComOpen согласно описанию библиотеки SysLibCom.lib, возвращает дескриптор порта, который используется при вызове других функций библиотеки SysLibCom.lib. Что представляет из себя дескриптор порта, который возвращает эта функция?
    Согласно описанию функции SysComOpen, входной переменной этой функции является переменная типа перечисление TYPE PORTS : (COM1:=1, COM2, COM3, COM4, COM5, COM6, COM7, COM8). И в этом функциональном блоке в строке IF SysComOpen (Settings.Port) = ...... функция SysComOpen вызывается со значением поля Port структуры Settings. Где поле Port является переменной перечисления PORTS.
    Но затем в строках Ready: = NOT SysComSetSettings(Settings.Port, ADR(Settings)) и SysComClose(Settings.Port) функции SysComSetSettings и SysComClose также вызываются с Settings.Port, хотя согласно их описанию входные переменные у этих функций должны быть дескрипторы порта типа DWORD, полученные от функции SysComOpen.
    Вложения Вложения

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

    По умолчанию

    1. Поскольку Delay там инкрементируется - это позволяет создать задержку в 100 циклов ПЛК между запуском блока и открытием порта.
    А вот зачем нужна эта задержка - мне всегда самому было интересно.
    Возможно, на каких-то первых ПЛК были проблемы при попытке открыть порт сразу после запуска проекта, и поэтому добавили эту искусственную задержу - но это лишь гипотеза.

    2. В реализации библиотеки SysLibCom для ПЛК ОВЕН - при успешной установке настроек функция возвращает FALSE.

    3. В реализации библиотеки SysLibCom для ПЛК ОВЕН - дескриптор открытого порта равен номеру этого порта.

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    реализация отличается, т.к. мы руководствовались английской документацией с ошибкой. а когда документацию исправили - уже менять все было поздно.
    https://owen.ru/forum/showthread.php...ll=1#post29094

Похожие темы

  1. Странная работа PID
    от skinnbatter в разделе ПЛК1хх
    Ответов: 28
    Последнее сообщение: 14.11.2018, 12:59
  2. СПК110+МВ110-16Д Странная проблема
    от Atomic-dm в разделе СПК1хх
    Ответов: 2
    Последнее сообщение: 06.10.2016, 14:27
  3. Ответов: 4
    Последнее сообщение: 24.06.2016, 18:08
  4. странная работа буста
    от Andrupel в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 12.09.2012, 10:16
  5. странная синтаксическая ошибка
    от alhoresm в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 23.06.2011, 21:10

Ваши права

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