Форум: "Система";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизПроблема приёма данных с СОМ порта Найти похожие ветки
← →
DelphiNew (2003-12-02 11:40) [0]Я работаю с весами CAS BW-150 принимаю данные через ком порт. По иструкции должно быть так: Длина сообщения 22 байта выглядит так <ST,GS, ,BU,8 байт данных,KG, и т.д.> мне нужны только 8 байт данных. Проблема в том что сообщение приходит разрозненным то есть эти 8 байт данных могут придти в начале сообщения, или в конце. Если у кого-нибудь есть идеи как обойти эту проблему поделитесь пожалуйста
← →
Reindeer Moss Eater (2003-12-02 12:18) [1]Если у кого-нибудь есть идеи как обойти эту проблему поделитесь пожалуйста
И в чем же твоя проблема?
← →
Лёша (2003-12-02 12:24) [2]не понял, по какой такой инструкции!?
что значит: сообщение приходит разрозненным то есть эти 8 байт данных могут придти в начале сообщения, или в конце?
если ты знаешь протокол, то в чем проблема?
Правда возможно, что пакет передается по частям(по 1 или 8 байт - например), но никак иначе.
← →
DelphiNew (2003-12-02 15:07) [3]2Reindeer Moss Eater
проблема в том что чтобы получить вес мне приходится несколько раз считывать информация с весов т.к. она приходит не упорядочнена
← →
DelphiNew (2003-12-02 15:10) [4]Вот код работы с ком портом, я использую компонент XCOMDRV
if CBType.Text="cas" then
begin
s:="";
libra.OpenDevice;
if libra.SendString("d")then
showmessage("ok");
// sleep(100);
if libra.ReadString(s) then
showmessage("read")
else
showmessage("not read");
libra.CloseDevice;
s:=copy(s,1,22);
if s="" then
s:="Сигнал с весов не получен";
end; // if CBType.Text="cas" then
Может здесь где-нибудь ошибка
← →
DelphiNew (2003-12-02 15:15) [5]2Лёша
не понял, по какой такой инструкции!?
что значит: сообщение приходит разрозненным то есть эти 8 байт данных могут придти в начале сообщения, или в конце?
1.Инструкция которая прилогается к весам
2. Т.е сначала может придти байты: о стабильности, байт указателей, байты данных. а может наоборот сначала байты данных потом байт указателей затем байт о стабильности. Естетвенно выводится на экран должен только вес бех лишней информациии
← →
Reindeer Moss Eater (2003-12-02 16:08) [6]проблема в том что чтобы получить вес мне приходится несколько раз считывать информация с весов т.к. она приходит не упорядочнена
Считай свои 22 байта из порта в приложение один раз, потом ищи в принятом блоке вес.
← →
miek (2003-12-02 17:02) [7]Примерно такое у меня было, когда я пытался железке посылать команды слишком часто. Часто нарушалась синхронизация, кусок команды мог прийти в начале следующей. Поэтому я взял другой компонент для COM_порта и понизил частоту запросов. Все OK с тех пор.
← →
Лёша (2003-12-03 12:20) [8]ну блин ты загнул!
1. научись работать с COM портом
2. изучи протокол обмена данными (не инструкция!) причём, кроме структуры данных, обрати внимание на физическую часть (настройки порта, задержки, итд)
3. научись осуществлять обмен данными на базе протокола
4. научись выделять нужные данные из полученного пакета, проверять пакет на корректность (структура и контрольная сумма)
ПРОТОКОЛ - это набор правил и требований соблюдаемых при обмене данными между двумя объектами. он включает в себя как логическую (структура пакета, ...), так и физическую части (интерфейс со всеми вытекающими последствиями, ...). несоблюдение требований протокола не может привести к коректному началу/продолжению/завершению сеанса обмена данными между объектами.
Хочу так же отметить, что фирма CAS выпускает качественное оборудоване и помоему мнению не может предложить пользователям глюкавый протокол.
← →
AbrosimovA (2003-12-03 15:36) [9]Иди сюда: http://disktrouble.narod.ru/rs232.html
← →
Denius (2003-12-04 15:35) [10]Ну во-первых все ShowMessage нафиг.
Во во-вторых, не надо постоянно открывать и закрывать порт. И кто тебе сказал, что девайс тебе успеет ответить за 100 миллисекунд? И вообще откуда такая цифра?
Потом, раз есть такие глюки, то readstring тебе не подходит... Попробуй readbyte...
Делай так. Посылай запрос sendstring"ом, потом типа делай While (not ++receivebyte++)) or (not timeOut) do application.Processmessages;
А таймаут стандыртным таймером выставляй. Гденить секунды 2...
И типа все будет красиво, а то если честна я чуток ужаснулся... Особенно када увидел Sleep(100)
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c