Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 203

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

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

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

  2. #2

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Всегда ответ надо читать по 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 в 11:08.

  3. #3

    По умолчанию

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

  4. #4

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Интересная теория. Ну так в ком проблема ПЛК63?
    Эта теория многократно и успешно проверена на практике. В свое время я очень плотно занимался этими делами. В обмене по RS-485 в прстейшем случае учавствуют два устройства - Master и Slave. Проблемы могут возникнуть если некорректно работают с сетью или тот или другой или оба вместе.
    Если "железо" у ПЛК100 и ПЛК63 сделано совершенно одинаково, то, возможно, у Вас неисправен ПЛК63.
    А о каком коде речь, тот что написали Вы или тот, что зашит в ПЛК63 ?
    Последний раз редактировалось IVM; 22.03.2012 в 11:27.

  5. #5

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Всегда ответ надо читать по 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);
    приводит к ошибкам, про которые я говорил

  6. #6

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Так точно. Но почему тогда именно чтение по 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);
    приводит к ошибкам, про которые я говорил
    Если чтение пакета байт на ПЛК63 идет нормально, то и пользуйтесь этим, что Вы уперлись в чтение по одному байту. Чтение пакетом и быстрее и надежнее (сбоев при обмене будет меньше).

  7. #7

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Если чтение пакета байт на ПЛК63 идет нормально, то и пользуйтесь этим, что Вы уперлись в чтение по одному байту. Чтение пакетом и быстрее и надежнее (сбоев при обмене будет меньше).
    а здесь другое говорят

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

    Пример с таким чтением в 2 приёма я проверю, но не скоро.

  8. #8

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    а здесь другое говорят
    Глупость это. Еще раз повторяю: обмениваться пакетами байт и быстрее и надежнее. Это благо, что в SysLibCom такая возможность есть.
    Последний раз редактировалось IVM; 22.03.2012 в 11:53.

  9. #9

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Глупость это. Еще раз повторяю: обмениваться пакетами байт и быстрее и надежнее. Это благо, что в SysLibCom такая возможность есть.
    Конечно хорошо, что есть такая возможность. Полностью согласен.
    Но если в буфере порта 100 байт, а ты запрашиваешь 10, а потом еще 10, то теряются байты. Не всегда, но очень часто. Я упираюсь не затем, что хочу сказать какое г. делает Овен, там одни глюки и т.д. Я просто хочу разобраться в проблеме. Потому когда в реальном проекте начнешь делать обмен данными с 20 устройствами ( modbus, DCON, нестандартные протоколы ), и вроде все правильно, и алгоритм отлажен, до "дыр", и вдруг появляются мелкие, но жуткие, "косяки". Ты начинаешь заново отлаживать весь проект, сидишь пару дней, а потом оказывается что "косяк" в стандартной библиотеки. Ты конечно в это не веришь. Делаешь экспериментальный пример только на работу с портом. И оказывается, что проблема именно в библиотеки ( или как эта библиотека работаем на целевом контроллер )

  10. #10

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Конечно хорошо, что есть такая возможность. Полностью согласен.
    Но если в буфере порта 100 байт, а ты запрашиваешь 10, а потом еще 10, то теряются байты. Не всегда, но очень часто. Я упираюсь не затем, что хочу сказать какое г. делает Овен, там одни глюки и т.д. Я просто хочу разобраться в проблеме. Потому когда в реальном проекте начнешь делать обмен данными с 20 устройствами ( modbus, DCON, нестандартные протоколы ), и вроде все правильно, и алгоритм отлажен, до "дыр", и вдруг появляются мелкие, но жуткие, "косяки". Ты начинаешь заново отлаживать весь проект, сидишь пару дней, а потом оказывается что "косяк" в стандартной библиотеки. Ты конечно в это не веришь. Делаешь экспериментальный пример только на работу с портом. И оказывается, что проблема именно в библиотеки ( или как эта библиотека работаем на целевом контроллер )
    Вы, кажется, сами запутались и всех запутали. Пользуйтесь тем что работает и успокойтесь, хватит воду в ступе толочь.
    Последний раз редактировалось IVM; 22.03.2012 в 12:22.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. плк63-пм01 потеря байт
    от Elka в разделе ПЛК63/73
    Ответов: 35
    Последнее сообщение: 06.11.2012, 14:26
  2. потеря байтов в ответной посылке с периодом 4-5 с.
    от Смирнов Роман в разделе ПЛК1хх
    Ответов: 44
    Последнее сообщение: 23.04.2009, 07: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

Ваши права

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