Форум OlegON > Программы и оборудование для автоматизации торговли > Оборудование > Торговые весы > Mettler Toledo

Описание протокола передачи данных на весы с чекопечатью Mettler Toledo Tiger P и Tiger PRO : Mettler Toledo

22.12.2024 21:16


23.11.2013 11:04
1. Подготовка конфигурационных файлов Mettler Toledo Tiger P и PRO



Для передачи информации на весы Тайгер-П используются две функции из динамической библиотеки TransferEth.dll, поставляемой вместе с программой управления весами SPCT. Одна из этих функций с вызовом ireturn=Transfer_Ethernet("Transscale.ini")

используется для загрузки PLU на весы из текстового файла , а другая с вызовом:

ireturn =Transfer_Ethernet_EX("Transscale.ini",251245664)

позволяет загружать на весы и получать с весов любую допустимую информацию в так называемом ”TxtCommand” формате, включая пересылку PLU в бинарном формате и формате со сжатием.

Указанные две функции, составляющие драйвер Ethernet Тайгер-П в процессе работы обращаются к файлу SCALEADDRESS.INI со списком IP адресов подключенных весов. Этот файл выглядит следующим образом:

[CONFIG]

MEDIA=1

COMPORT=2

THREADNUM=4

[2]

NAME=

IP=172.21.108.120

PORT=3001

[3] // Номер прибора

NAME= // Название весов вводить не обязательно

IP=172.21.108.121 // IP адрес

PORT=3001 // Номер порта всегда один и тот же =3001

[5]

NAME=

IP=172.21.108.126

PORT=3001

и может быть сформирован как вручную, так и с использованием программы SPCT.

Следующий конфигурационный файл “Transscale.ini” используется для указания файла, в котором находится пересылаемая команда ( или несколько команд ) и номеров весов – получателей команды. В варианте ”SingleTrfOut” он выглядит следующим образом:

trf.out //Файл пересылаемой команды

2

3 //Номер весов

5

и также формируется в процессе работы программы SPCT. Для пересылки на разные весы различных наборов PLU возможно использование варианта рассылки ”MultiTrfOut”, при котором файл “Transscale.ini” имеет вид:

2: trf.out

3: trf1.out

5: trf2.out

Имя и расширение файла, в котором содержится строка команды может быть любым – использование в качестве примера “trf.out” обусловлено тем, что в одноименный файл помещается последняя по времени исполняемая команда в процессе работы SPCT. Она

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

Исключение составляет команда 260 – формата этикетки, которая формируется программой “Visedit.exe” и помещается в файл “trf.out”, а также команда пересылки PLU в сжатом формате, имеющая расширение .lz - последняя формируется с помощью

“CompressLZ77.dll“.

В процессе работы SPCT формируется множество файлов, в которых протоколируются выполняемые действия. В частности, при необходимости получения информации о результатах прохождения команды, заголовках передаваемых пакетов и т.п. могут быть использованы файлы ”trf’Nr_scale’.in.log” и “log.hex”.

2. Загрузка данных в весы Меттлер Толедо Tiger P и PRO

1) Загрузка PLU

А) в формате “txt”

Наиболее удобный способ загрузки PLU – с использованием функции

ireturn=Transfer_Ethernet("Transscale.ini")

и текстового формата хранения PLU.

Текстовый формат PLU для однострочного варианта прошивки выглядит следующим образом :

PLU No, ArticleNo, GroupNo, Unit Price, Tare, ExtraTxtNumber, TaxRate, SellByDateOffset, BestByDateOffset, FixWeight, pricemethod(weight=0/count=1), priceoverwrite(yes=1/no=0), discount(yes=1/no=0),PLU Name

( пример: 1, 33, 1, 123.45, 0, 0,0, 0, 0, 0,0,0,0,АБВГДЕ )

а для двухстрочного, соответственно:

