Здравствуйте!
Подскажите, пожалуйста, вот по каким вопросам:
1) Допустим, я на платформу весов поставил груз (пусть будет ведерко с песком), нажал на "Т", на индикаторе отобразился нуль. Потом я некоторое количество песка отсыпал - на индикаторе "минус н-цать грамм", индикация стабилизации веса горит.
Если я в этот момент по ком-порту пошлю 0x03, то ответа не будет. Насколько это корректное поведение?
2) На платформе всё то же ведерко, в него тонкой струйкой сыплется песок. На дисплее вес постоянно меняется, индикатор стабилизации веса чаще не горит, чем горит. Если я в момент отсутствия стабилизации веса по ком-порту пошлю 0x03, то ответа не будет.
Как получить через ком-порт вес, который отображается на дисплее (пусть даже он не стабильный)?
У меня прошивка с контрольной суммой 3A167F.
Заранее спасибо за комментарии!
Меркурий-314. Получение данных по com-порту
Re: Меркурий-314. Получение данных по com-порту
А мне непонятно, как это вообще работает: послать 0х03 и прочитать ответ. Если в цикле читать порт, то для отправки он будет занят. Что то в голове не складывается. Можно кусочек кода для вразумения?
Re: Меркурий-314. Получение данных по com-порту
Добрый вечер.pi1 писал(а):А мне непонятно, как это вообще работает: послать 0х03 и прочитать ответ. Если в цикле читать порт, то для отправки он будет занят. Что то в голове не складывается. Можно кусочек кода для вразумения?
Кусочек, несомненно, можно, но вы бы намекнули на язык, операционку там... А то телепаты ж, как обычно, в отпуске.
В общем, я пишу на С под Linux. Пример из этой области и покажу.
Для неблокирующего чтения из порта используется select. Справка о нем находится на второй странице man.
Так же, есть обширные "труды" по программированию последовательного порта http://www.tldp.org/HOWTO/Serial-HOWTO.html
примерный ход мысли:
Код: Выделить всё
main() {
int fd;
fd_set readfs;
unsigned char cmd;
unsigned char reply[18]
struct timeval time;
fd = open("/dev/ttyS0"); /* COM1 */
cmd = 0x3;
fwrite(cmd, sizeof(char), 1, fd);
time.tv_sec = 0;
time.tv_usec = 800;
//если за 800 мс не получим ответ, то дальше не ждем
FD_ZERO(&readfs)
FD_SET(fd, &readfs);
if(select(fd + 1, &readfs, NULL, NULL, &time)) {
fread(reply, sizeof(char), 18, fd);
//тут в reply ответ весов
} else {
fprintf(stderr, "За 800 мс данных для чтения не поступило\n");
}
}
Re: Меркурий-314. Получение данных по com-порту
Спасибо большое за ответ. Я вот, как узнал про Lazarus, то соскочить уже не могу nix- знаю не плохо, но на С не писал для них ничего, обходился perl+shell. Тут вот тоже понадобилось подключить весы Mercury m315 к своему детищу в Винде (tandem7pi), да что то не клеится. С ком-портом работаю через synapse (http://synapse.ararat.cz/doku.php) и через WinAPI. Весы от ШТРИХ-М подключал и через OLE и напрямую, а тут фирма солидная, примеры приводить не затрудняется, вот и приходится добывать классическим методом тыка. А какие параметры Вы в порту задали? Я не нашел прямого изложения этих параметров в документации, прилагаемой к устройству. А то что нашел в инете, местами не сходится :(
Re: Меркурий-314. Получение данных по com-порту
Документацию на протокол я нашел тут: http://incotexkkm.ru/cto/rem-doc/r-vesi ... rs232.htmlpi1 писал(а):Я не нашел прямого изложения этих параметров в документации, прилагаемой к устройству
И там в первых строчках сказано - "Используется протокол RS-232, скорость 4800 бит/сек, старт-бит, 8 бит данных, 1 бит чётности, 1 стоп-бит (4800,8,p,1)"
и тут на форуме кто-то куски логов какого-то компонента выкладывал:
Код: Выделить всё
Размер вх./исх. очереди 1024/1024
Очистка порта: RXABORT, RXCLEAR, TXABORT, TXCLEAR
Таймауты: ReadInterval=-1, ReadTotalTimeoutMultiplier=0, ReadTotalTimeoutConstant=1000, WriteTotalTimeoutMultiplier=1000, WriteTotalTimeoutConstant=0
Скорость передачи 4800
RTS включен
DTR включен
Биты данных=8, Стоповые биты=1, Четность=Even
Только на мои вопросы из первого поста никто отвечать не хочет... :(
Re: Меркурий-314. Получение данных по com-порту
Контакты разработчика отправил Вам личным сообщением, на Ваши вопросы способен ответить только он
Re: Меркурий-314. Получение данных по com-порту
Спасибо, теперь есть уверенность в выбранных параметрах и можно искать блох в своем коде
А проблему Вашу обошел логически. Вес считывается ТОЛЬКО после нажатия продавцом "горячей" клавиши. При этом корректность результата коррелируется логической отрицательной обратной связью- глазами и руками продавца
А проблему Вашу обошел логически. Вес считывается ТОЛЬКО после нажатия продавцом "горячей" клавиши. При этом корректность результата коррелируется логической отрицательной обратной связью- глазами и руками продавца