shuralex / openbravoposru

Automatically exported from code.google.com/p/openbravoposru
0 stars 0 forks source link

Подключение весов МАССА-К серии ВПМ #91

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Подскажите пожалуйста, есть весы МАССА-К 
ВП-15Т2 , как их подключить к OPENBRAVO

Original issue reported on code.google.com by solodk...@gmail.com on 11 Oct 2010 at 5:19

GoogleCodeExporter commented 9 years ago
Вот библиотека для работы с весами, и 
описание форматов файлов и протокола 
обмена данными. Помогите пожалуйста 
подключить , а то новые не охъота покупать 
этих есть 6 штук.

Original comment by solodk...@gmail.com on 11 Oct 2010 at 5:26

Attachments:

GoogleCodeExporter commented 9 years ago
К сожалению я не знаю как осуществить 
подключение весов с печатью этикетки к 
Openbravo POS. Мне удавалось подключить только 
весы передающие значение массы с весов на 
компьютер, посмотрите TVESVR4149.

Original comment by svinin...@gmail.com on 11 Oct 2010 at 6:30

GoogleCodeExporter commented 9 years ago
А этикетки не обязательно печатать , надо 
хотя бы их подключить так что бы они вес 
передовали

Original comment by solodk...@gmail.com on 11 Oct 2010 at 6:37

GoogleCodeExporter commented 9 years ago
В прилагаемом Вами описании протокола я 
такой команды не нашёл, если есть 
возможность найдите описание протокола к 
другим (не печатающим этикетки) весам 
Масса-К и тогда можно будет попробовать эту 
команду (если есть надежда что эту функцию 
в Ваших весах вообще не убрали) к Вашей 
модели весов.

Original comment by svinin...@gmail.com on 11 Oct 2010 at 8:16

GoogleCodeExporter commented 9 years ago
Вот все что нашел .Посмотрите еще и ВЫ на 
сайте massa.ru может что полезное и найдете

Original comment by solodk...@gmail.com on 11 Oct 2010 at 8:23

GoogleCodeExporter commented 9 years ago
Посмотрите еще здесь ИНТЕРЕСНЫЙ САЙТ 
scale-soft.com. 

Original comment by solodk...@gmail.com on 11 Oct 2010 at 8:24

GoogleCodeExporter commented 9 years ago
Вот еще

Original comment by solodk...@gmail.com on 11 Oct 2010 at 8:25

GoogleCodeExporter commented 9 years ago
Просто конкретно для модельного ряда ВПМ я 
не могу найти в описании возможности 
получить вес по запросу с компьютера, там 
везде идёт загрузка по PLU информации о 
товаре в память весов.

Original comment by svinin...@gmail.com on 11 Oct 2010 at 8:30

GoogleCodeExporter commented 9 years ago
А у меня не ВПМ у меня ВП-15Т2

Original comment by solodk...@gmail.com on 11 Oct 2010 at 8:35

GoogleCodeExporter commented 9 years ago
на сайте scale-soft.ru написано вот что:
Драйверы могут использоваться как 
COM-сервер для встраивания интерфейса весов 
в Windows-приложения (1С, Delphi, C++Builder, Visual Basic, VB 
Script, Visual C++ и др. - любая среда 
поддерживающая OLE-автоматизацию).

Драйверы позволяют получить подробную 
информацию о каждом этапе работы с весами.

Драйверы выполнены в едином интерфейсе, 
благодаря чему для работы с любыми весами в 
Вашем проекте, достаточно единожды 
написать обработку использования драйвера.

Original comment by solodk...@gmail.com on 11 Oct 2010 at 8:37

GoogleCodeExporter commented 9 years ago
Именно ВП-15Т2 я не нашёл на сайте Масса-К. На 
сайте scale-soft.ru сказано как это сделать через 
их драйвер, проблема в том что я не знаю как 
его внедрить в Openbravo POS.

Original comment by svinin...@gmail.com on 11 Oct 2010 at 8:43

GoogleCodeExporter commented 9 years ago
Так в том то и дело что я тоже не знаю, у вас 
был опыт работы с весами , а у меня нет.
Может все таки попробуете что то сделать , а 
то я вообще ничего не понимаю в этом.
Если существует драйвер то уже пол дела 
сделано. Осталось только понять как 
внедрить.
НУ ОЧЕНЬ НАДО!!!!

Original comment by solodk...@gmail.com on 11 Oct 2010 at 8:48

