А я планировал читать по двукратному объему информации, и как только считал меньше чем нужно - беру предыдущий кусок, который содержит в себе 2х инфы, где точно есть нужный мне пакет.
Вид для печати
Если есть какой-то функционал остановки опроса и известен конец, то да, можно считывать с Х байта, ловить конец, проверять весь ли пакет попал в чтение и либо уже дочитывать новый пакет, либо разбирать полученное.
з.ы. подозреваю, что на ПЛК так быстро такие вещи не сделать, проще читать 2х пакета и искать начало и конец., надо прикинуть будет ли в этом случае коллизии, но вроде не должны. Либо два пакета будут полными, либо будет 1 обрезок + полный + 2 обрезок.
Samel честно не знаю можно ли. например в RapidScada разработчик по моей просьбе дорабатывал код остановки опроса, можно посмотреть у него в исходниках. Но вот под силу такое ПЛК, который кроме опроса еще должен заниматься кучей других дел ? На ПК то это в потоке отдельном работает.... А то тоже была с подобным проблема, потому что в протоколе не было фиксированной длины данных, пакеты из-за этого могли быть разной длины и не поддавались рассчету.
Валенок если правильно понял, то что-то было связано с Виндовым кодом работы с портом (NET Framework), нужно задать размер обязательно, и если мы задаем размер заведомо больше, чтобы все влезло, а пакет короткий по факту, привет Timeout.... По этому остановка была софтовая...
Дальше не вдавался в подробности почему, разработчик помог решить задачу, и ладно...
Если ПЛК аналогично может читать и сразу проверять, то отлично, можно реализовать по аналогии.
Как-то мне в голову не придет, реализовывать протокол Allen Bradley на ПЛК, там застрелиться проще... :)
Sergey666 DF1 (тоже RS485), переменная длина пакета, два вида контрольных сумм, при этом отличается состав пакета для проверки контрольной суммы и многое другое.
Хотя если их ПЛК вполне справляется с задачей, то возможно и другой справится, но боюсь там это реализовано на уровне прошивки самого ПЛК а не программы.
У вас дозирование. Вам надо реагировать на изменение веса как можно чаще. Это при взвешивании, можно себе позволить небольшую паузу.
Выделяйте для обмена отдельный поток, с минимальным временем цикла там только опрашивайте, и присваивайте глобальную переменную: "текущая масса". Если не успеваете, надо взять процессор помощнее или снизить частоту посылок. Чем чаще вы узнаете вес при дозировании, тем лучше.
Важно. Тут максимум - string -> int.
Кратко и по существу :)
А все и не надо. Необходимо, что бы время реакции системы было в 2-3 раза больше, чем поток дозирования в отношении к допустимой точности дозирования.
Задачи запускаются отдельным потоком.
Чаще всего, весовые терминалы отправляют "plain" данные, в виде строки.
Вы не чувствуете разницы между "как можно чаще" и "все"? Или у вас "разброд и шатание" сегодня?
Чем чаще вы снимаете данные с АЦП тензодатчика (ограничено скоростью преобразования АЦП), чем чаще вы получите данные в контроллере, и тем быстрее сможете отреагировать на заданный вес (ограничено скоростью контроллера, временем срабатывания исполнительных устройств, количеством материала, который уже невозможно остановить).
Конечно, если дозировать 2гр/мин при допустимой точности в +/-2 кг, можно и не торопиться. В дозу попадём. Видимо вы в таких условиях и работаете. Но у меня скорости дозирования выше. А так же требования к точности.
Написал чуть выше, поток в моем примере - 2гр/мин, точность +/- 2 кг. Я считаю, что разбираюсь, пишите аргументы, если не согласны.
Вы видимо много пенистого взяли. )
16 байт данных - там актуальное значение веса. Вы думаете Int (float) 16 байт занимает или string?
Как вы думаете на контроллерах реализуются несколько "задач" с разными циклами?
Тема превращается во флуд, пора закрывать!!! Нельзя принимать/обрабатывать данные чаще чем они приходят!!! Скорость 115200 размер пакета 22 байта - итого пакет отправляется/принимается за 2 мс, а ещё между пакетами по-любому есть время тишины. Так что 5 мс цикл программы решает все проблем!!! А в 110/160 в 5 мс можно запихнуть огого!!!!
Тема закрыта!
Это не вам, а ТС решать ))
Ну пофлудим
Кто-то с этим спорит ? Ранее сказано - "Чаще чем всё - не получится" - чтo-то не так ? теперь получится ?
Ну ? Что-то как-то выдернем и так пойдет. Не ? Ведь - да :
но
Получая всё - получается максимум уверености. А юзать можно и раз в год коли чаще смысла нет.
Про пример - понятно. А тута точно всё точно ?
Я думаю ? Оно мне надо ? Стынет же. 16 байт - это просто данные. Про это - есть.
А Вы накой-то додумываете. Может и угадали ..:
А может и нет )) Только время на гадания тратили.
Где здесь потоки ? (2й раз) Прямых данных от ТС нет, но раздел про ПЛК110[М02] а не абстрактные "контроллеры"
ps
Бывает - много 8( ??? Вы точно не с планеты эльфов ? Всегда мало !!
Боже, наконец-то я понял, что вы хотели написать ) Так бы сразу и сказали, чаще, чем остальной ввод/вывод (а то - никогда не говори никогда - какое-то )) ). Про Овен - не знаю, но в других системах это возможно, про прерыванию АЦП (готовность данных), остальной В/В при этом мне не нужен, нужен только 1 выход, который управляет потоком. Остальной ввод/вывод может работать гораздо медленнее.
На этапе проектирования часто кажется, что хватит...
Начинается... Цепляемся к мелочам. Хороший подход. "Время реакции меньше" - лучше звучит? На мой взгляд - нет.
Вам непонятно было, что я имею ввиду под фразой "там преобразование string - int". Я объяснил. Перечитайте.
Не хотите тратить время - не тратьте.
Я уже объяснил, почитайте мое предыдущее сообщение. У ТС это нет, это только мое предложение (в сообщении через одно до этого).
ЗЫ.
[/QUOTE]
Мне пиво тоже нравится. Именно тем, что слишком много его не выпить - в отличие от водки, которая при превышении нормы - просится наружу, пиво - тупо не лезет ))) Но когда оно уже не лезет - это много.