PLU No, ArticleNo, GroupNo, Unit Price, Tare, ExtraTxtNumber, TaxRate, SellByDateOffset, BestByDateOffset, FixWeight, pricemethod(weight=0/count=1), priceoverwrite(yes=1/no=0), discount(yes=1/no=0),PLU Name1, PLU Name2

( пример: 1, 33, 1, 123.45, 0, 0,0, 0, 0, 0,0,0,0,АБВГДЕ, ДЕЖЗ )

Помимо “ручного“ ( имеется в виду из пользовательской программы ) формирования

записей PLU, возможна конвертация в рассматриваемый формат *.txt из внутреннего формата хранения PLU в SPCT ( файлы *.plu ) . Для этого может быть использована, входящая в состав SPCT программа “convert.exe” в режиме PLU->TXT. При наличии в пользовательской системе выхода информации в формате EXCEL возможно двушаговое преобразование EXCEL->PLU, PLU->TXT и использование функции Transfer_Ethernet для пересылки данных в весы.

В процессе работы рассматриваемой функции передаются все записи PLU из файла *.txt. При необходимости загрузки одного PLU файл должен содержать одну соответствующую запись.

Как дополнительный результат работы драйвера ( после выполнения PLUFmtConvert.dll и CompressLZ77.dll ) формируются файлы &&trf!!.out и &&trf!!.lz PLU в “бинарном” и компрессированном формате.

Б) в бинарном формате

Загрузка PLU в весы осуществляется функцией

ireturn =Transfer_Ethernet_EX("Transscale.ini",251245664)

из предварительно сформированного при помощи PLUFmtConvert.dll файла &&trf!!.out.

В) в компрессированном формате

Загрузка файла &&trf!!.lz осуществляется функцией

ireturn =Transfer_Ethernet_EX("Transscale.ini",251245664).

Формирование &&trf!!.lz осуществляется на основе &&trf!!.out путем использования функции из динамической библиотеки CompressLZ77.dll.

Г) в ”TxtCommand” формате

Этот формат передачи является наиболее универсальным способом обмена PC c весами и пригоден для передачи любых команд, сохраняемых в файлах ”trf.out” и

”trf.txt”. Более того, система команд для весов Тайгер-П аналогична ( с небольшими отличиями ) системе команд TransL2 для торговых весов Мира и L2 производства Меттлер Толедо. Для передачи этих команд в весы Тайгер-П также используется вызов функции Transfer_Ethernet_EX("Transscale.ini",251245664).

Формат команды 207 передачи PLU для однострочной версии ПО выглядит следующим образом:

CMDHEADER"L06C13C28C01L08U01U02S04L11S04F04S03S03S03",

где заголовок CMDHEADER выглядит одинаково для всех команд:

"U01S05S04S04U02"

U01 = 0 - Передача , 1 or 3 - Отклик

S05 - Код команды ( 00207, ... )

S04 - Управл. поле( 0000 - Write, 0003-RDGE )

S04 = 0001 ( Номер отдела )

U02 = Номер весов ( в ПО весов не используется )

Аббревиатуры U, S, C, B, L, F описания полей означают, соответственно, unsigned byte, short int, char, byte, long, flag и используются в основном в целях информирования о формате хранения данных в ПО весов. Двузначное число после описания поля означает количество знаков в данном поле при символьном ( char ) представлении команды. Комбинация Rnn используется для сокращенной записи команды и означает повтор следующего поля nn раз.

Назначение полей команды 207:

L06 - PLU No.

C13 - Article No.

C28 - PLU Name

C01 - ' '

L08 - Unit Price

U01 - Tax Rate

U02 - Tare

S04 - nothing (0000)

L11 - Fix Weight

S04 - GroupNo

F04 - pricemethod:1;//0 bit

priceoverwrite:1;//1 bit

Dummy1:3;

discount:1;//5 bit

Dummy2:10;

S03 - BestByDateOffset

S03 - SellByDateOffset

S03 - ExtraTxtNumber

Пример команды передачи одного PLU выглядит следующим образом:

00020700000000000000010000000000123KOLBASA

0000998800100000000000000000010023005007009

При использовании ПО весов, рассчитанного на использование двух 30-символьных строк в названии товара формат команды 207 слегка меняется:

CMDHEADER"L06C13C30С30C01L08U01U02S04L11S04F04S03S03S03".



2) Удаление PLU

Для удаления PLU наиболее удобно использовать вызов функции

Transfer_Ethernet("Transscale.ini"),

при котором файл с описанием команды ”trf.out” состоит из строк вида:

а) D:10

D:15

D:17 – для удаления PLU Nr. 10, 15, 17.

б) D:A – для удаления всех PLU.



3) Загрузка названия фирмы

Выполняется с помощью функции

Transfer_Ethernet_EX("Transscale.ini",251245664)

командой 212, имеющей формат

CMDHEADER"S02C70",

где S02 =01;

С70 – текстовое поле названия фирмы.

Пример использования:

000212000000000001ООО "Три коня"

4) Загрузка рекламного текста



Выполняется с помощью функции

Transfer_Ethernet_EX("Transscale.ini",251245664)

командой 220, имеющей формат

CMDHEADER"S02C60",

где S02 – номер рекламного текста ( 1…10 );

С60 – текстовое поле рекламного текста.

Пример использования:

000220000000000005Благодарим за покупку!

5) Загрузка текста ингредиентов



Выполняется с помощью функции

Transfer_Ethernet_EX("Transscale.ini",251245664)

командой 209, имеющей формат

CMDHEADER"S03C200",

где S03 – номер текста ингредиентов ( 1…999 );

( Для макс. кол-ва ингредиентов от 1000 до 9999 используется формат S04 !!! )

C200 – текстовое поле ингредиентов.

Пример использования:

0002090000000100001Состав соль, сахар,крахмал, свинина,

0002090000000100002Условия хранения:

6) Загрузка формата свободно программируемой этикетки



Выполняется с помощью функции

Transfer_Ethernet_EX("Transscale.ini",251245664)

командой 260, имеющей формат

CMDHEADER"U02U02R02S03U01" //Label information

"R05U01R05S03R05S03R05U01B01R05S03R05S03R05U01" //Graf.objects

"U01U02U01R08S03" //Article / Extra Text

"U01B01R04S03" //Store Name

"U01B01R04S03" //Advertise Text /Special offer text

"R12U02R12U01R12S03R12S03R12C20" //special text

"R03U02R03U01R03S03R03S03" //date

"R03U01B01R12S03" //date text

"R03U01B01R12S03" //date cross

"U02B01R02S03U01B01R02S03" //EAN Code

"U02U01U02B01R02S03" //Weight

"U02U01R02S03C05" //Weight Unit

"U02U01U02R02S03" //Price

"U02U01R02S03C08" //Price Unit

"U02U01U02B01R02S03" //Amount

"U02U01R02S03C05" //Amount Unit

"U02U01U02R02S03" //FixWeight

"U02U01R02S03C08" //Nutrition value unit

"U02U01U02B01R02S03" //Plu

"U02U01U02B01R02S03" //Device number

"U02U01U02B01R02S03" //Ticket number

"R12U02R12U01R24S03R12C02" //Speicial value

Пример использования получен на основе загрузки этикетки 60x40 prepack из имеющейся библиотеки ”labels.lib”:

000260000000010001004643200112200130143101520000651280680660003333043443231015200006512805905900000000100014103103019000000000000074261046281000000

0000000031001010100000000000000000000000000284250049173122000000000000000000000161200079077104000000000000000000000TOTAL PRICE $ NET WT UNIT PRICE kg 000001000000000319000000105000019000319138000077020000020229000119000000000000000000000000000000000000000020800000019166010060404000000000 01007178104000000000 07007298194010160104$ 00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Координаты и размеры полей отсчитываются от левого верхнего угла этикетки и заданы в пикселах ( 1 пиксел=0.125мм ). Однако для загрузки с помощью драйвера удобнее использовать полученную с помощью графического редактора “VisEdit.exe” команду 260 из файла “trf.out”.

