公司需要纸币器开发,参考纸币器文档和网上的一篇vb版本,代码如下:

# -*- coding:utf-8 -*-
# Author: Pete Yim<xpHook@gmail.com>
# Date : 13-7-31 import threading
import serial
from time import sleep GLOBAL_COUNT = 0 GLOBAL_OUT_INIT_NUM = 0
GLOBAL_OUT_CHECK_NUM = 0
COMMAND_INIT_FLAG = False
COMMAND_CHECK_FLAG = False
COMMAND_OUTPUT = ''
GLOBAL_CASH_1 = 0
GLOBAL_CASH_5 = 0
GLOBAL_CASH_10 = 0
GLOBAL_CASH_20 = 0
GLOBAL_CASH_50 = 0 SERIAL_SETTING = {
'PORT' : 4,
'BAUDRATE' : 9600,
'BYTESIZE' : serial.EIGHTBITS,
'PARITY' : serial.PARITY_NONE,
'STOPBITS' : serial.STOPBITS_TWO
} DATA_OUT_DIC = {
'DATA_OUT_1' : '7F8001116582',
'DATA_OUT_2' : '7F000123C988',
'DATA_OUT_3' : '7F800226FC3B56',
'DATA_OUT_4' : '7F000125DD88',
'DATA_OUT_5' : '7F0004240301126757',
'DATA_OUT_6' : '7F0001051E08',
'DATA_OUT_7' : '7F8001195602',
'DATA_OUT_8' : '7F0001093608',
'DATA_OUT_9' : '7F8001071202',
'DATA_OUT_10' : '7F0003029F0021DA',
'DATA_OUT_11' : '7F80010A3F82',
'DATA_OUT_12' : '7F0001071188',
'DATA_OUT_13' : '7F8003029F002266',
'DATA_OUT_14' : '7F00010A3C08'
} class CashSerial(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.__terminate = False def open(self, settings):
try:
self.serial = serial.Serial(port=SERIAL_SETTING['PORT'],
baudrate=SERIAL_SETTING['BAUDRATE'],
bytesize=SERIAL_SETTING['BYTESIZE'],
parity=SERIAL_SETTING['PARITY'],
stopbits=SERIAL_SETTING['STOPBITS'])
self.serial.flushInput()
self.serial.flushOutput()
global COMMAND_INIT_FLAG
COMMAND_INIT_FLAG = True
except Exception, msg:
return False, msg.message.decode("gbk") return True, "success" def resetArduino(self):
self.serial.setDTR(0)
sleep(0.1)
self.serial.setDTR(1) def terminate(self):
self.__terminate = True def send(self, data):
self.serial.write(data) def recv(self):
data, quit = '', False
while not self.__terminate:
try:
n = self.serial.inWaiting()
if n:
data += self.serial.read(n)
# for l in xrange(len(data)):
# print '%02X' % ord(data[l])
return data.encode('hex') except Exception as ex:
print str(ex) return data def close(self):
if self.serial.isOpen():
self.serial.close() def run(self):
running = True
i = 0
while running:
sleep(0.5)
# print '*******>> ' + str(i)
GLOBAL_COUNT = i
i = i + 1
#---------------------- self.exec_command_init()
sleep(0.02)
self.exec_command_check() global COMMAND_CHECK_FLAG
if COMMAND_CHECK_FLAG:
recvdata = self.recv()
# print "received data >>> " + str(recvdata)
self.exec_count_cash(recvdata) def exec_command_init(self):
global COMMAND_INIT_FLAG, GLOBAL_OUT_INIT_NUM, COMMAND_CHECK_FLAG
if COMMAND_INIT_FLAG:
GLOBAL_OUT_INIT_NUM += 1 if GLOBAL_OUT_INIT_NUM == 1:
send_data = str(DATA_OUT_DIC['DATA_OUT_1']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 2:
send_data = str(DATA_OUT_DIC['DATA_OUT_1']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 3:
send_data = str(DATA_OUT_DIC['DATA_OUT_1']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 4:
send_data = str(DATA_OUT_DIC['DATA_OUT_2']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 5:
send_data = str(DATA_OUT_DIC['DATA_OUT_3']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 6:
send_data = str(DATA_OUT_DIC['DATA_OUT_4']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 7:
send_data = str(DATA_OUT_DIC['DATA_OUT_1']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 8:
send_data = str(DATA_OUT_DIC['DATA_OUT_5']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 9:
send_data = str(DATA_OUT_DIC['DATA_OUT_1']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 10:
send_data = str(DATA_OUT_DIC['DATA_OUT_6']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 11:
send_data = str(DATA_OUT_DIC['DATA_OUT_7']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 12:
send_data = str(DATA_OUT_DIC['DATA_OUT_1']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 13:
send_data = str(DATA_OUT_DIC['DATA_OUT_8']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 14:
send_data = str(DATA_OUT_DIC['DATA_OUT_9']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 15:
send_data = str(DATA_OUT_DIC['DATA_OUT_10']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 16:
send_data = str(DATA_OUT_DIC['DATA_OUT_11']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 17:
send_data = str(DATA_OUT_DIC['DATA_OUT_12']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 18:
send_data = str(DATA_OUT_DIC['DATA_OUT_13']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 19:
send_data = str(DATA_OUT_DIC['DATA_OUT_14']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 20:
send_data = str(DATA_OUT_DIC['DATA_OUT_9']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 21:
send_data = str(DATA_OUT_DIC['DATA_OUT_12']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_INIT_NUM == 22:
send_data = str(DATA_OUT_DIC['DATA_OUT_9']).decode('hex')
GLOBAL_OUT_INIT_NUM = 0
COMMAND_INIT_FLAG = False
COMMAND_CHECK_FLAG = True
self.send(send_data) def exec_command_check(self):
global COMMAND_CHECK_FLAG, GLOBAL_OUT_CHECK_NUM
if COMMAND_CHECK_FLAG:
GLOBAL_OUT_CHECK_NUM += 1 if GLOBAL_OUT_CHECK_NUM == 1:
send_data = str(DATA_OUT_DIC['DATA_OUT_12']).decode('hex')
self.send(send_data)
elif GLOBAL_OUT_CHECK_NUM == 2:
send_data = str(DATA_OUT_DIC['DATA_OUT_9']).decode('hex')
GLOBAL_OUT_CHECK_NUM = 0
self.send(send_data) def exec_count_cash(self, recvdata=''):
if recvdata:
cach_data = recvdata[8:12]
if cach_data == 'ef01':
global GLOBAL_CASH_1
GLOBAL_CASH_1 += 1
print '1块钱:' + str(GLOBAL_CASH_1) + '张。'
if cach_data == 'ef02':
global GLOBAL_CASH_5
GLOBAL_CASH_5 += 1
print '5块钱:' + str(GLOBAL_CASH_5) + '张。'
if cach_data == 'ef03':
global GLOBAL_CASH_10
GLOBAL_CASH_10 += 1
print '10块钱:' + str(GLOBAL_CASH_10) + '张。'
if cach_data == 'ef04':
global GLOBAL_CASH_20
GLOBAL_CASH_20 += 1
print '20块钱:' + str(GLOBAL_CASH_20) + '张。'
if cach_data == 'ef05':
global GLOBAL_CASH_50
GLOBAL_CASH_50 += 1
print '50块钱:' + str(GLOBAL_CASH_50) + '张。' if __name__ == '__main__':
cserial = CashSerial()
result_status = cserial.open(SERIAL_SETTING) if result_status:
cserial.start() # data = "7F8001116582"
# hexdata = data.decode("hex")
#
# myserial.send(hexdata, _type=None)
#

  插入1元、5元纸币,识别结果为:

1块钱:1张。
5块钱:1张。

Python串口操作纸币器1的更多相关文章

  1. 面向切面编程AOP——加锁、cache、logging、trace、同步等这些较通用的操作,如果都写一个类,则每个用到这些功能的类使用多继承非常难看,AOP就是解决这个问题的,python AOP就是装饰器

    面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同.面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用. 举两个大家都接触过的AOP的例子: 1)java中myba ...

  2. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  3. [python基础]关于装饰器

    在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...

  4. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

  5. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

  6. Python文件操作与函数目录

    文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...

  7. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  8. Day11 Python基础之装饰器(高级函数)(九)

    在python中,装饰器.生成器和迭代器是特别重要的高级函数   https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...

  9. (转)Python中操作mysql的pymysql模块详解

    原文:https://www.cnblogs.com/wt11/p/6141225.html https://shockerli.net/post/python3-pymysql/----Python ...

随机推荐

  1. javaIo流实际应用

    /*查看目录下所有的文件*/ package cn.file; import java.io.File; public class Text2 { public static void main(St ...

  2. ObjectQuery查询及方法

    ObjectQuery 类支持对 实体数据模型 (EDM) 执行 LINQ to Entities 和 Entity SQL 查询.ObjectQuery 还实现了一组查询生成器方法,这些方法可用于按 ...

  3. PAT 1065 A+B and C (64bit) (20)

    1065. A+B and C (64bit) (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HOU, Qiming G ...

  4. PHP图片上传程序(完整版)

    从PHP100上搜刮来的,功能很强大.几乎考虑到了每个细节,与大家分享!~~~ <meta http-equiv="Content-Type" content="t ...

  5. zzuli oj 1178 单词数

    Description 统计一篇文章里不同单词的总数. Input 有多组数据,每组一行,每组就是一篇小文章.每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束. Output 每 ...

  6. 【web安全】第五弹:burpsuite proxy模块的一些理解

    作为一只小小小白的安全新手,只会简单的用sqlmap扫扫网站,用burpsuite的proxy模块拦截一些请求.最近又对proxy有点儿小理解,记录之. 1. 查看sqlmap注入的语句以及HTTP ...

  7. Latex 常用知识点存档

    前言: 本篇仅作为自己的知识存档. $Latex$是什么,就不用介绍了,网上好多教程和知识点,当忘记的时候搜一下就可以了. 本科做美赛和毕设的时候用的$Latex$排版,最近开始在博客园写点东东,发现 ...

  8. Nexus 7 跳过网络验证

     本文从著名安卓论坛 xda-developers 搬运而来,原文链接 http://forum.xda-developers.com/showthread.php?t=1909602 由于众所周知的 ...

  9. 动态网页技术---JSP

    JSP(全称JavaServer Pages)是由Sun Microsystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成HTML.XML或其他格式文档的Web网 ...

  10. 如何创建一个自定义jQuery插件

    简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...