python模块安装串口操作字节转换exe生成CRC计算

Posted 朝夕闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python模块安装串口操作字节转换exe生成CRC计算相关的知识,希望对你有一定的参考价值。

 python模块安装、串口操作、字节转换、exe生成、CRC计算

背景:
    第一次采用python制作小工具,已安装版本2.7.9的python;

1.pyCharm license注册问题
  采用License server, license server address:(http://xidea.online)

2.pyCharm下调试
  在文件下新建项目,然后再新建文件,就可以使用集成调试了;

3.串口操作--外部包
  可通过在cmd下直接运行:pip install pyserial

4.crc效验---外部包
  可通过windows下cmd运行:pip install crcmod
  
5.byte与ASCII码转化--内部包binascii

6.python生成EXE---外部包PyInstaller

7.串口操作API用法
(1)打开串口
API---Serial("COM19",115200)
  [注意]:这边有看到第一个参数有人写0(对应COM1),但提示输入错误,要求输入字符串类型,输入‘0‘依然不行;

(2)读操作
API---read(n)
  需要提前知道返回字符串长度
  返回str

API---readline()
  读取一行,以OA 或者OD结束
  返回str,str里面的值为ASCII码的字符形式,比如0X30需要写成‘3‘;对其处理,需要转化成十六进制;

API---readlines()
  读取多行,
  返回list

还有其它方案说是配合:
API---inwaiting()
  返回接收的字符串长度,再把这个值给read()来读取出来;
  测试没成功;

API---readall()
  测试没成功;

(3)写操作
API---write(data)
  data为str,str里面的值为ASCII码的字符形式的,比如0X33需要写成‘3‘;方法后面介绍;

8.byte转化为ASCII
API---unhexlify(data)
  将byte型(16进制的值);转化为ASCII字符形式的,如0X33代表字符‘3‘;用于组包后将数据转化为字符型,再传输;

API--hexlify(data)
  将ASCII字符数据,转化为byte(十六进制形式的),比如将接收的数据,进行处理后,再进行其它后续处理,如crc效验等;

9.crc效验
API--mkCrcFun(0x11021,rev=False,initCrc=0x0000,xorOut=0x0000)
   0x11021代表CRC-16 XMODEM(X16+X12+X5+1)
例子:
   crc16_Xmodem = crcmod.mkCrcFun(0x11021,rev=False,initCrc=0x0000,xorOut=0x0000)
   readFun = ‘68020000‘
   readCrcOUT = hex(crc16_cmodem(unhexlify(readFun)))
   输出来的值为0x1234之类的,str类型

10.PyInstaller
   python下将py文件编译成exe形式的方式有两种:PyInstaller和py2exe;
   安装方式:cmd下输入:pip install PyInstaller
  (1)操作方式
   在存放.py的文件夹下打开当前路径的cmd,然后pyinstaller -F 文件.py
   

[注意]:
1.pip install PyInstaller中千万要注意大小写,看了网上很多都是pyinstaller,然后一直安装不成功;
  pip install py2exe依然没有装成功;
2.关于PyInstaller和py2exe两者的比较,说是,用py2exe会在生成exe的文件夹里同时生产一堆文件,PyInstaller只会生成一个;
  另一方面:说是,py2exe对32位或者64位的相互支持不好,32位上生产的到64位上有可能不能用;我用的PyInsataller,在32位上生产,

64位上也可用;
3.PyInstaller区分32位和64位,安装和python位制一致的即可;
4.关于是否需要将用到的模块拷贝到 .py的目录下
  网上有人说需要放置在一起,我尝试了没有放置在一起,依然可以


11.字符串的处理
  (1)截取部分
   data = data[:-4]
   #将最后4个干掉
   
   data = data[2:4]
   #获取字符串中的第3和第4个
   
   (2)替换
    data = data.replace(‘需要被替换的内容‘,‘替换前者的内容‘)


[技巧]:
1.检测模块是否安装成功:模块安装完成后,可在cmd下输入python,再import 模块名,看看是否安装成功;
2.检测API返回值类型:print(type())
3.CRC模块算出来的值可以通过工具(CRC Calculator 图标是算盘)进行效验下


代码:
声明:没有做封装,也没有注意写法和命令等,纯粹为了实现功能和学习用;
# -*- coding:UTF-8 -*-
from serial import *
from binascii import *
from crcmod import *
import time

# def crc16Cal(x):
#     a = 0x0000
#     b = 0x1021
#     for byte in x:
#         a ^= ord(byte)
#         a <<= 8
#         for i in range(8):
#             a <<= 1
#             last = a & 0x8000
#             if last == 1:
#                 a ^= b
#     s = hex(a)
#     return s[4:6]+s[2:4]

readFun = ‘68020000‘
crc16_cmodem = crcmod.mkCrcFun(0x11021,rev=False,initCrc=0x0000,xorOut=0x0000)
readCrcOUT = hex(crc16_cmodem(unhexlify(readFun)))

readCrcOUT = readCrcOUT[2:4]+readCrcOUT[4:6]
print(readCrcOUT)
readFun += readCrcOUT
print(readFun)
readFun = unhexlify(readFun)

ser = Serial("COM19",115200)
print(readFun)
ser.write(readFun)

data = ser.read(58)

data =hexlify(data)
print(data)
data = data.replace(‘68023400‘,‘68033400‘)
print(data)
data = data[:-12]
print(data)
data += ‘03000000‘
print(data)
readCrcOUT = hex(crc16_cmodem(unhexlify(data)))
readCrcOUT = readCrcOUT[2:4]+readCrcOUT[4:6]
print(readCrcOUT)
data += readCrcOUT
print(data)
data = unhexlify(data)
ser.write(data)

#sleep
time.sleep(2)

#reset
reset = ‘68010000‘
readCrcOUT = hex(crc16_cmodem(unhexlify(reset)))
readCrcOUT = readCrcOUT[2:4]+readCrcOUT[4:6]
reset += readCrcOUT
reset = unhexlify(reset)
ser.write(reset)

ser.close()     

  

 

 



以上是关于python模块安装串口操作字节转换exe生成CRC计算的主要内容,如果未能解决你的问题,请参考以下文章

python对串口蓝牙模块的操作

pyinstaller 模块-python文件生成exe可执行文件

串口发送模块——1字节数据发送

用py2exe将python文件转换成exe可执行程序

python串口收包缓存设置

python 使用pyinstaller生成exe