GoogleCodeExporter commented 9 years ago
Опыта по внедрению весов с печатью 
этикеток у меня тоже нет :( Опыт есть по 
подключению весов в обход системных 
драйверов, команда на получения веса 
подавалась напрямую через com-порт на весы 
посмотрите как это делалось 
http://code.google.com/p/openbravoposru/wiki/TVESVR4149 

Для реализации поддержки в Вашем случае я 
вижу два пути:

Первый. Написать обработчик через уже 
имеющийся драйвер под Windows. Такой вариант 
для фискального регистратора обсуждался в 
Issue 5, делал не я и по этому помочь советом в 
этом деле не смогу.

Второй. По описанию протокола написать 
загрузчик (можно сказать драйвер) на 
основании команд работающих с PLU 
устройства напрямую. Дело это не простое, 
но от чего следует "плясать" и на каких 
принципах вести разработку можете 
посмотреть на примере похожего по принципу 
работу с Openbravo POS устройства 
http://code.google.com/p/openbravoposru/wiki/MERCURY130.

Оба варианта будут требовать создания 
специальной кнопки в меню справочника 
Товары, по нажатию которой сведения (PLU и 
название) о товарах будут передаваться на 
весы, подобным образом сейчас сделана в 
Openbravo POS поддержка ТСД Metrologic Scanpal 2 и ККМ 
Меркурий-130.

Original comment by svinin...@gmail.com on 11 Oct 2010 at 9:52

GoogleCodeExporter commented 9 years ago
Появились у меня весы Масса-К и я начал их 
интеграцию в Openbravo POS. Начал с простого 
сделал снятие массы с весов МК А21 
http://www.massa.ru/products/detail.php?ID=11 У Вас модель 
старая может заработает, в новой модели ВПМ 
точно не работает.

Изменения кода r461, в ветке /trunk

Original comment by svinin...@gmail.com on 10 Apr 2011 at 4:22

GoogleCodeExporter commented 9 years ago
Начал реализовывать загрузчик в весы 
МассаК ВПМ_Ф, но упёрся в алгоритм расчёта 
CRC-16. Вот его вариант идущий в инструкции к 
весам:

word CRC16(word crc, byte *buf, word len)

{
  word bits, k;
  word accumulator, temp;
  for( k = 0; k<len; k++ )
  {
     accumulator = 0;
     temp = (crc>>8)<<8;
     for( bits = 0; bits < 8; bits++ )
     {
       if( (temp ^ accumulator) & 0x8000 )
          accumulator = (accumulator << 1) ^ 0x1021;
      else
          accumulator <<= 1;
      temp <<= 1;
     }
    crc = accumulator^(crc<<8)^(buf[k]&0xff);
   }
   return crc;
}

Если по нему рассчитывать CRC для строки 
байт:
0xF8, 0x55, 0xCE, 0x05, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00

Должно получаться:
0x5B, 0x3F

Или для строки:
0xF8, 0x55, 0xCE, 0x05, 0x00, 0x41, 0x01, 0x00, 0x00, 0x00

CRC будет:
0xAC, 0x19

У кого есть соображения как это сделать 
пишите, буду рад любой помощи в реализации 
этого алгоритма.

Original comment by svinin...@gmail.com on 13 Apr 2011 at 4:23

GoogleCodeExporter commented 9 years ago
Вопрос по алгоритму расчёта CRC16 закрыт, 
спасибо Николаю Зотову.

Основной проблемой для меня оказалось 
представление в Java следующего условия:

В C (это в руководстве)

if( (temp ^ accumulator)&   0x8000 )

В Delphi (это вчера выпросил у производителя 
весов)

if ((temp xor acc) and $8000)<>0

В Java (вариант Николая Зотова)

if (((temp ^ accumulator)&   0x8000) == 0x8000) 

А в итоге алгоритм должен выглядеть так:

    public static int CRC16(short crc, byte[] buf, int len, int tab) {
        short bits;
        short accumulator, temp;

        for (int k = tab; k < len; k++) {
            accumulator = 0;

            temp = (short) ((crc >> 8) << 8);

            for (bits = 0; bits < 8; bits++) {

                if (((temp ^ accumulator) & 0x8000) == 0x8000) {
                    accumulator = (short) ((accumulator << 1) ^ 0x1021);
                } else {
                    accumulator <<= 1;
                }
                temp <<= 1;
            }
            crc = (short) (accumulator ^ (crc << 8) ^ (buf[k] & 0xff));
        }
        return crc;
    }

При отправке начальных значений:

short crc = 0;
byte[] bytes = {(byte) 0xF8, (byte) 0x55, (byte) 0xCE, 0x05, 0x00, 0x41, 0x01, 
0x00, 0x00, 0x00};
int len = bytes.length;
int tab = 5;

Получаем результат:

0x3F, 0x5B

Который при записи в сообщения запроса 
надо будет перевернуть. 

Про задание tab, т.е. отступа в пять байт от 
начала строки сообщения, узнал 
непосредственно от производителя весов 
(http://www.massa.ru/communication/forum/), жаль только это в 
явном виде не написано в руководстве, 
достаточно бы времени сэкономило в поиске 
верного алгоритма.

Original comment by svinin...@gmail.com on 14 Apr 2011 at 5:54

GoogleCodeExporter commented 9 years ago
Первый прототип поддержки весов МассаК ВПМ 
готов. Испытать можно так:

- обновить код до r475;
- в настройках в параметрах сканера выбрать 
"massakvpm";
- указать порт подключения;
- включить весы и перезапустить программу;
- перейти в справочник товаров и нажать 
кнопку "massakvpm";
- в появившемся диалоговом окне начать 
загрузку товаров в весы.

Этот алгоритм работы предварительный, 
позже выложу подробную статью.

Original comment by svinin...@gmail.com on 18 Apr 2011 at 5:31

GoogleCodeExporter commented 9 years ago
Всё закончил интеграцию весов МассаК ВПМ_Ф 
в Openbravo POS. Финальный код в /trunk начиная с r477. 
Пробуйте, как будет время напишу wiki-статью 
по алгоритму работы в Openbravo POS.

Конечно ещё не всё работает гладко, нет 
реакции на ошибки загрузки и т.п. Главное 
что подключить весы с печатью этикетки к 
Openbravo POS удалось. Чтобы как-то подытожить 
эту тему проверьте код с моделью ВП-15Т2.

Для проверки пока надо выполнять условия: 
товар должен быть с штрих-кодом вида 2201234 (220 
это весовой префикс, 1234 это код PLU) и цена 
товара должна быть без налога. Префикс 
можно менять, но он должен быть одинаковым 
и в весах и в PLU.

Original comment by svinin...@gmail.com on 20 Apr 2011 at 6:50

GoogleCodeExporter commented 9 years ago
В r493 добавил поддержку казахского языка. 

Пока наверное с этими весами всё, до выхода 
0.3.0 добавлять ничего не буду. 

Проблемы в работе есть, но в основном они 
связанные с не полной реализацией 
алгоритма обмена. К следующей версии(если 
успею может уже внутри 0.3.0 сделаю патч) 
сделаю обработчик ответов получаемых от 
весов. Для следующей версии также планирую 
сделать выгрузку из весов по взвешенным 
товарам, доступ к этой функции будет из 
складских накладных, будет удобно 
контролировать перемещение товаров из 
весовой в торговый зал.

Всё это будет оформляться в новых темах, а 
эту тему закрываю.

Если кто-то попробует выгрузить в весы 
МАССА-К ВП-15Т2, пожалуйста сообщите 
результат, так как я до сих пор не знаю 
работает мой алгоритм с этими весами или 
нет.

Original comment by svinin...@gmail.com on 24 Apr 2011 at 6:58

GoogleCodeExporter commented 9 years ago
Думал это был последний патч, оказалось ещё 
кое-что надо было переделать в r497

Теперь в весы загружаются только товары с 
кодами в 7 знаков и начинающиеся на 
трёхзначный весовой код, задаваемый в 
ресурсе <название-pos>/properties значением тега 
<entry key="unitbarcode">, по-умолчанию задан весовой 
код 220.

Для отладки кода добавлена функция 
логирования отравляемых и принимаемых с 
весов сообщений в виде последовательности 
байт(hex-формат).

При начале загрузки товаров в весы 
отправляется команда на проверку 
состояния весов и только затем начинается 
загрузка сообщений по товарам. 

Original comment by svinin...@gmail.com on 26 Apr 2011 at 5:39

GoogleCodeExporter commented 9 years ago
Сейчас разбирался с весами и натолкнулся 
на протокол именно для весов серии МассаК 
ВП, как оказалось он кардинально 
отличается от протокола для серии ВПМ. Так 
как в начале этой темы был опубликован 
протокол для ВПМ и я в данной теме развивал 
работу в сторону реализации именно этого 
протокола, считаю необходимым в этой теме 
оставить только то, что касается весов 
серии Масса-К ВПМ, а по поддержки весов 
серии ВП создать новую тему Issue 132.

Также убрал всё программное обеспечение из 
этой теме оно есть на сайте http://www.massa.ru/

Original comment by svinin...@gmail.com on 29 Apr 2011 at 4:42