Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
3-79653
OlegM
2004-01-30 22:25
2004.02.25
Вычислить максимально значение поля ?


1-79885
Budy
2004-02-10 07:31
2004.02.25
String to Real


1-79942
Zemal
2004-02-09 16:35
2004.02.25
Как получить из консольного приложения путь к исполняемому файлу?


1-79926
akiro
2004-02-09 17:59
2004.02.25
Как записать в реестр переменную типа tagWINDOWPLACEMENT ?


8-80034
andre
2003-10-26 16:33
2004.02.25
SDL_MIXER (Jedi-SDL)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский