Попал в руки девайс Мария-301МТМ… Это украинский фискальный регистратор — принтиер кассовых чеков.
Протокол сего девайса открыт и любезно предоставлен производителем
Драйвера для работы с девайсом я нашел только платные и довольно старинные. Собственно это и подвигло к написанию статьи.
В наличии: старенький нетбук с COM портом. Первым делом запустил putty и проверил связь. Настройки пота parity: Even; stopbit:2; speed: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…
Автор: tarasii