Украшение Марии-301МТМ

Попал в руки девайс Мария-301МТМ… Это украинский фискальный регистратор — принтиер кассовых чеков.
image

Протокол сего девайса открыт и любезно предоставлен производителем
Драйвера для работы с девайсом я нашел только платные и довольно старинные. Собственно это и подвигло к написанию статьи.

В наличии: старенький нетбук с COM портом. Первым делом запустил putty и проверил связь. Настройки пота paryty: Even; stopbit:2; spped:57600 передаем две буквы «U» и получаем «READY». Протокол работает, порт жив. На нетбуке от предыдущих опытов установлен mscomctl.ocx. Этого набора вполне достаточно чтоб написать сервис консоль для Марии.

В общем виде vbscript для получения конфигурации Марии выглядит так:

dim MSComm1 dim txt  function fillcmd(txtma)   ret = chr(253) & txtma & chr(len(txtma)+1) & chr(254)     fillcmd = ret  end function             function sendCmd(cmdTxt)   ret = ""   txt.writeline "cmd="+txtcmd   MSComm1.Output  = fillcmd(txtcmd)   WScript.Sleep(100)   ret = MSComm1.Input   txt.writeline "answ="+ret   sendCmd = ret end function  function initMaria()   txt.writeline "init"   MSComm1.Output="U"    WScript.Sleep(1)   MSComm1.Output="U"    WScript.Sleep(20)   rez = MSComm1.Input   txt.writeline "answ="+rez   initMaria = rez end function  function initComm()   Set MSComm1=CreateObject("MSCOMMLib.MSComm")   MSComm1.Settings = "57600,e,8,2"   MSComm1.CommPort = 2   MSComm1.InBufferCount = 0   MSComm1.PortOpen = True   MSComm1.DTREnable = True    set fso = CreateObject("Scripting.FileSystemObject")   set txt = fso.CreateTextFile("maria.log")    initComm = "Ready" end function  sub closePort()   MSComm1.DTREnable = False   MSComm1.PortOpen = False   Set MSComm1 = Nothing   txt.close   Set txt = Nothing end sub  res = initComm() res = initMaria()  'get maria configurarion txtcmd="CONF"  res = sendCmd(txtcmd)   closePort() 

Полезные функции:
initComm() — открывает порт и лог файл
fillcmd(txtma) обрамляет

Печать чека:

res = initComm() res = initMaria()  'user login txtcmd="UPAS111111111112345"  res = sendCmd(txtcmd)   'cancel check txtcmd="CANC"  res = sendCmd(txtcmd)   'open check txtcmd="PREP0"  res = sendCmd(txtcmd)   'add line txtcmd="FISC"&"арт         "&"000003000"&"000001000"&"00003"&"10"&_ "А02000"&"000000"&"000000"&"000000"&"000000"&"000000"&"000000"&"000000"&"0001" '+"&'"             "&"         "&"доп" res = sendCmd(txtcmd)   'close check txtcmd="COMP"&"0000003000"&"0000000000"&"0000000000"&"0000000000"&"0000000000"&"0000003000"   res = sendCmd(txtcmd)   closePort()  

Такого кода вполне достаточно чтоб печатать чеки, отчеты из 1С, ACESS, EXCEL
Думаю написать драйвер с использованием nativ-API на замену прежнему OLE32…

ссылка на оригинал статьи http://habrahabr.ru/post/199066/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *