Меркурий-314. Получение данных по com-порту

Модели:
Меркурий 313, Меркурий 314, Меркурий 315, Меркурий 330
Ответить
Аватара пользователя
aol
Сообщения: 7
Зарегистрирован: 17 дек 2013, 09:00

Меркурий-314. Получение данных по com-порту

Сообщение aol »

Здравствуйте!

Подскажите, пожалуйста, вот по каким вопросам:

1) Допустим, я на платформу весов поставил груз (пусть будет ведерко с песком), нажал на "Т", на индикаторе отобразился нуль. Потом я некоторое количество песка отсыпал - на индикаторе "минус н-цать грамм", индикация стабилизации веса горит.
Если я в этот момент по ком-порту пошлю 0x03, то ответа не будет. Насколько это корректное поведение?

2) На платформе всё то же ведерко, в него тонкой струйкой сыплется песок. На дисплее вес постоянно меняется, индикатор стабилизации веса чаще не горит, чем горит. Если я в момент отсутствия стабилизации веса по ком-порту пошлю 0x03, то ответа не будет.
Как получить через ком-порт вес, который отображается на дисплее (пусть даже он не стабильный)?

У меня прошивка с контрольной суммой 3A167F.

Заранее спасибо за комментарии!
Аватара пользователя
pi1
Сообщения: 8
Зарегистрирован: 21 апр 2014, 08:34

Re: Меркурий-314. Получение данных по com-порту

Сообщение pi1 »

А мне непонятно, как это вообще работает: послать 0х03 и прочитать ответ. Если в цикле читать порт, то для отправки он будет занят. Что то в голове не складывается. Можно кусочек кода для вразумения?
Аватара пользователя
aol
Сообщения: 7
Зарегистрирован: 17 дек 2013, 09:00

Re: Меркурий-314. Получение данных по com-порту

Сообщение aol »

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");
    }
}   
Ну, и далее вариации на тему.... Можно блок чтение-запись положить в цикл и, например, после каждого ответа весов отправлять им новую команду.
Аватара пользователя
pi1
Сообщения: 8
Зарегистрирован: 21 апр 2014, 08:34

Re: Меркурий-314. Получение данных по com-порту

Сообщение pi1 »

Спасибо большое за ответ. Я вот, как узнал про Lazarus, то соскочить уже не могу :) nix- знаю не плохо, но на С не писал для них ничего, обходился perl+shell. Тут вот тоже понадобилось подключить весы Mercury m315 к своему детищу в Винде (tandem7pi), да что то не клеится. С ком-портом работаю через synapse (http://synapse.ararat.cz/doku.php) и через WinAPI. Весы от ШТРИХ-М подключал и через OLE и напрямую, а тут фирма солидная, примеры приводить не затрудняется, вот и приходится добывать классическим методом тыка. А какие параметры Вы в порту задали? Я не нашел прямого изложения этих параметров в документации, прилагаемой к устройству. А то что нашел в инете, местами не сходится :(
Аватара пользователя
aol
Сообщения: 7
Зарегистрирован: 17 дек 2013, 09:00

Re: Меркурий-314. Получение данных по com-порту

Сообщение aol »

pi1 писал(а):Я не нашел прямого изложения этих параметров в документации, прилагаемой к устройству
Документацию на протокол я нашел тут: http://incotexkkm.ru/cto/rem-doc/r-vesi ... rs232.html
И там в первых строчках сказано - "Используется протокол 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
В общем, с такими настройками всё работает хорошо.
Только на мои вопросы из первого поста никто отвечать не хочет... :(
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Меркурий-314. Получение данных по com-порту

Сообщение slan »

Контакты разработчика отправил Вам личным сообщением, на Ваши вопросы способен ответить только он
Аватара пользователя
pi1
Сообщения: 8
Зарегистрирован: 21 апр 2014, 08:34

Re: Меркурий-314. Получение данных по com-порту

Сообщение pi1 »

Спасибо, теперь есть уверенность в выбранных параметрах и можно искать блох в своем коде :)
А проблему Вашу обошел логически. Вес считывается ТОЛЬКО после нажатия продавцом "горячей" клавиши. При этом корректность результата коррелируется логической отрицательной обратной связью- глазами и руками продавца :)
Ответить