Python串口操作纸币器1
公司需要纸币器开发,参考纸币器文档和网上的一篇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的更多相关文章
- 面向切面编程AOP——加锁、cache、logging、trace、同步等这些较通用的操作,如果都写一个类,则每个用到这些功能的类使用多继承非常难看,AOP就是解决这个问题的,python AOP就是装饰器
面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同.面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用. 举两个大家都接触过的AOP的例子: 1)java中myba ...
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- [python基础]关于装饰器
在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...
- Day04 - Python 迭代器、装饰器、软件开发规范
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
- python基础—函数装饰器
python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...
- Python文件操作与函数目录
文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- Day11 Python基础之装饰器(高级函数)(九)
在python中,装饰器.生成器和迭代器是特别重要的高级函数 https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...
- (转)Python中操作mysql的pymysql模块详解
原文:https://www.cnblogs.com/wt11/p/6141225.html https://shockerli.net/post/python3-pymysql/----Python ...
随机推荐
- IOS代理
之前看过一些关于代理的资料,始终感觉还是很模糊,最近抽出一段空闲的时间,将这块内容整理下: 什么是代理,顾名思义就是帮别人做些事情,比如买房子,当我们买房子时,我们一般会找房屋中介,因为他们就是干这件 ...
- Graphviz使用简介(中文乱码的问题)
Graphviz使用简介 graphviz是基于dot语言的绘图工具,可以画有向图.无向图.关系图.目录图.流程图等.具体作用可见它的官方网站 一些参考的网址: http://www.open-ope ...
- 学习JS
原型是Js中非常重要的概念,每个函数(在Js里面函数也是对象)都有一个叫prototype即原型)的属性,不过在一般情况下它的值都是null,但它他有一项非常重要的功能就是所以实例都会共享它里面的属性 ...
- QTcpsocket 实现FTP
http://blog.163.com/modingfa_002/blog/static/1109254662013111510358109/ http://baike.baidu.com/link? ...
- BZOJ 1052: [HAOI2007]覆盖问题
BZOJ 1052: [HAOI2007]覆盖问题 题意:给定平面上横纵坐标在-1e9~1e9内的20000个整数点的坐标,用三个大小相同边平行于坐标轴的正方形覆盖(在边界上的也算),问正方形的边长最 ...
- 1.MVC框架开发(初识MVC)
1.约定大于配置 Content:存放静态文件(样式表.静态图片等) Controllers:存放控制器类 Models:存放数据模型文件 Scripts:存放脚本文件 Views:存放视图文件,里面 ...
- 【Python网络爬虫三】 爬去网页新闻
学弟又一个自然语言处理的项目,需要在网上爬一些文章,然后进行分词,刚好牛客这周的是从一个html中找到正文,就实践了一下.写了一个爬门户网站新闻的程序 需求: 从门户网站爬取新闻,将新闻标题,作者,时 ...
- Clang 与 LLVM
我们在iOS调试中经常会看到Clang这个,那么Clang到底是什么呢?我们来简单了解一下. Clang是一个C.C++.OC语言的轻量级编译器.源代码发布于BSD协议下.Clang是由C++编写,基 ...
- 【JavaScript】JavaScript函数的参数
要访问js函数中传入的所有参数,可以使用特殊的arguments变量.但是虽然可以像访问数组一样从arguments变量中读取参数,但arguments并非真正的数组.例如,arguments没有pu ...
- 【网络流24题】No.8 机器人路径规划问题
[题意] 机器人 Rob 可在一个树状路径上自由移动. 给定树状路径 T 上的起点 s 和终点 t, 机器人 Rob 要从 s 运动到 t. 树状路径 T 上有若干可移动的障碍物. 由于路径狭窄, 任 ...