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
python -m pip install pyserial 也可以,如果pip路徑並沒有加入環境變量中 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()     
 
         

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM