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

Тема: Опрос датчика по модбас

  1. #1

    По умолчанию Опрос датчика по модбас

    Здравствуйте уважаемые форумчане! Прошу Вашей помощи в реализации задачи, поскольку c CoDeSys 3.5 и СПК ОВЕН занимаюсь всего неделю, а решение необходимо к середине февраля.
    По сути - есть СПК 110, три сигнальных модуля(MV110_8AS, MV110_32DN, MU110_32R) и 14 датчиков, опрашиваемые по модбас. Если с подключением модулей компания ОВЕН максимально упростило задачу пользователю, и я как будто сделал всё верно(к хардварной части доступа пока нет), то с опросом датчиков я нахожусь в весьма затруднительном положении. Безусловно не прошу Вас сделать всё за меня, но хотя бы не кодом - словами подскажите, подпните в нужном направлении.
    К сообщению прикладываю архив со скелетом проекта и паспорт на датчик от производителя.
    Уповаю на Вашу помощь.
    P.S. Такой код будет работать?

    Спойлер:

    PROGRAM com3
    VAR
    com_service_com3: ComService.COM_SERVICE; //ФБ настройки и открытия порта COM3
    Settings_COM3: ComService.COM_Settings; //Структура настроек порта COM3
    SettingsEX_COM3: ComService.COM_SettingsEx; //Структура расширенных настроек порта COM3

    iDevice: INT; //Переменные начала цикла опроса (0-14)

    DI_1: MB_RD_HOLD_REGS; // ФБ опроса датчика 1
    DI_2: MB_RD_HOLD_REGS; // ФБ опроса датчика 2

    abyDI_1_buffer: ARRAY[0..255] OF BYTE; //Буфер ФБ опроса датчика1
    abyDI_1_data: ARRAY[0..255] OF BYTE; //Буфер данных, считанных с датчика1

    abyDI_2_buffer: ARRAY[0..255] OF BYTE; //Буфер ФБ опроса датчика2
    abyDI_2_data: ARRAY[0..255] OF BYTE; //Буфер данных, считанных с датчика2

    rDI_1_input: REAL; //Показания датчика1
    wsDI_1_input_status: WSTRING; // Статус измерения датчика1
    rDI_2_input: REAL; //Показания датчика2
    wsDI_2_input_status: WSTRING; // Статус измерения датчика2

    _2WORD_TO_REAL: Word_Real; //Экземпляр объединения для преобразования двух WORD в REAL
    END_VAR
    VAR CONSTANT
    abyEmptyBuffer: ARRAY [0..255] OF BYTE:=[255(0)]; // Пустой буфер
    END_VAR



    // [1] настраиваем COM-порт
    Settings_COM3.sPort:=3;
    Settings_COM3.byStopBits:=1;
    Settings_COM3.byParity:=0;
    Settings_COM3.ulBaudrate:=9600;
    Settings_COM3.ulTimeout:=0;
    Settings_COM3.ulBufferSize:=0;

    SettingsEX_COM3.byByteSize:=8;

    // [2] открываем COM-порт
    COM_Service_COM3
    (
    Enable:=TRUE,
    Settings:=Settings_COM3,
    Sets_Ex:=SettingsEX_COM3,
    Task:=OPEN_TSK,
    );

    // [3] iDevice определяет опрашиваемый датчик: 0 - DI1, 1 - DI2
    CASE iDevice OF
    0:
    // запускаем ФБ опроса датчика1
    DI_1
    (
    Enable:=COM_Service_COM3.Ready,
    Mode:=MB_RTU,
    DevAddr:=1,
    FirstAddr:=18,
    Quantity:=1,
    ComHandle:=COM_Service_COM3.handle,
    TimeOut:=T#500MS,
    Buffer:=abyDI_1_buffer,
    );

    // если ФБ опроса датчика завершил работу...
    IF DI_1.Complete // ФБ опроса датчика 1
    THEN
    // ...и ошибки отсутствуют, то забираем значения датчика
    IF DI_1.Exception=0 THEN
    abyDI_1_data:=abyDI_1_buffer;
    rDI_1_input:=_2WORD_TO_REAL.rRealValue;
    END_IF
    // завершаем опрос датчика 1
    DI_1(Enable:=FALSE, Buffer:=abyDI_1_buffer);

    // переходим к опросу датчика 2
    iDevice:=1;
    // очищаем буфер датчика 2
    abyDI_2_buffer:=abyEmptyBuffer;
    END_IF

    1:
    // запускаем ФБ опроса датчика 2
    DI_2
    (
    Enable:=COM_Service_COM3.Ready,
    Mode:=MB_RTU,
    DevAddr:=2,
    FirstAddr:=18,
    Quantity:=1,
    ComHandle:=COM_Service_COM3.handle,
    TimeOut:=T#500MS,
    Buffer:=abyDI_2_buffer,
    );

    // [3.0.2] если ФБ опроса датчика завершил работу...
    IF DI_2.Complete // ФБ опроса датчика 2
    THEN
    // ...и ошибки отсутствуют, то забираем значения датчика
    IF DI_2.Exception=0 THEN
    abyDI_2_data:=abyDI_2_buffer;
    rDI_2_input:=_2WORD_TO_REAL.rRealValue;
    END_IF
    // завершаем опрос датчика 2
    DI_2(Enable:=FALSE, Buffer:=abyDI_2_buffer);

    // начинаем новый цикл опроса
    iDevice:=0;
    END_IF

    END_CASE
    Вложения Вложения
    Последний раз редактировалось i`m; 23.01.2019 в 15:31.

Похожие темы

  1. ПЛК63 Экраны, модбас опрос
    от Егор_Егор в разделе ПЛК63/73
    Ответов: 6
    Последнее сообщение: 21.08.2018, 14:47
  2. Быстрый опрос по модбас
    от Александр_Гранд в разделе Мх110
    Ответов: 4
    Последнее сообщение: 04.06.2018, 00:42
  3. СП310 Сервер по Модбас ТСР + СП310 Слейв по Модбас RTU
    от Global в разделе Панели оператора (HMI)
    Ответов: 7
    Последнее сообщение: 19.04.2018, 11:16
  4. Ответов: 29
    Последнее сообщение: 06.09.2017, 21:22
  5. Опрос датчика 4-20 мА
    от Xkraft в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 20.12.2011, 09:42

Ваши права

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