Страница 1081 из 1177 ПерваяПервая ... 81581981103110711079108010811082108310911131 ... ПоследняяПоследняя
Показано с 10,801 по 10,810 из 11762

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #10801

    По умолчанию

    Есть ПР205 (Мастер) СП307 (Слейв) через Ethernet - как получить битовый регистр PSBХХХ в битовую переменную ПР205.., что то не получается, с целым числом и float проблемм нет. Или проще не заморачиваться и все битовые регистры засунуть в целое число ?? (Почитал все что было но реч. шла о панели в режиме мастер там все понятно)

  2. #10802

    По умолчанию

    Цитата Сообщение от Potoks Посмотреть сообщение
    Есть ПР205 (Мастер) СП307 (Слейв) через Ethernet - как получить битовый регистр PSBХХХ в битовую переменную ПР205.., что то не получается, с целым числом и float проблемм нет. Или проще не заморачиваться и все битовые регистры засунуть в целое число ?? (Почитал все что было но реч. шла о панели в режиме мастер там все понятно)
    Проще всего упаковывать биты в маску и передавать целым числом, в регистре 16 бит ( с 0 по 15).

  3. #10803

    По умолчанию

    Разобрался .. как написано в доке Адрес регистра панели надо поделить на 16 (от результата отбросить остаток) Адрес бита = (Адрес регистра панели) mod 16

  4. #10804

    По умолчанию

    конечно это лучший спопсоб все упаковать .... но надо научиться владеть всем инструментарием..))
    Спасибо

  5. #10805

    По умолчанию

    Всем привет, стоит задача опросить МДВВ ПЛК100 Р-М по Modbus RS 485 по двум входам, регистры которых равны 0074 и 0075, соответственно.
    Мне нужно только функция чтения.
    Для написания логики я использовал "Описание интерфейса библиотеки ФБ для работы с протоколом Modbus Руководство пользователя" Приложение А. Правильно ли я написал код, учитывая что в примере использовался ПЛК63 (возможно, значения не имеет?) Подскажите, пожалуйста, что нужно убрать или добавить?

    PROGRAM PLC_PRG
    VAR
    get1_modbus: MB_RD_HOLD_REGS;
    Buffer: ARRAY[0..255] OF BYTE;
    cmpl: BOOL;
    port_opened: BYTE := 0;
    Init: BOOL;
    Settings: COMSETTINGS;
    com_num: PORTS := 0;
    enabl: BOOL;
    err: INT;
    TimeOut: TIME := T#50ms;
    Exception: BYTE;
    DataSize: WORD;
    master1: BYTE := 1;
    t: DWORD;
    A: WORD := 0;
    reg_74: WORD;
    reg_75: WORD;
    d: REAL;
    ptr_D: POINTER TO BYTE;
    COM_SERVICE1: COM_SERVICE;
    END_VAR

    t := t + 1;
    IF (t MOD 1000) = 0 THEN
    A := A + 1;
    IF A > 9999 THEN
    A := 0;
    END_IF
    END_IF

    IF port_opened = 0 THEN
    Settings.Port := com_num;
    Settings.dwBaudRate := 115200;
    Settings.byParity := 0;
    Settings.dwTimeout := 0;
    Settings.byStopBits := 0;
    Settings.dwBufferSize := 0;
    Settings.dwScan := 0;
    END_IF

    COM_SERVICE1(Enable := (port_opened = 0), Settings := Settings, Task := OPEN_TSK);

    IF COM_SERVICE1.ready THEN
    port_opened := 2;
    END_IF

    IF port_opened = 2 THEN
    CASE master1 OF
    0:
    get1_modbus(
    Enable := enabl,
    Mode := MB_RTU,
    DevAddr := 33,
    FirstAddr := 74,
    Quantity := 2,
    ComHandle := Settings.Port,
    TimeOut := TimeOut,
    Buffer := Buffer,
    Complete => cmpl,
    Exception => err,
    ByteCnt => DataSize
    );

    IF cmpl THEN
    IF err = 0 THEN
    reg_74 := BYTE_TO_WORD(Buffer[1]) OR SHL(BYTE_TO_WORD(Buffer[0]), 8);
    reg_75 := BYTE_TO_WORD(Buffer[3]) OR SHL(BYTE_TO_WORD(Buffer[2]), 8);
    END_IF
    master1 := 1;
    END_IF
    END_CASE

    IF enabl = FALSE THEN
    enabl := TRUE;
    END_IF

    IF err <> 0 THEN
    enabl := FALSE;
    END_IF
    END_IF

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

    По умолчанию

    Цитата Сообщение от SergeiRusyaev Посмотреть сообщение
    Всем привет..
    Правильно ли я написал код..
    Нет

    Подскажите, пожалуйста, что нужно
    Подумать про это
    master1 := 1;

    ----------
    ПЛК100 Р-М
    Вы здесь 1й раз. Начните с конфигурации ПЛК.
    Код для PLC_PRG:
    Код:
    ;

  7. #10807

    По умолчанию

    У вас CASE не работает, потому что master1 := 1; всегда 1, а шаг в CASE только нулевой.

  8. #10808

    Thumbs up

    Спасибо, я сделал по-другому. В моем target файле уже имелся модуль MDVV для Modbus, поэтому в конфигурации ПЛК я просто создал нужное кол-во этих модулей на Modbus Master и выбрал нужные входы, после создал выходы на Modbus Slave. Что скажите?1.jpg2.jpg

  9. #10809

    По умолчанию

    Спасибо, я поменял метод реализации

  10. #10810

    По умолчанию

    Цитата Сообщение от SergeiRusyaev Посмотреть сообщение
    Спасибо, я сделал по-другому. В моем target файле уже имелся модуль MDVV для Modbus, поэтому в конфигурации ПЛК я просто создал нужное кол-во этих модулей на Modbus Master и выбрал нужные входы, после создал выходы на Modbus Slave. Что скажите?1.jpg2.jpg
    Главное, что всё работает,
    а по поводу нескольких блоков, достаточно в CASE, добавить несколько шагов, скопировав из 0 шага, только слейв адреса блоков поменять и расставить переменную master1 по шагам.

Страница 1081 из 1177 ПерваяПервая ... 81581981103110711079108010811082108310911131 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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