Страница 333 из 711 ПерваяПервая ... 233283323331332333334335343383433 ... ПоследняяПоследняя
Показано с 3,321 по 3,330 из 7101

Тема: CODESYS V3.5. Вопросы и ответы

  1. #3321

    По умолчанию

    > может, уже в конце концов, заняться инициатором посылок
    Увы, это законченное изделие. Можно конечно от него отказаться, но где гарантия, что подобная ситуация, при расширении сферы применения CDS не встретится с другим устройством или у кого-то еще? Решение-то ведь напрашивается простое - буфер. Тем более, что переполнение его маловероятно, т.к. между сообщениями имеются изрядные "окна". По сути, это некая задача об обслуживании. Т.е. буфер делает обработчик (контроллер) более универсальным, как ни крути.

    Еще интересный момент. В CODESYS ведь есть для главной задачи не только Циклическое выполнение, но и по "Cобытию". Но, т.к. принимающий данные блок, по крайней мере из библиотеки NBS, работает "не сам по себе", а требует циклического вызова, то это опять ничего не дает. А так, вообще было бы интересно - вызов задачи управлялся бы потоком данных. Почему бы и нет? В ряде применений это было бы очень эффективно.

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

    По умолчанию

    так какие проблемы, если вы сейчас в непонятках, вместо законченного изделия поставили программный эмулятор и экспериментируйте на здоровье, чтоб выяснить кто же в конечном итоге виноват
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  3. #3323

    По умолчанию

    >так какие проблемы, если вы сейчас в непонятках, вместо законченного изделия поставили программный эмулятор и экспериментируйте на здоровье, чтоб выяснить кто же в конечном итоге виноват
    В том то и дело, что уже на 99,99% понятно, что в крайне редких случаях (1-2 раза в день) информация о нажатой кнопке в входном массиве байт затирается следующей порцией данных (случайным образом меняющийся уровень принимаемого сигнала), которая начинается опять с нулевого элемента массива. Если бы данные просто клались после принятых ранее, я бы успел их быстренько вытащить и обработать без потерь. Можно, конечно, еще сократить время цикла - но это не гарантия. Судя по некоторым данным, между передачами промежуток в особо неблагоприятных случаях бывает не более 1 мс. А потом может быть окно и в десятки миллисекунд. Вообще, мне кажется буфер это насторлько фундаментальная вещь, что без него не работает ни один современный коммутатор Ethernet например. Конечно, там работа с буферами вообще высший пилотаж, она и определяет совершенство коммутатора в конечном итоге. Мой же случай - простейший. Но почему-то думается, что он не уникален. Если этого у других не было, не факт, что не будет. Понятно, что правильные протоколы позволяют нивелировать эти эффекты, но при возрастании нагрузки не контроллер могуть быть скажем так подобные "выбросы" глюков, которые не сразу и поймешь отчего.

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

    По умолчанию

    Цитата Сообщение от Петр Петрович Посмотреть сообщение
    >так какие проблемы, если вы сейчас в непонятках, вместо законченного изделия поставили программный эмулятор и экспериментируйте на здоровье, чтоб выяснить кто же в конечном итоге виноват
    В том то и дело, что уже на 99,99% понятно, что в крайне редких случаях (1-2 раза в день) информация о нажатой кнопке в входном массиве байт затирается следующей порцией данных (случайным образом меняющийся уровень принимаемого сигнала), которая начинается опять с нулевого элемента массива. Если бы данные просто клались после принятых ранее, я бы успел их быстренько вытащить и обработать без потерь. Можно, конечно, еще сократить время цикла - но это не гарантия. Судя по некоторым данным, между передачами промежуток в особо неблагоприятных случаях бывает не более 1 мс. А потом может быть окно и в десятки миллисекунд. Вообще, мне кажется буфер это насторлько фундаментальная вещь, что без него не работает ни один современный коммутатор Ethernet например. Конечно, там работа с буферами вообще высший пилотаж, она и определяет совершенство коммутатора в конечном итоге. Мой же случай - простейший. Но почему-то думается, что он не уникален. Если этого у других не было, не факт, что не будет. Понятно, что правильные протоколы позволяют нивелировать эти эффекты, но при возрастании нагрузки не контроллер могуть быть скажем так подобные "выбросы" глюков, которые не сразу и поймешь отчего.
    т.е. на других устройствах типа ПК удавалось прочитать всю информацию от и до?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #3325

    По умолчанию

    На ПК не пробовал, но думаю, что получилось бы. Для простоты примера возмем Delphi и библиотеку Indy. При приеме каждой посылки в этом случае возникает событие, на которое можно повесить обработчик. Вот собственно и все, думаю, любой современный компьютер бы справился. Тут хорошо видно принципиальное отличие в обработке поступающих данных - мы ничего в явном виде не опрашиваем, приходящие данные воздействуют на алгоритм обработки.

    Кстати, в Crestron подобный подход.

    STRING_INPUT some_data$[100]; // Так мы определяем вход для последовательных данных и макисмальный размер.

    CHANGE some_data$ // вызов при приеме данных

    {

    // здесь пишем нужный нам обработчик

    }


    Еще интересный пример:
    BUFFER_INPUT COM$[100]; // Это буферизованный вход, новые данные добавляются к старым
    STRING IN$[100];

    CHANGE COM$
    {
    IN$ = GATHER("\n", COM$); // Print сработает только тогда, когда в буфере появиться символ "\n", благодаря "STRING Gather(STRING Delimiter, STRING SourceString [INTEGER TimeOut]);"

    PRINT("The value of IN$ is %s\n", IN$);
    }
    Последний раз редактировалось Петр Петрович; 08.08.2021 в 23:04.

  6. #3326
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    А работал ли кто с NBS.TCP_ReadBuffer ? Не знаете случайно, там накапливающий буфер? Можно ли извлечь данные сразу для нескольких посылок от удаленной стороны?
    Вопрос сформулирован некорректно - буферизацией данных занимается не NBS.TCP_ReadBuffer.
    NBS.TCP_ReadBuffer - это блок, выполняющий операцию чтения из буфера сетевого адаптера.
    С его помощью (как, кстати, и с помощью обычного NBS.TCP_Read) можно "извлечь данные сразу для нескольких посылок от удаленной стороны".

  7. #3327

    По умолчанию

    > С его помощью (как, кстати, и с помощью обычного NBS.TCP_Read) можно "извлечь данные сразу для нескольких посылок от удаленной стороны".

    Интересно. Пока не нашел, как это сделать. Сложилось впечатление, что NBS.TCP_Read работает так:
    1. Вызываем FUNCTION_BLOCK TcpServer
    2. IF fbTcpRead.xReady THEN .... Если в этот момент есть поступившие данные, то определяем их длину через Bytes_Read_Count:=fbTcpRead.szCount;
    3. Выставляем глобальный флаг, что PLC_PRG следует обработать данные из массива байт abyRx

    Вот тут как бы Bytes_Read_Count:=fbTcpRead.szCount указывает на то, что это именно последние данные, прешедшие на момент чтения, а предыдущих данных уже нет,
    если их явно не сохранить как-то, разве нет? А как сохранитиь, не понятно. Внутри FUNCTION_BLOCK TcpServer это не сделать, т.к. он сам вызывается периодически. Замкнутый круг.

  8. #3328
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Цитата Сообщение от Петр Петрович Посмотреть сообщение
    > С его помощью (как, кстати, и с помощью обычного NBS.TCP_Read) можно "извлечь данные сразу для нескольких посылок от удаленной стороны".

    Интересно. Пока не нашел, как это сделать. Сложилось впечатление, что NBS.TCP_Read работает так:
    1. Вызываем FUNCTION_BLOCK TcpServer
    2. IF fbTcpRead.xReady THEN .... Если в этот момент есть поступившие данные, то определяем их длину через Bytes_Read_Count:=fbTcpRead.szCount;
    3. Выставляем глобальный флаг, что PLC_PRG следует обработать данные из массива байт abyRx

    Вот тут как бы Bytes_Read_Count:=fbTcpRead.szCount указывает на то, что это именно последние данные, прешедшие на момент чтения, а предыдущих данных уже нет,
    если их явно не сохранить как-то, разве нет? А как сохранитиь, не понятно. Внутри FUNCTION_BLOCK TcpServer это не сделать, т.к. он сам вызывается периодически. Замкнутый круг.
    https://dropmefiles.com/zUdup

  9. #3329

    По умолчанию

    Огромное спасибо. Внимательно изучаю. Пока не понятно только, что фактически отражает fbTcpRead.szCount. По идее, если буфер, то величина этого fbTcpRead.szCount должна увеличиваться. Пока, по крайней мере, буфер не будет очищен (или указатель не будет установлен на начало массива данных). В моем случае, кстати, этот fbTcpRead.szCount все время меняется, в том числе и в меньшую сторону. Бывает, он равен и 2. Это означает, например, что пришла логическая 1 или 0 и индекс сигнала в посылке длиной 2 байта.
    Последний раз редактировалось Петр Петрович; 09.08.2021 в 10:51.

  10. #3330

    По умолчанию

    Доброго Времени Коллеги ! снова появились у меня глупые вопросы ..на это раз не работает Modbus TCP Slave...вернее он вроде бы работает)) но данные с него не читаются...cl1.pngcl2.png
    Очень прошу помощи

Страница 333 из 711 ПерваяПервая ... 233283323331332333334335343383433 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 3197
    Последнее сообщение: 23.04.2024, 13:45
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 822
    Последнее сообщение: 20.11.2023, 17:48
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 245
    Последнее сообщение: 02.10.2022, 11:34
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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