Страница 6 из 8 ПерваяПервая ... 45678 ПоследняяПоследняя
Показано с 51 по 60 из 76

Тема: Вопрос по библиотеке Modbus.lib

  1. #51
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Я обычно пытаюсь еще раз достучаться до модуля. И только в случае повторной неудачи считаю, что модуль отказал.
    Для того, чтобы отослать повторный запрос достаточно ведь просто остаться на этом же шаге, но взвести еще раз Enable.
    Чтобы это происходило автоматически я на вход Enable подаю not Read (применительно к Вашему коду будет Enable := not ModbusAdrDO67.Read).

    И учтите, что в случае ошибки Вы скорее всего не записал в модуль DOByteAdr67, но тем не менее пишите OldDOByteAdr67 := DOByteAdr67.

    Но в целом так как Вы предлагаете тоже можно.

  2. #52
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Важное замечание к самому себе. Остаться нужно не на том же шаге, а на той же паре шагов! Т.е. заново сформировать буфер (еще раз отсылаю к этому посту)!
    Все остальное без изменений.

  3. #53

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Важное замечание к самому себе. Остаться нужно не на том же шаге, а на той же паре шагов! Т.е. заново сформировать буфер (еще раз отсылаю к этому посту)!
    Все остальное без изменений.
    СПС за консультацию

  4. #54

    По умолчанию

    Цитата Сообщение от Гарчев Евгений Посмотреть сообщение
    ф.б. на запись отрабатывает не за один цикл, поэтому буфер на отправку необходимо формировать однократно перед вызовом этого ф.б. После вызова ф.б. необходимо сразу же снять флаг запуска в следующем действии (ModbusAdrDO11(enable:=false); ) и потом уже ждать завершения его работы.
    Цитата Сообщение от energvk Посмотреть сообщение
    А вот это интересное замечание. Я не знал про такой нюанс.
    А к чтению из модуля это замечание относится?

  5. #55

    По умолчанию

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

  6. #56

    По умолчанию

    Если вернуться к коду автора темы, то необязательно ему буфер формировать в отдельном шаге, раз он использует промежуточную переменную. Можно обойтись такой конструкцией в одном шаге:
    if enabl then
    Buffer[0]:=0;
    Buffer[1]:=DOByteAdr67;
    end_if
    ModbusAdrDO67(
    Enable:= enabl,
    Mode:= MB_RTU,
    DevAddr:= 67,
    FirstAddr:= 50,
    Quantity:= 1,
    ComHandle:= Settings.Port,
    TimeOut:= TimeOut,
    Buffer:= Buffer,
    Complete=> cmpl,
    Exception=> ErrorDO67,
    RegCnt=> DataSize);
    enabl:=FALSE;

  7. #57

    По умолчанию

    Всё, теперь понятно. Вот в прошлый раз неправильно понял оказывается. Спасибо за пояснение.

  8. #58

    По умолчанию

    скорее, это я некорректно написал в прошлый раз, но главное, что разобрались в итоге ...

  9. #59

    По умолчанию

    Может кто подскажет что не так. Пытаюсь опрашивать ТРМ212 с плк150, данные считываю, запись никак не проходит.
    2:
    IF COM_SERVICE1.ready=FALSE THEN

    com_num:=0;

    Settings.Port:=com_num;
    Settings.dwBaudRate:=115200;
    Settings.byParity:=0;
    Settings.dwTimeout:=20;
    Settings.byStopBits:=2;
    Settings.dwBufferSize:=0;
    Settings.dwScan:=0;

    COM_SERVICE1(Enable:=TRUE , Settings:=Settings , Task:=OPEN_TSK );
    com_ready:=FALSE;
    ELSE
    COM_SERVICE1.Enable:=FALSE;
    com_ready:=TRUE;
    END_IF


    IF com_ready THEN

    CASE master1 OF

    0:
    get1_modbus(
    Enable:=TRUE ,
    Mode:=MB_RTU ,
    DevAddr:=5 ,
    FirstAddr:=4104 ,
    Quantity:=10,
    ComHandle:=com_settings.Port ,
    TimeOut:=t#200ms ,
    Buffer:=Buffer ,
    Complete=>cmpl ,
    Exception=>err ,
    ByteCnt=>DataSize );

    IF err=0 THEN
    x:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);

    ptr_PV:=ADR(PV);
    ptr_PV^:=buffer[5];
    ptr_PV:=ptr_PV+1;
    ptr_PV^:=buffer[4];
    ptr_PV:=ptr_PV+1;
    ptr_PV^:=buffer[3];
    ptr_PV:=ptr_PV+1;
    ptr_PV^:=buffer[2];

    ptr_SP:=ADR(SP);
    ptr_SP^:=buffer[17];
    ptr_SP:=ptr_SP+1;
    ptr_SP^:=buffer[16];
    ptr_SP:=ptr_SP+1;
    ptr_SP^:=buffer[15];
    ptr_SP:=ptr_SP+1;
    ptr_SP^:=buffer[14];

    END_IF
    IF cmpl THEN
    master1:=2;
    END_IF


    2:
    get1_modbus(
    Enable:=FALSE ,
    Mode:=MB_RTU ,
    DevAddr:=5 ,
    FirstAddr:=4104 ,
    Quantity:=10,
    ComHandle:=com_settings.Port ,
    TimeOut:=t#200ms ,
    Buffer:=Buffer ,
    Complete=>cmpl ,
    Exception=>err ,
    ByteCnt=>DataSize );

    master1:=3;

    3: SPbuffer[0]:=10;
    master1:=4;

    4:
    Wr_Modbus
    (
    Enable:=TRUE ,
    Mode:=MB_RTU ,
    DevAddr:=5 ,
    FirstAddr:=4 ,
    Quantity:= 1,
    ComHandle:=com_settings.Port ,
    TimeOut:=t#200ms ,
    Complete=>cmpl ,
    Exception=>err,
    Buffer:=SPbuffer,
    );

    IF cmpl THEN
    master1:=5;
    END_IF

    5:

    Wr_Modbus
    (
    Enable:=FALSE ,
    Mode:=MB_RTU ,
    DevAddr:=5 ,
    FirstAddr:=4 ,
    Quantity:= 1,
    ComHandle:=com_settings.Port ,
    TimeOut:=t#200ms ,
    Complete=>cmpl ,
    Exception=>err,
    Buffer:=SPbuffer,
    );

    master1:=0;
    END_CASE;

    END_IF

  10. #60

    По умолчанию

    ТРМ212 настроен на работу по статической уставке или работает по графику уставки?

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

Похожие темы

  1. Еще раз о библиотеке SysLibSockets
    от dudanov в разделе ПЛК1хх
    Ответов: 52
    Последнее сообщение: 28.01.2015, 15:41
  2. По библиотеке UNM
    от Сергей Мих в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 25.04.2012, 23:06
  3. Вопрос по библиотеке UNM
    от askpify в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 31.10.2009, 23:50
  4. По Овеновской библиотеке PID ?
    от mar154 в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 28.10.2008, 12:32

Ваши права

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