Compare commits

..

No commits in common. "d87eb7a22bccd08b1ffc2044d92c17e67d77f8fa" and "82d18aee26d2f8275f99237125a56c41d8b4b480" have entirely different histories.

7 changed files with 60 additions and 93517 deletions

View File

@ -45,8 +45,8 @@ MKPcommands = {
'begin': '\x02', # STX 'begin': '\x02', # STX
'end': '\x03', # ETX 'end': '\x03', # ETX
'command': 'TZ{imageName};{printMode};{queueNo};{delay}\r{fieldContent}\r{counterStart}', 'command': 'TZ{imageName};{printMode};{queueNo};{delay}\r{fieldContent}\r{counterStart}',
'success': '([0-9]OK)', 'success': '\x06\x02([0-9])OK\x03',
'error': '([0-9]E[0-9])', 'error': '([0-9])E([0-9])',
'args': ['imageName', 'printMode', 'fieldContent'], 'args': ['imageName', 'printMode', 'fieldContent'],
'optArgs': ['queueNo', 'delay', 'counterStart'] 'optArgs': ['queueNo', 'delay', 'counterStart']
}, },

View File

@ -1,33 +1,33 @@
{ {
"ip": "192.168.40.30", "ip": "192.168.40.30",
"port": 8899, "port": 8899,
"name": "MKPsouplesse", "name": "MKPsouplesse",
"autoconnect": true, "autoconnect": true,
"keepalive": 5.0, "keepalive": 5000,
"timeout": 0.5, "timeout": 0.5,
"inkstat": 2, "inkstat": 2,
"printcmd": { "printcmd": {
"filename": "TM1.00I", "filename": "TM1.00I",
"dateformat": "%d%m%y-", "dateformat": "%d%m%y-",
"handshake": "*", "handshake": "*",
"printmode": "11", "printmode": "11",
"headstatus": [ "headstatus": [
"ink", "ink",
"htmr", "htmr",
"iuse", "iuse",
"xclk", "xclk",
"bat", "bat",
"txt", "txt",
"pause", "pause",
"headOk", "headOk",
"headTyp", "headTyp",
"labelCnt", "labelCnt",
"ztv", "ztv",
"cp", "cp",
"lx", "lx",
"exInk", "exInk",
"scStat", "scStat",
"inkStat" "inkStat"
] ]
} }
} }

View File

@ -6,29 +6,6 @@ Created on Sat Sep 28 11:41:21 2019
@author: Guido Longoni - guidolongoni@gmail.com @author: Guido Longoni - guidolongoni@gmail.com
""" """
#import protocol as p import protocol as p
#testala=p.callPrintImage(imageName='Pippus',printMode='10',fieldContent='qualcosa\rqualcosaltro\rciao') testala=p.callPrintImage(imageName='Pippus',printMode='10',fieldContent='qualcosa\rqualcosaltro\rciao')
def subChars(s):
subDict = {'\x02': " #STX ",
'\x03': " #ETX ",
'\x1B': " #ESC ",
'\r': " #CR ",
'\f': " #LF ",
'\t': " #TAB ",
'\x06': " #ACK ",
'\x15': " #NACK "
}
out = ""
for c in s:
if c in subDict.keys():
out += subDict[c]
else:
out += c
return out
t="\x06\x02OK\x03\r\n\t"
print(subChars(t))

File diff suppressed because it is too large Load Diff

View File

@ -7,63 +7,30 @@ import time
import sys import sys
import printer as p import printer as p
import logging import logging
import socket
import protocol import protocol
def main(): def main():
isRunning = True isRunning = True
lastAck = True
while isRunning: while isRunning:
printer = p.MarkoPrinter('./conf.json', LOGGER) printer = p.MarkoPrinter('./conf.json', LOGGER)
connessa = printer.connetti() connessa = printer.connetti()
printer.sendCommand(protocol.deleteMemory())
while connessa: while connessa:
lastTimestamp = int(time.time()*100)
commandString = protocol.callPrintImage(imageName='TM2.00I',
printMode='10',
fieldContent='{0}\r{0}'.format(lastTimestamp))
try: try:
if lastAck == True: printer.sendCommand(commandString)
lastTimestamp = int(time.time()*100) LOGGER.debug('SENT: {}'.format(commandString))
commandString = protocol.callPrintImage(imageName='TM2.00I', r=printer.readResponse('callPrintImage')
printMode='10', LOGGER.debug('RECEIVED: {}'.format(r))
fieldContent='{0}\r{0}'.format(lastTimestamp)) protocol.checkResponse('callPrintImage',r)
printer.sendCommand(commandString)
LOGGER.debug('SENT: {}'.format(subChars(commandString)))
lastAck = False
else:
r=printer.readResponse('callPrintImage')
LOGGER.debug('RECEIVED: {}'.format(subChars(r)))
if protocol.checkResponse('callPrintImage',r):
LOGGER.info("Stampa Riuscita: {}".format(lastTimestamp))
else:
LOGGER.error("Stampa Fallita: {}".format(lastTimestamp))
lastAck = True
except socket.timeout as t:
LOGGER.debug("Timeout stampa")
lastAck = False
printer.keepalive()
pass
except Exception as e: except Exception as e:
LOGGER.error(str(e)) LOGGER.error(str(e))
pass pass
pass pass
pass pass
def subChars(s):
subDict = {'\x02': " #STX ",
'\x03': " #ETX ",
'\x1B': " #ESC ",
'\r': " #CR ",
'\f': " #LF ",
'\t': " #TAB ",
'\x06': " #ACK ",
'\x15': " #NACK "
}
out = ""
for c in s:
if c in subDict.keys():
out += subDict[c]
else:
out += c
return out
if __name__ == '__main__': if __name__ == '__main__':
# Setup Logger # Setup Logger
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)

