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

Тема: Помогите с ПЛК 308

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    03.03.2008
    Адрес
    Новосибирск
    Сообщений
    238

    По умолчанию

    Есть способ немного проще....Вернее два. Через конфигурацию или ручками. Всё описано во встроенной справке. Вот кусочек второго метода:

    PROGRAM TCP
    VAR
    mbserv: ModbusServer;
    En:BOOL;
    Res:BOOL;
    IoDrvStartBusCycle: UDINT;
    b:BOOL := TRUE;
    END_VAR


    IF b THEN
    En := TRUE;
    Res := FALSE;
    mbserv.wPort := 502;
    mbserv.pInputData := ADR( InputData1 );
    mbserv.uiInputDataSize := 500;
    mbserv.pOutputData := ADR( OutputData1 );
    mbserv.uiOutputDataSize := 500;
    mbserv.tTimeout := 0;
    b := FALSE;
    END_IF

    mbserv.xEnable := En;
    mbserv.xReset := Res;
    mbserv( );
    IF ( mbserv.xError ) THEN
    mbserv.xReset := TRUE;
    IoDrvStartBusCycle := Errors.ERR_SOCK_NOTCONNECTED;
    ELSE
    IoDrvStartBusCycle := Errors.ERR_OK;
    END_IF


    InputData1 - входные регистры (ф - 04)

    OutputData1 - выходные (ф - 03)

  2. #2
    Пользователь
    Регистрация
    02.08.2011
    Адрес
    Архангельск
    Сообщений
    13

    По умолчанию

    Цитата Сообщение от kgsh82 Посмотреть сообщение
    Есть способ немного проще....Вернее два. Через конфигурацию или ручками.
    Подскажите, каким образом можно преодолеть ограничение в 40 входных регистров, при использовании конфигуратора?

  3. #3
    Пользователь
    Регистрация
    03.03.2008
    Адрес
    Новосибирск
    Сообщений
    238

    По умолчанию

    Цитата Сообщение от ISh Посмотреть сообщение
    Подскажите, каким образом можно преодолеть ограничение в 40 входных регистров, при использовании конфигуратора?
    Чем второй метод не нравится?

  4. #4
    Пользователь
    Регистрация
    02.08.2011
    Адрес
    Архангельск
    Сообщений
    13

    По умолчанию

    Цитата Сообщение от kgsh82 Посмотреть сообщение
    Чем второй метод не нравится?
    Разобрался - понравился.
    Только появилось два вопроса:
    1) Опрашиваю ПЛК Лектусом - данные идут.
    Перезагружаю ПЛК - связь не восстанавливается, всё время mbserv.xError = TRUE.
    Еще раз перезагружаю ПЛК - связь восстановилась.
    Как сделать, чтобы связь всегда поднималась?
    2) Для чего нужны строки:
    Код:
    IoDrvStartBusCycle := Errors.ERR_SOCK_NOTCONNECTED;
    IoDrvStartBusCycle := Errors.ERR_OK;
    И компилятор ругается, что "Идентификатор 'Errors' не задан".

  5. #5
    Пользователь
    Регистрация
    03.03.2008
    Адрес
    Новосибирск
    Сообщений
    238

    По умолчанию

    Цитата Сообщение от ISh Посмотреть сообщение
    Разобрался - понравился.
    Только появилось два вопроса:
    1) Опрашиваю ПЛК Лектусом - данные идут.
    Перезагружаю ПЛК - связь не восстанавливается, всё время mbserv.xError = TRUE.
    Еще раз перезагружаю ПЛК - связь восстановилась.
    Как сделать, чтобы связь всегда поднималась?
    2) Для чего нужны строки:
    Код:
    IoDrvStartBusCycle := Errors.ERR_SOCK_NOTCONNECTED;
    IoDrvStartBusCycle := Errors.ERR_OK;
    И компилятор ругается, что "Идентификатор 'Errors' не задан".

    Вообще этот код я взял из встроенной справки. Здесь Errors - компонент биб-ки Cmperrors

  6. #6
    Пользователь
    Регистрация
    02.08.2011
    Адрес
    Архангельск
    Сообщений
    13

    По умолчанию

    Цитата Сообщение от kgsh82 Посмотреть сообщение
    Вообще этот код я взял из встроенной справки. Здесь Errors - компонент биб-ки Cmperrors
    Добавив явно библиотеку Cmperrors - компилятор ругаться перестал.

    Ни с помощью справки, ни с документацией, ни с гуглом разобраться, что же такое IoDrvStartBusCycle, не получилось.

    По поводу прекращения работы Модбас:
    Если ПЛК не опрашивать, то перезугрузки ПЛК работу Модбас не останавливают.
    Если ПЛК опрашивается, то Модбас отваливается, и далеко не с первой перезагрузкой удается восстановить его работу.

    Переписал код на следующий:
    Код:
    mbserv.xEnable := En;
    
    IF ( mbserv.xError )  THEN 
    	CounterReset:= CounterReset + 1;
    	mbserv.xReset := TRUE;
    	IoDrvStartBusCycle := Errors.ERR_SOCK_NOTCONNECTED;		
    ELSE
    	mbserv.xReset := FALSE;
    	IoDrvStartBusCycle := Errors.ERR_OK;
    END_IF
    
    mbserv( );
    связь стала восстанавливаться примерно за 60 секунд.
    Так и должно быть?
    Из справки следует, что связь должна восстанавливаться уже на следующий цикл:
    "In case of a socket error the reset flag is set, normal request processing then should continue in the next cycle".

  7. #7

    По умолчанию

    Использую TCP через конфигуратор. У меня проблема в том, что Lan-порт почти сразу отваливается с красным треугольником. В онлайне добрался до xReset - удаётся шину перегрузить, некоторое время работает и опять отваливается. Хотел, как в примере использовать функциональный блок, но что-то не удаётся прописать порт. Почему-то wPort не прописывается, когда ставлю точку после mbserv такой переменной в списке нет, хотя в контекстной подсказке появляется сообщение, что порт по умолчанию 502... Не понятно как его поменять?
    Ещё не понял как вызвать функциональный блок ModbusServer с помощью ассистента ввода?

    Цитата Сообщение от kgsh82 Посмотреть сообщение
    mbserv.wPort := 502;
    В онлайне, добираюсь к этим переменным так Device.Application.ModbusTCP_Slave_Device.m_Modbus Server, но не пойму как к ним добраться из программы контроллера...
    Последний раз редактировалось Sergeba; 28.04.2018 в 00:31.

Ваши права

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