Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 36

Тема: плк63-пм01 потеря байт

  1. #1
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    258

    Question плк63-пм01 потеря байт

    В общем эпопея продолжается. На любом из двух портов RS-232 или на RS-485 наблюдается один и тот же эффект: ПЛК63 получает не все отправленные модемом байты. Одно время грешил на железо ПЛК, но учитывая то, что через этот же порт ПЛК замечательно перепрошивается (используется COM4 (с установленной колодкой, dip switch установлен на '1')), причина, очевидно, программная. На разных скоростях теряется разное количество байт. Не всегда одни и те же.

    Свернул голову, пытаясь найти причину, причины не вижу.
    Кабель соединения модема и ПЛК самопальный, трёхпроводной, RJ11-RJ45.
    Витая пара. Без экрана. Длиной примерно 20 см. У модема на винтовой колодке замкнут CTS-RTS.

    Настройка модема:
    AT&F
    ATE0
    AT+IPR=2400
    AT&W

    Проект прилагаю. Проект минималистический: отправляем модему AT&V, потом до посинения читаем результат. Получаем далеко не всё.

    Пожалуйста, помогите! Где же я всё-таки не прав? А то проект автоматизации полностью готов, даже градус на экране теперь добавили, осталось дело зацепить всё это к модему.
    Вложения Вложения

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

    По умолчанию

    Люди из поддержки, ну помогите, please... Попробуйте у себя прогнать проект. Могу всё оборудование привезти, если, например, ПЛК63 в дефиците...

    Чую, что близок локоток, да не укусишь...

    С уважением,
    К. Лебедев

  3. #3

    По умолчанию

    поясните, как в эксплуатации используется данная команда At&v, которая выдаёт огромный список текущих настроек? - я допускаю, что буфер не справляется.
    между отправкой команды и получением ответа желательно ставить задержку.
    плк63 мы найдём, попробуем прогнать.
    "ОВЕН"
    тел.: (495) 221-60-64 доб. 1224
    e-mail: i.karetkin@owen.ru

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

    По умолчанию

    в эксплуатации - никак. в эксплуатации из модема читаются смски которые могут быть достаточно длинны. поэтому At&v был взят за примитивную показательную замену. в моём случае байты начинают теряться с первых символов, а не, по достижении, скажем, 16 символов, или сколько там буфер у плк...

    спасибо за поддержку.

  5. #5

    По умолчанию

    cr:=SysComRead(com_num,ADR(rcvBUFstr),1,0);
    IF cr>0 THEN
    rcvBUFfull:=CONCAT(rcvBUFfull,LEFT(rcvBUFstr,DWORD _TO_INT(cr)));
    END_IF

    1. Вы принимает 1, только 1 байт, какие Left и CONCAT вообще нужны?
    2. Вы уверены, что принимаете только символы? Может прийти и символ с кодом 0x00 - он будет гарантированно потерян.
    Попробуйте следующий код:

    (* rcvBUFstr:='';*)
    i:=0;
    STRCOPY(rcvBUFfull,"",1);
    END_IF
    ELSE
    cr:=SysComRead(com_num,ADR(rcvBUFfull+i),1,0);
    IF cr>0 THEN
    i:=i+1;
    END_IF
    END_IF

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

    По умолчанию

    1. писав этот кусок я и предполагал, что я принимаю 1 байт, но в цикле - т.е. до посинения (или столько, сколько придёт). я же заранее не знаю длину ответа. в принципе, работает похоже. а Concat - чтобы собрать всё полученное сообщение в одну строку (в один буфер), который потом анализировать, что именно это было.
    т.е. идея следующая:
    а) даём команду прочесть сообщение (пока затычка в виде At&v)
    б) получаем сообщение (ответ на At&v)
    в) анализируем, что пришло: команда или опрос состояния (до сюда пока не дошли)
    г) выполняем и направляем смс с ответом (до сюда тоже)
    при этом понимаем, что смс может не дойти, задержаться на сутки в пути и т.д. т.е. применение исключительно бытовое и ни в коем случае не промышленное.
    2. по второму замечанию совершенно согласен, завтра вечером опробую. только строковый Concat появился недавно (в каком-то примере подсмотрел), раньше было сделано как раз через побайтное копирование буфера. всё было также. но для чистоты эксперимента завтра обязательно перепроверю.

  7. #7
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    258

    По умолчанию

    Попробовал код:
    i:=0;
    (* функцию STRCOPY не нашёл в библиотеках и компилятор её тоже сам не опознал
    STRCOPY(rcvBUFfull,"",1);
    пока оставил старый вариант
    *)
    rcvBUFstr:='';
    END_IF
    ELSE
    (* здесь чуть не так
    cr:=SysComRead(com_num,ADR(rcvBUFfull+i),1,0);
    если я правильно понял идею...*)
    cr:=SysComRead(com_num,ADR(rcvBUFfull)+i,1,0);
    IF cr>0 THEN
    i:=i+1;
    END_IF
    END_IF

    К сожалению - не изменилось ровным счётом ничего!
    Исправленный проект цепляю.
    Вложения Вложения

  8. #8

    По умолчанию

    давайте сделаем следующее. переведите в программе порт только на приём, а тх к модему подключите на другой порт (dbgu), другой плк или компьютерный.
    будут пропадать байты?

  9. #9
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    258

    По умолчанию

    Владислав, а нельзя ли случайно передавать байты модему по RS-485, а ответ получать по RS-232. Или наоборот? А то COM есть только у одного из компьютеров, и он на нём один. И через него CodeSys цепляется к ПЛК. Переключить порт на модем можно, но тогда сильно усложняется наблюдение за потерей байт?

    Или можно CodeSys к ПЛК зацепить по RS-485 вместо RS-232?

  10. #10

    По умолчанию

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

Страница 1 из 4 123 ... ПоследняяПоследняя

Ваши права

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