View File

@ -2,7 +2,6 @@ import socket
import json import json
import time import time
import protocol import protocol
import threading
import commands as cmd import commands as cmd
class MarkoPrinter: class MarkoPrinter:
@ -34,13 +33,11 @@ class MarkoPrinter:
self.connected = True self.connected = True
self.printSock.settimeout(0.5) self.printSock.settimeout(0.5)
self.checkStatus() self.checkStatus()
self.LOGGER.debug("Connessione Riuscita")
except socket.error as e: except socket.error as e:
self.printSock = None self.printSock = None
self.connected = False self.connected = False
self.LOGGER.debug("Connessione Fallita: {}".format(e)) self.log("Connessione Fallita: {}".format(e))
else: else:
self.keepaliveTimer.cancel()
self.printSock.close() self.printSock.close()
self.printSock = None self.printSock = None
self.connetti() self.connetti()
@ -64,7 +61,7 @@ class MarkoPrinter:
while c != b"\r": while c != b"\r":
inData += c inData += c
if len(inData) > 200: if len(inData) > 200:
self.LOGGER.error("Status Message Length Error") self.log("Status Message Length Error")
raise IOError raise IOError
c = self.printSock.recv(1) c = self.printSock.recv(1)
inData = str(inData, "ascii") inData = str(inData, "ascii")
@ -74,10 +71,10 @@ class MarkoPrinter:
self.headStatus[key] = int(inData[index]) self.headStatus[key] = int(inData[index])
else: else:
self.headStatus[key] = str(inData[index]) self.headStatus[key] = str(inData[index])
self.LOGGER.info("Status: {}".format(self.headStatus)) self.log("Status: {}".format(self.headStatus))
statusUpdated = True statusUpdated = True
except: except:
self.LOGGER.error("Status retreive error!") self.log("Status retreive error!")
return statusUpdated return statusUpdated
def upload(self, descr, datastr): def upload(self, descr, datastr):
@ -127,12 +124,11 @@ class MarkoPrinter:
self.printSock.settimeout(1.0) self.printSock.settimeout(1.0)
self.printSock.send(bytearray(c,'ascii')) self.printSock.send(bytearray(c,'ascii'))
self.printSock.settimeout(0.5) self.printSock.settimeout(0.5)
self.sending = False
return True return True
except socket.error as e: except socket.error as e:
self.LOGGER.error('Socket Error: {}'.format(e)) self.LOGGER.error('Socket Error: {}'.format(e))
return False return False
self.sending = False self.sending = False
pass pass
def readResponse(self, c): def readResponse(self, c):
@ -141,20 +137,17 @@ class MarkoPrinter:
respTerm = cmd.DEFprefix['end'] if cmd.MKPcommands[c]['defPrefix'] else cmd.MKPcommands[c]['end'] respTerm = cmd.DEFprefix['end'] if cmd.MKPcommands[c]['defPrefix'] else cmd.MKPcommands[c]['end']
if self.connected: if self.connected:
try: try:
# lettura bloccante del socket in attesa di conferma self.printSock.settimeout(1.0)
self.printSock.settimeout(5) self.printSock.setblocking(True)
c = self.printSock.recv(1) c = self.printSock.recv(1)
while c != respTerm: while c != respTerm:
buf += c buf += c
if str(c, 'ascii') == respTerm: if str(c, 'ascii') == respTerm:
break break
c = self.printSock.recv(1) c = self.printSock.recv(1)
# disattivo lettura bloccante
self.printSock.settimeout(0.5) self.printSock.settimeout(0.5)
self.printSock.setblocking(False)
return str(buf, 'ascii') return str(buf, 'ascii')
except socket.timeout as t:
self.reading = False
raise t
except socket.error as e: except socket.error as e:
self.LOGGER.error('Socket Error: {}'.format(e)) self.LOGGER.error('Socket Error: {}'.format(e))
return False return False
@ -163,12 +156,12 @@ class MarkoPrinter:
def keepalive(self): def keepalive(self):
statusUpdated = False statusUpdated = False
self.LOGGER.debug("Keepalive") if not self.sending:
if not self.sending and not self.reading: self.log("Keepalive")
if self.connected: if self.connected:
try: try:
self.printSock.send(b"\x1B*\r") self.printSock.send(b"\x1B*\r")
self.LOGGER.debug(str(self.printSock.recv(5))) self.log(str(self.printSock.recv(5)))
if self.inkStatCounter <= self.settings["inkstat"]: if self.inkStatCounter <= self.settings["inkstat"]:
self.inkStatCounter += 1 self.inkStatCounter += 1
else: else:

View File

@ -40,9 +40,9 @@ def _cmdString(cmdName, **cmdArgs):
def _checkError(cmdName, response): def _checkError(cmdName, response):
errKey = 'error' errKey = 'error'
cmdDict = cmd.MKPcommands[cmdName] cmdDict = cmd.MKPcommands[cmdName]
if errKey in cmdDict and cmdDict[errKey] is None: if errKey in cmdDict and cmdDict[errKey] is not None:
return None return None
error_codes = re.search(cmdDict[errKey], response, re.I) error_codes = re.match(cmdDict[errKey], response, re.I)
if error_codes: if error_codes:
return error_codes.groups() return error_codes.groups()
return None return None
@ -57,7 +57,7 @@ def checkResponse(cmdName, response):
return None return None
else: else:
return error return error
if re.search(cmdDict[sucKey], response, re.I): if re.match(cmdDict[sucKey], response, re.I):
return True return True
error = _checkError(cmdName, response) error = _checkError(cmdName, response)
if error is None: if error is None: