[ОТВЕТИТЬ]
19.09.2012 22:24
NeferSky
 
Подскажите, люди добрые. Пытаюсь использовать драйвер весов от Mettler Toledo. Представляет из себя кучку библиотек, из одной из которых вызывается нужная мне функция (цитата из документации):
Код:
ireturn = Transfer_Ethernet_EX(“Transscale.ini”,251245664)
В реале вызвать ее получилось лишь по имени _Transfer_Ethernet_EX@8, ну да не в этом даже дело. Нашел пример использования этой функции на Си++, подключение и вызов выглядят так:
Код:
extern "C" __declspec(dllimport) unsigned __stdcall Transfer_Ethernet_EX(char *cTrfTxtout , int key);
Код:
 unsigned iback=Transfer_Ethernet_EX("Transscale.ini",251245664);
Сам я в Си не силен, но так понимаю, что "char *cTrfTxtout" - это указатель на что-то типа Char. В Делфи подключаю функцию:
Код:
type
  Transfer_Ethernet_EX = procedure(cTrfTxtout: ^PChar; Key: integer);

var
  DLLInstance: THandle;
  TransferProc: Transfer_Ethernet_EX;

begin
  DLLInstance := LoadLibrary('TransferEth.dll');
  @TransferProc := GetProcAddress(DLLInstance, '_Transfer_Ethernet_EX@8');
  if @TransferProc <> nil then TransferProc('Transscale.ini', 251245664);
  FreeLibrary(DLLInstance);
end;
Ругается, что Identifier expected, but '^' found на объявление в type. Так как мне там указатель применить? Интерпретируйте, пожалуйста, с Сей на Паскаль, если не затруднит...
20.09.2012 08:07
OlegON
 
Паскаль и Delphi - разные вещи. Я в Delphi уже давно не был. Но...
PChar - это и есть указатель. ^ там вообще никуда. И вообще, если объявлять, то ^ пишется впереди, т.е. PAnsiString = ^AnsiString
Остальное не смотрел, говори, если на что-то ругается, хотя, мне кажется, ты куда-то не туда побрел.
20.09.2012 09:02
NeferSky
 
Гм. А без ^ MT'шный драйвер говорит "ошибка откр. файла C:\Work\Delphi\Scale\PbB".
C:\Work\Delphi\Scale\ - это папка с проектом, а что такое PbB - мне невдомек. Выходит, функция вместо адреса файла подцепляет строку с именем?
20.09.2012 09:58
OlegON
 
А с чего ты взял, что _Transfer_Ethernet_EX@8 и Transfer_Ethernet_EX - это одно и то же? Думается, что ты просто не ту функцию вызываешь.
20.09.2012 12:09
NeferSky
 
В библиотеке в принципе есть только две функции:
unsigned iback=Transfer_Ethernet("Transscale.ini");
и
unsigned iback=Transfer_Ethernet_EX("Transscale.ini",251245664);

Меня интересует последняя. По имени "Transfer_Ethernet_EX" вообще ничего импортировать не получается (@TransferProc остается со значением nil). А подчерк, собачка и "8" в имени функции - я так понимаю, name mangling, результат работы Си при компиляции библиотеки.
20.09.2012 12:21
OlegON
 
странное name mangling, никогда не слышал, чтобы имена кромсались.
прогони какой-нибудь tdump или dumpbin, чтобы посмотреть, что в секции exports
20.09.2012 13:17
NeferSky
 
Turbo Dump Version 5.0.16.12 Copyright (c) 1988, 2000 Inprise Corporation
Display of File C:\TRANSFERETH.DLL
EXPORT ord:0001='Transfer_Ethernet'
EXPORT ord:0002='_Transfer_Ethernet_EX@8'

В общем, да, действительно с подчерком и собака-восемь, все честно...
Dumpbin'ом не располагаю...
20.09.2012 15:14
NeferSky
 
Решил проблему. Заработало вот так:
Код:
type
  Transfer_Ethernet_EX = procedure(cTrfTxtout: PChar; Key: integer); stdcall;
22.09.2012 17:52
NeferSky
 
Ого, как. Спасибо, будет полезно.
14.11.2012 17:41
Pyatak
 
Вот, написанный мной когда-то драйвер для загрузки весов с двухстрочной прошивкой. Полностью на Delphi без использования каких либо внешних библиотек или компонентов. Он не самый скоростной, но работает у нас уже 4 года.
Описания нет, кратко:
MT_Init() вызываешь в начале программы,
MT_Connect() для подключения к весам, возвращаемое значение этой функции используй в остальных функциях. Если подключиться не удалось, результат будет равен MT_ERROR.
После соединения можно:
MT_SendDateTime()
MT_SendBarcodeFormat()
MT_SendShopName()
MT_SendRunningString()
названия функций говорят сами за себя.
Самое главное:
MT_SendPLU2() отправка информации о товаре, вернёт true, если получилось и false, если нет.
Не забудьте MT_Disconnect()
и MT_End() перед завершением программы

Условие использования: Выложить сюда все модификации и доработки данного драйвера, если таковые будут иметь место.
Вложения
Тип файла: rar MTTigerDrv.rar (4.4 Кб, 320 просмотров)
10.04.2013 10:41
Pyatak
 
Хочу обратить внимание, что в драйвере был обнаружен маленький недочет. Перед работой с сокетами в Windows нужно вызвать функцию WSAStartup(), а по окончании работы WSACleanup(). Можно вставить вызов этих функций в MT_Init() и в MT_End(), если вы не вызываете их в другом месте вашей программы.
21.05.2013 10:41
Pendelyator
 
Pyatak, случаем не осталось описания протокола?
Мне удалось найти некоторое описание, однако, оно не включает интересующую меня структуру команды на загрузку этикетки.
04.09.2013 13:44
commanderz
 
Выкладываю как просил автор топика - доработанную версию его драйвера.

Папка: AddIn_Example02_02.pas
Компилировал EXE(my_test_proj.dpr) и DLL(AddIn_Example02_02.dpr) на Delphi 7 - успешно работает.
На Delphi XE2 откомпилировалось но не заработало, наверно нужно отключать unicode, или провести ревизию кода на предмет того что строки и символы стали юникодными.
-----------------------------------------------------------------
  • MTTigerDrv.pas - скачанный у вас и модифицырованный мной драйвер весов Mettler Toledo Tiger
  • my_test_proj.exe - тестирование драйвера MTTigerDrv.pas, умеет отправлять в весы: время, название магазина. Отправлять и принимать: товары с ценами, дополнительный текст с продолжениями.
  • AddIn_Example02_02.dll - Внешняя компонента AddIn_Example02 для системы 1С:Предприятие 8.2, используется здесь:
  • ВыгрузкаДанныхНаВесы.epf - пример 1С модуля для выгрузки на весы (используется Процедура ЗаписатьТоварНаВесыMettlerToledoByNikolas(АдресВСети, ТоварыДляВесов) /надеюсь разберетесь)
------------------------------------------------------------------

Признателен автору за столь неплохой подарок, и рад возможности помочь в ответ.
С вопросами можно писать мне сюда
Вложения
Тип файла: rar AddIn_Example02_02_pas_release_v1_00.rar (564.2 Кб, 269 просмотров)
24.04.2014 22:44
Pyatak
 
Цитата:
commanderz Признателен автору за столь неплохой подарок
Там кнопочка в сообщении специальная есть для выражения признательности)))
А если по существу, то описали бы в паре слов, что именно доработано.
28.09.2016 11:16
Netsky
 
Pyatak, данная версия для отправки данных на двухстрочные весы, не мог бы ты подсказать, что необходимо подкорректировать для отправки данных( интересует именно прогрузка справочника товаров) на однострочные весы? Весь код вроде как уже перекопал, не хватает навыков и знаний, по логике понял только что нет значения в переменной Name2, его закомментил, и массив для Name1 будет состоять только из 28 символов, все это учел, но в итоге нужного результата не достиг..(
30.09.2016 08:53
Netsky
 
Если вдруг кому будет нужно, вот описание строки для однострочных весов:
TMTCmdPLU = record
PHead: TMTPacketHeader;
CHead: TMTCmdHeader;
PLU: dword;
BarCode: array[1..13] of char;
Name1: array[1..28] of char;
c: char;
Price: dword;
TaxNo: byte;
TareNo: byte;
Nothing: array[1..2] of char;
FixWeight: dword;
GroupNo: word;
Flags: word;
ShelfLife:word;
SellBy: word;
MsgNo: word;
CRC: word;
20.08.2017 19:18
Frigat
 
Цитата:
commanderz Выкладываю как просил автор топика - доработанную версию его драйвера.
[*]my_test_proj.exe - тестирование драйвера MTTigerDrv.pas, умеет отправлять в весы: время, название магазина. Отправлять и принимать: товары с ценами, дополнительный текст с продолжениями.

С вопросами можно писать мне сюда
Добрый день. Пишу с надеждой, что автор еще на форуме )
my_test_proj.exe - крашится при запуске на windows 7
При попытке скомпилировать еще из исходников жалуется на отсутствие DB.dcu:
[Fatal Error] AddInDoc.pas(9): File not found: 'Db.dcu'

Что можно попробовать сделать?
19.10.2017 22:11
neALEX
 
commanderz, Pyatak, Добрый вечер! Пытаемся передать на весы информацию по ингридиентам (в нескольких блоках), не все получается. Где Вы брали информацию по описанию протокола обмена с весами?
Опции темы


Часовой пояс GMT +3, время: 20:09.

 

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