7) Другие часто используемые команды загрузки



Выполняются с помощью функции

Transfer_Ethernet_EX("Transscale.ini",251245664)

Форматы команд:

"00202", CMDHEADER"U01U01U01B01S04U01F04F04",//Operator Config

"00204", CMDHEADER"S03C20",//Operators

"00210", CMDHEADER"S04C20S04",//PLU Group

"00213", CMDHEADER"C50C50",//Running message

"00214", CMDHEADER"U02C01C18",//EAN-Codes

"00215", CMDHEADER"S02L08",//Tare

"00216", CMDHEADER"S03S04L06S04L06",//Preset Keys

"00218", CMDHEADER"S02S04",// Tax Rate

"00219", CMDHEADER"S02C30",//Date Text

"00221", CMDHEADER"S01C20C20S05",//Discount

"00223",CMDHEADER"S04C20C20U02U02U02U02U02U02U02U02U02U02U01",//Sp. Off. "00224", CMDHEADER"S04S04L06L08L08L08L08",//Sp. Offer Price

"00233",CMDHEADER"U03U03U03U03U03B01R16S04F04R99S04R10S04",//KeyCon

"00238", CMDHEADER"R06U01",//Day/Time

Для случая использования однострочных названий товаров параметры этикетки:

"00243",CMDHEADER"U01B01U02B01F04U02U02U02U02U01U01U01B01F04F04",

Для случая использования двустрочных названий товаров параметры этикетки:

"00243",CMDHEADER"U01B01U02B01F04U02U02U02U02U02U01U01U01B01F04F04"

Назначение конкретных полей указанных команд легко выяснить путем анализа содержимого файла “trf.out” при пересылке соответствующей информации в весы с помощью программы SPCT.



3. Чтение PLU



Процедура чтения всех PLU реализуется передачей в весы команды

0002070003000100000001

( формат CMDHEADER"L06C23" , где L06-поле номера PLU

C23 – поле из 23-х ' ' )

с помощью функции Transfer_Ethernet_EX("Transscale.ini",251245664)



Информация с весов помещается в бинарном формате в файл trf”Nr.Scale”.in.

Поскольку структура полей команды 207 известна, чтение записи, относящейся к конкретному PLU не является серьезной проблемой. Однако, задачу чтения одного определенного PLU можно упростить, если в поле L06 команды чтения задать номер интересующего нас PLU. В соответствии со значением управляющего поля 0003=ReadGreaterEquil, записи во входном файле будут начинаться с заданного номера PLU и продолжаться до максимального, имеющегося в весах. В этом случае достаточно ограничиться чтением первой записи из файла с расширением *.in.

Для весов Тайгер-П серии 3300 отличия в процедуре чтения PLU заключаются лишь в том, что значением управляющего поля может быть 0007=ReadAll, допускающее чтение только всех PLU.

4. Получение отчетов с весов Mettler Toledo Tiger P

Чтение отчетов реализуется передачей в весы команды

000909000200010100000001999999

( формат CMDHEADER"U02L06L06" , где U02-поле выбора вида отчета,

L06 L06– значения начального и конечного номера PLU )

с помощью функции

Transfer_Ethernet_EX("Transscale.ini",251245664)



Информация с весов размещается в бинарном формате в файле trf”Nr_Scale”.in.

Управляющее поле U02 может принимать 4 значения: 00, 01, 02, 99.

В случае выбора 00 формируется отчет по PLU, причем информация размещается в файле в соответствии с форматом:

FileHeader;//40 bytes

BYTE STX;// '02'

WORD command;//2 bytes '8D' '03'

BYTE control1;// '00'

BYTE control2;// '00'

