Страница 13 из 21 ПерваяПервая ... 31112131415 ... ПоследняяПоследняя
Показано с 121 по 130 из 203

Тема: ПЛК63 + SysLibCom, потеря байтов

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

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Ответе, пожалуйста, вы сотрудник Овен?
    Если да, то значит у Вас можно уточнить тех. нюансы, которые отсутствуют в документации. Например может ли переполниться буфер порта rs-485 от приема 13 байт... А если это предположения, то у меня от своих уже голова пухнет
    Я не сотрудник ОВЕН, точно так же как процессор и набор микросхем используемый в ПЛК не принадлежит ихней торговой марке. После такого высказывания с Вашей стороны, мне лично не понятен Ваш вопрос, по поводу кто еще чего дельного скажет, успехов в самостоятельном плавании

  2. #122

    По умолчанию

    Схема тривиальная:
    1. открываем порт
    2. настраиваем порт
    3. очищаем буфер
    4. посылка запроса
    5. пауза
    6. чтение ответа
    7. пауза
    8. переход на пункт 3.

    Паузы стоят довольно большие 50ms. Этого времени вполне достаточно, чтобы полностью получить ответ из 13 байтов. К тому же если бы буфер и переполнялся бы,
    SysComRead( port, ADR( dest1 ), 5, 0 ) -> 5
    SysComRead( port, ADR( dest2 ), 5, 0 ) -> вернул тоже 5, но с мусором

  3. #123

    По умолчанию

    Ладно всем спасибо за участие, извините за потраченное на меня время

  4. #124

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Я не сотрудник ОВЕН, точно так же как процессор и набор микросхем используемый в ПЛК не принадлежит ихней торговой марке. После такого высказывания с Вашей стороны, мне лично не понятен Ваш вопрос, по поводу кто еще чего дельного скажет, успехов в самостоятельном плавании
    Извини, не хотел обидеть, поставить под сомнения квалификацию и т.д.
    Просто голова уже кругом идет. Я спрашивал о сотрудничестве с Овен, только потому, что рекомендации техподдержки можно считать официальными рекомендациями производителя.
    А предложениями "что-то такое попробовать" и "что-то додумать" я за два дня наелся. Данная тема изначально была ориентирована на техподдержку.

    Я ДЕЙСТВИТЕЛЬНО, НИКОГО НЕ ХОТЕЛ ОБИДЕТЬ

  5. #125

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Нашел на складе MBA8... Пример PR1 прекрасно работает.
    Внимание вопрос, считаете ли Вы замену корректной:

    Код:
    byte_read:=SysComRead(port_number, ADR(buf_otvet), 8, 0);
    на

    Код:
    byte_read:=SysComRead(port_number, ADR(buf_otvet[ 0 ]), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 1 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 2 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 3 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 4 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 5 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 6 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 7 ] ), 1, 0);
    я считаю, что авторитетно поставить крест определить корректность этого решения может Александр Приходько, создававший эти примеры. от себя могу сказать, что не вижу абсолютно никакого здравого смысла в восьми чтениях буфера по 1 байту вместо 1 чтения по 8 байт.
    что вам не нравится в примере? прочитали из буфера 8 байт, можете начинать проверять корректность посылки (адрес устройства, № функции...)
    p.s. единственное, что у меня вызывает некоторые сомнения - ваша таймерная пауза между отправкой команды в буфер и переходом к чтению буфера в 100мс. по моему мнению это многовато.
    Последний раз редактировалось swerder; 22.03.2012 в 10:37.

  6. #126

    По умолчанию

    Всегда ответ надо читать по 1 байту и сразу анализировать. Ожидать что пришли все байты и только нужное количество байт нельзя. По 1 байту считываем, каждый анализируем на корректность и принимаем решение о конце пачки/бракованной пачке.

    Пример с таким чтением в 2 приёма я проверю, но не скоро.
    Тролль-наседка, добрый, нежный и ласковый

  7. #127

    По умолчанию

    а кто их ждет? читаем, сразу проверяем, но пачкой читаем, а не поштучно.

  8. #128

    По умолчанию

    Цитата Сообщение от swerder Посмотреть сообщение
    я считаю, что авторитетно поставить крест определить корректность этого решения может Александр Приходько, создававший эти примеры. от себя могу сказать, что не вижу абсолютно никакого здравого смысла в восьми чтениях буфера по 1 байту вместо 1 чтения по 8 байт.
    что вам не нравится в примере? прочитали из буфера 8 байт, можете начинать проверять корректность посылки (адрес устройства, № функции...)
    p.s. единственное, что у меня вызывает некоторые сомнения - ваша таймерная пауза между отправкой команды в буфер и переходом к чтению буфера в 100мс. по моему мнению это многовато.
    Здравого смысла здесь и нет. Просто почему-то после такой замены пример не работает. А такая большая задержка была использована специально. За 100ms данный ответ с очень большой вероятностью окажется полностью в буфере "мастера". А дальше пытаюсь его прочитать из буфера, но не целиком, а частями. Я писал примеры, не с точки зрения практичности, а чтобы проблему, которую я описывал было легко обнаружить...

    Ладно это уже не важно, в следующих четырех проектах будем использовать контроллеры другого производителя.

    Всем спасибо за участие, терпение, и потраченное время. Всем удачи

  9. #129

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Всегда ответ надо читать по 1 байту и сразу анализировать. Ожидать что пришли все байты и только нужное количество байт нельзя. По 1 байту считываем, каждый анализируем на корректность и принимаем решение о конце пачки/бракованной пачке.

    Пример с таким чтением в 2 приёма я проверю, но не скоро.
    Если библиотека позволяет вести пакетный обмен, то и надо этим пользоваться. Вероятно, проблемы при обмене по RS-485 при использовании SysLibCom связаны с не совсем корректным управлением шиной сети. Порядок обмена по RS-485 должен быть такой:
    1) Master сети захватывает шину (сразу после подачи питание на устройство, выполняющего роль Maser);
    2) Master делает небольшую паузу и загружает выходной буфер пакетом байт, данные посылаются в сеть;
    3) Master после загрузки буфера держит шину пока весь пакет данных не будет выпихнут в сеть и не дойдет до Slave;
    4) Slave после приема пакета должен сразу захватить шину и только после этого Master отпускает шину и становится на прием.
    Передача от Slave к Master должна происходить аналогично. После приема пакета от Slave Master захватывает шину делает паузу и далее процедура повторяется.
    Очень важным моментом при обмене по RS-485 является то, что шина в каждый момент времени должна быть захвачена хотя бы с одной стороны, ну и процедура перехвата шины должна быть скоординирована. Если не учесть эти моменты (касается того, кто писал программу прошивки для ПЛК63), то может происходить то с чем столкнулся многострадальный monteg.
    Последний раз редактировалось IVM; 22.03.2012 в 12:08.

  10. #130

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Всегда ответ надо читать по 1 байту и сразу анализировать. Ожидать что пришли все байты и только нужное количество байт нельзя. По 1 байту считываем, каждый анализируем на корректность и принимаем решение о конце пачки/бракованной пачке.

    Пример с таким чтением в 2 приёма я проверю, но не скоро.
    Так точно. Но почему тогда именно чтение по 1 байт на ПЛК63 глючит.
    Чтение по 1 байту можно же считать частным случаем чтением двумя блоками.
    Заменя
    Код:
    byte_read:=SysComRead(port_number, ADR(buf_otvet), 8, 0);
    на
    Код:
    byte_read:=SysComRead(port_number, ADR(buf_otvet[ 0 ]), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 1 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 2 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 3 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 4 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 5 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 6 ] ), 1, 0);
    byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 7 ] ), 1, 0);
    приводит к ошибкам, про которые я говорил

Страница 13 из 21 ПерваяПервая ... 31112131415 ... ПоследняяПоследняя

Похожие темы

  1. плк63-пм01 потеря байт
    от Elka в разделе ПЛК63/73
    Ответов: 35
    Последнее сообщение: 06.11.2012, 15:26
  2. потеря байтов в ответной посылке с периодом 4-5 с.
    от Смирнов Роман в разделе ПЛК1хх
    Ответов: 44
    Последнее сообщение: 23.04.2009, 08:16
  3. SysLibCom
    от demon в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 20.03.2009, 13:08
  4. ПЛК 150 и SysLibCom.lib.
    от Анатолий в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 13.12.2008, 13:48
  5. SysLibCom 16#FF
    от powerind в разделе ПЛК1хх
    Ответов: 28
    Последнее сообщение: 28.10.2008, 13:41

Ваши права

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