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

Тема: ПЛК63+RS485

  1. #1

    По умолчанию ПЛК63+RS485

    Уважаемые специалисты! Помогите разобраться со следующей проблемой.
    ПЛК63-РРРРРР-М пытаюсь соединить с МДВВ по интерфейсу RS485. Протокол Modbus RTU. 9600N1.
    Я воспользовался примерами и написал пробную программу, которая раз в 200 мс читает состояние регистра дискретных входов(0х33) МДВВ и раз в следующие 200 мс записывает это состояние в регистр дискретных выходов(0х32) МДВВ.
    Но к сожалению:

    1) функция
    (*Открываем COM-порт*)
    COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
    НЕ открывает порт.

    2)
    В разделе описания типов переменных есть строка
    com_num: PORTS:=0;(*0 - RS-485, 1 - RS-232*)

    При выполнении программы она подсвечивается красным цветом и добавляется надпись ***INVALID: 0***
    Видимо поэтому Com-порт не открывается

    Перечисление PORTS объявляется в библиотеке SysLibCom.lib в следующем виде
    TYPE PORTS : (COM1:=1, COM2, COM3, COM4, COM5, COM6, COM7, COM8);
    END_TYPE
    Из этого следует, что переменная типа PORTS не может принимать значение 0. Тогда не понятно как я смогу работать с RS-485, ведь для этого я должен присвоить переменной com_num значение 0(Что следует из комментария к строке описания переменной ).
    Вложения Вложения

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

    По умолчанию

    принимает же. Вот потому что в перечислении отсутствует ноль у Вас и светится красным. Но это не показатель что порт не открылся, другие симптомы есть?

  3. #3

    По умолчанию

    Симптомы есть.
    COM_SERVICE1.ready при открытии порта должно принять значение TRUE, а этого не происходит. Отсюда я делаю вывод, что порт не открывается.
    Кроме того, МДВВ не принимает посылки(светодиод RS-485 не мигает).

  4. #4

    По умолчанию

    Уважаемые специалисты!пытаюсь соединить ПЛК-63-РРРРРР-М С МДВВ-Р.Вхожу в конфигурирование плк и пытаюсь прикрепить к нему подэлемент.но это не получается.слово подэлемент есть но оно не выделено черным цветом.проект написан на LD.помогите пожалуйста.

  5. #5

    По умолчанию

    Надо написать свою процедуру.
    На LD я не стал бы это делать. На ST у меня давно реализовано - и на вход и на выход.

  6. #6

    По умолчанию

    Спасибо.Буду пробовать.

  7. #7

    По умолчанию

    Уважаемые специалисты! Помогите разобраться со следующей проблемой.
    ПЛК63-РРРРРР-М пытаюсь соединить с МДВВ по интерфейсу RS485. Протокол Modbus RTU. 9600N1.
    Я воспользовался примерами и написал пробную программу, которая читает состояние регистра дискретных входов(0х33) МДВВ и записывает это состояние в регистр дискретных выходов(0х32) МДВВ.
    В прикреплённом файле prb120708_1 приведён исходный текст отлаженной работоспособной программы. Но имеется несколько вопросов и комментариев.

    1. В примерах программ дан следующий фрагмент кода, открывающий порт
    (*Открываем COM-порт*)
    (*COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );*)
    COM_SERVICE1(Enable:=TRUE , Settings:=Settings , Task:=OPEN_TSK );
    (*Если COM-порт открыт, то переходим к приему и передачи данных *)
    IF COM_SERVICE1.ready
    THEN
    port_opened:=2;
    ELSE
    COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=CLOSE_TSK );
    END_IF;

    При таком коде порт у меня не открывается. Для открытия порта использую следующий фрагмент кода

    COM_SERVICE1(Enable:=TRUE , Settings:=Settings , Task:=OPEN_TSK );
    (*Если COM-порт открыт, то переходим к приему и передачи данных *)
    IF COM_SERVICE1.ready
    THEN
    port_opened:=2;
    END_IF;

    2. Библиотечная функция COM_SERVICE1, оказывается, пытается открывать порт только при каждом сотом обращении к ней. В начале этой функции есть следующий текст
    Delay := Delay + 1;
    IF (Delay MOD 100) = 0 THEN ..

    Этот недостаток для моего приложения не является существенным, просто система начнёт работать на 15-20 секунд позже включения питания

    3. Функции
    get04_modbus: MB_RD_INP_REGS; (*функция 04 - чтение параметров типа INT*)
    send16_modbus: MB_WR_REGS; (*функция 16 - запись параметров*)

    используются для чтения и записи параметров в MДВВ.

    Но требуется 4 раза подряд обратиться к функции get04_modbus прежде получить правильный ответ, и требуется 3 раза подряд обратиться к функции send16_modbus прежде получить правильный ответ.
    Это настораживает. Я подсчитал отношение числа запросов к числу правильных ответов. Это отношение оказывается постоянным, значит, эти сбои не являются случайными, а связаны с какой-то моей ошибкой. Прошу ответить тех, кто имеет какие-то соображения на этот счёт.
    Вложения Вложения

  8. #8

    По умолчанию

    Но требуется 4 раза подряд обратиться к функции get04_modbus прежде получить правильный ответ, и требуется 3 раза подряд обратиться к функции send16_modbus прежде получить правильный ответ.
    Правильность чтения/записи можно проверять с помощью выходного параметра Complete соответствующего функц блока.

Похожие темы

  1. ПЛК63 и RS485
    от Nick_V1 в разделе Помощь Разработчикам
    Ответов: 9
    Последнее сообщение: 14.11.2011, 18:23
  2. СИ-8 RS485
    от afsh в разделе Эксплуатация
    Ответов: 6
    Последнее сообщение: 04.04.2011, 13:45
  3. Usb-rs485
    от Bobilnik в разделе Эксплуатация
    Ответов: 13
    Последнее сообщение: 25.03.2009, 12:02
  4. ПЛК - rs485 - СИ8
    от Максим_Фалалеев в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 16.09.2008, 14:23
  5. Rs485
    от незарегистрированный в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 17.03.2008, 10:56

Ваши права

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