struct PLUREPORT{

long int plu_nr;//4 bytes

char ArtNr[14];//14 bytes

char Name[28];//28 bytes

long int amount;//4 bytes

long int weight;//4 bytes

long int count;//4 bytes

}PluReport[5];//290 bytes

BYTE crc1;

BYTE crc2;

BYTE ACK;// '06'

Наибольшее число PLU в каждом отчете не превышает 5, поэтому для получения полного отчета требуется многократная посылка команды 909 с последовательно возрастающими значениями стартового номера PLU ( новый стартовый номер PLU должен на единицу превышать последний номер PLU из предыдущего отчета ). Конечный номер PLU команды 909 в рассматриваемом виде отчета особого значения не имеет.

При задании управляющего параметра, равным 01, реализуется итоговый отчет по весам в формате:

FileHeader;//40 bytes

BYTE STX;// '02'

WORD command;//2 bytes '8D' '03'

BYTE control1;// '01'

BYTE control2;// '00'

long int amount;//4 bytes

long int weight;//4 bytes

long int count;//4 bytes

BYTE crc1;

BYTE crc2;

BYTE ACK;// '06'

Полученные значения суммы, суммарного веса и кол-ва продаж в общем случае могут не совпадать с результатами суммирования значений, полученных в предыдущем отчете. Вызвано это тем, что итоговый отчет содержит информацию о транзакциях, реализованных также и без выбора какого-либо значения PLU.

Начальное и конечное значения PLU команды 909 при формировании этого отчета не используются.

Выбор параметра 02 дает возможность получения информации об изменениях цен товаров. Формат представления информации следующий:

FileHeader;//40 bytes

BYTE STX;// '02'

WORD command;//2 bytes '8D' '03'

BYTE control1;// '02'

BYTE control2;// '00'

struct PRICE_CHANGE_REP{

long int plu_nr;//4 bytes

long int date;//4 bytes

int time;//2 bytes

long int oldprice;//4 bytes

long int newprice;//4 bytes

}PRICE_CHANGE_rep[5];//90 bytes

BYTE crc1;

BYTE crc2;

BYTE ACK;// '06'

Также как и в первом отчете при однократном использовании команды 909, максимальное кол-во записей равно 5. Полный отчет требует повторного запуска команды с изменяемыми значениями начального и конечного PLU. Максимально возможное кол-во записей этого отчета равно 800. Необходимо отметить, что в отчет попадают только PLU с непосредственным изменением цены, а не те, в которых цена изменилась из-за скидки или спец.предложения.

Параметр 99 обеспечивает удаление отчетов в памяти весов. При этом управляющее поле в CMDHEADER вместо 0002 ( READ ) должно принимать значение 0000 ( WRITE ).



5. Статус весов Меттлер Толедо Tiger P

Чтение текущего статуса весов

0002040003000000000

( формат команды CMDHEADER"S03" )



может осуществляться с помощью вызова функции

Transfer_Ethernet_EX("Transscale.ini",251245664)

Рассматриваемая команда на самом деле считывает список операторов из весов в файл trf”Nr.Sc.”.in. При отсутствии записей в списке продавцов в файле тем не менее имеется служебная информация. Алгоритм определения статуса ( Вкл/Выкл ) состоит в циклическом запуске команды 204 и анализе содержимого файла отклика trf”Nr.Sc.”.in.



6. Протокол передачи данных



Драйвер от производителя весов в виде набора dll файлов, входящих в состав SPCT ( TransferEth.dll, PLUFmtConvert.dll, ArcnetTxt_Bin.dll, CompressLZ77.dll, CrcModule.dll ), за предшествующие годы эксплуатации подтвердил высокую скорость и стабильность передачи данных в “ многопользовательском “ ( несколько весов в списке рассылки ) и “многозадачном” ( различные файлы команд ) режимах.

Тем не менее, некоторые пользователи предпочитают писать собственный драйвер, как правило, с целью передачи только команд загрузки PLU ( команда 207 ) и ингредиентов ( команда 209 ). “Открытый” вход для передачи любых из рассмотренных выше команд весов Тайгер-П обычно не реализуется из-за отсутствия синтаксического контроля команд.

Задача написания собственного драйвера для весов Тайгер-П не представляется очень сложной в силу того, что при пересылке любой информации с помощью программы SPCT в одном из файлов trf”Nr_scale”.in.log ( передача по Ethernet ) или log.hex ( передача по COM ) сохраняется протокол ( последовательность байт ) последней переданной команды. Эта подсказка оказывает существенную помощь при написании и отладке драйвера. Передаваемая последовательность в файле структурирована путем разбиения информации на 4 строки, при этом во второй и третьей строке содержатся описанные в предыдущих разделах заголовок и тело команды, соответственно, а первая и последняя строка содержат заголовок посылки и контрольную сумму. Для изучения удобнее использовать файл протокола передачи по Ethernet trf”Nr_scale”.in.log ( где ”Nr_scale” – номер весов ), поскольку в начале этого файла записан заголовок и тело команды в привычном символьном виде.

Первая строка ( заголовок посылки ) содержит семь байт и описывается структурой вида:

struct packetheader

{

unsigned char start; //start flag of one packet always 0x2

unsigned short totallength; //totallength = sizeof(cmdheader) + pagenumber * pagelength

unsigned short pagenumber; //the number of pages of itemdatas in this packet

unsigned short pagelength; //the length of each page of itemdatas

}

Передача всегда начинается с посылки стартового байта “02”, далее идут 2 байта общей длины посылки с учетом заголовка команды, потом кол-во страниц ( фактически кол-во пересылаемых последовательно команд ) и два байта длины тела команды.

Во второй строке содержатся 8 байт неоднократно описанного ранее заголовка CMDHEADER команды:

struct cmdheader

{

unsigned char cmdrsp; //command or response

unsigned short command; //command id such as 207,213 and so on

unsigned short control; //command type: RD(read) or WR(write) and so on

unsigned short departno; //department number always 1

unsigned char deviceno; //scale number

}

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

С - 1 байт; //char or unsigned char, 1 byte for each char

U - 1 байт; //BYTE //U01…U03

B - 1 байт; //BYTE //B01

F04 - 2 байта; //4 Hex flags, each 0…0Fh

S - 2 байта; //short int, int , unsigned int or WORD // S01…S05

L - 4 байта; //long int or unsigned long int // L06, L08, L11.

Таким образом, при пересылке данных под поле вида B01 или Uxx отводится 1 байт, поля F04 и Sxx кодируются двумя байтами, а каждое поле типа Lxx передается с помощью четырех байт. При этом в случае многобайтового представления первым передается младший байт, а последним – старший. Описанное преобразование используется не только в теле команды, но и в заголовках команды и пакета. Что касается текстовых полей вида Cnn, то каждый символ представлен в DOS – кодировке ( page 866 ) и передача текстовой строки занимает nn байт.

Четвертая ( последняя ) строка содержит два байта контрольной суммы, вычисляемой путем вызова функции:

unsigned short int Crc = CalcCRC16 ( char buf+1, unsigned int len-1 ),

из динамической библиотеки, находящейся в файле CrcModule.dll.

В буфер “buf” записывается вся сформированная посылка длиной len, но в формировании контрольной суммы не участвует первый “02” стартовый байт ( buf + 1, len – 1 ). Полученное двухбайтовое целое Crc добавляется к посылке в следующем порядке: сначала старший байт, затем – младший.
12.02.2018 11:40
Всем добрый день, не знаю жива тема еще или нет, но прошу помочь разобраться с третьим способом обмена данными.

Стоит задача загружать текст состава ингредиентов и сейчас организована загрузка через первый формат обмена но там это невозможно, как я понимаю.
Правильно ли я думаю что возможно в конец файла дописать команду по третьему формату с ингредиентами или же нужно собирать весь файл в третьем формате?
Часовой пояс GMT +3, время: 21:16.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.