import serial
#串口打开方式:
#1)带串口号和波特率
ser. interCharTimeout #字符間隔超時
print ser.portstr #能看到第一個serial的標示,windows下是COM1
ser #來查看當前serial的狀態
serial.Serial類——原生端口
class serial.Serial
{
__init__(port=None, baudrate=9600, bytesize=EIGHTBITS,parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, writeTimeout=None, dsrdtr=False, interCharTimeout=None)
#其中:
# bytesize:FIVEBITS、SIXBITS、SEVENBITS、EIGHTBITS
# parity: PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE
# stopbits: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO
#異常:
#ValueError:參數錯誤
#SerialException:找不到設備或不能配置
ser = serial.Serial('COM6',115200)
ser.open():打開串口
ser.close():立即關閉串口
ser.isOpen() #確認ser物件是否已經被打開 若被打開回船True
__del__():析構函數
#只讀屬性:
name:設備名字
portstr:已廢棄,用name代替
ser.port:讀或者寫端口
ser.baudrate:鮑率 #9600 #115200
ser.bytesize:字節大小 #8 #serial.EiGHTBITS 八位數據位
ser.parity:校驗位 serial.PARITY_NONE #無校驗 serial.PARITY_EVEN #偶校驗 serial.PARITY_ODD
ser.stopbits:停止位
ser.timeout:讀超時設置
ser.writeTimeout:寫超時
ser.xonxoff:軟體流程控制
ser.rtscts:硬體流程控制
ser.dsrdtr:硬體流程控制
interCharTimeout:字符間隔超時
#端口設置可以被讀入字典,也可從字典加載設置:
getSettingDict():返回當前串口設置的字典
applySettingDict(d):應用字典到串口設置
#對提供io庫的系統(python 2.6或以上),Serial從io.RawIOBase派生。對其它系統,從FileLike派生。
#異常:
exception serial.SerialException
exception serial.SerialTimeoutException
#常量:
serial.VERSION:pyserial版本
#模塊函數和屬性:
serial.device(number)
serial.serial_for_url(url, *args, **kwargs)
serial.protocol_handler_packages()
serial.to_bytes(sequence):接收一個字符串或整數列表sequence,返回bytes實例
}
ser.write(“hello") #就是往serial裡面寫訊息hello
Serial write用法
write(data):發送data,並返回發送字節數。如果bytes和bytearray可用(python 2.6以上),則接受其作為參數;否則接受str作為參數。
#異常:SerialTimeoutException——配置了寫超時並發生超時時發生此異常。
inWaiting():返回接收緩存中的字節數
flush():等待所有數據寫出。
flushInput():丟棄接收緩存中的所有數據
flushOutput():終止當前寫操作,並丟棄發送緩存中的數據。
sendBreadk(duration=0.25):發送BREAK條件,並於duration時間之後返回IDLE
setBreak(level=True):根據level設置break條件。
setRTS(level=True)
setDTR(level=True)
getCTS()
getDSR()
getRI()
getCD()
data = ser.read() #讀一個字節
read(size=1):從串口讀size個字節。如果指定超時,則可能在超時後返回較少的字節;如果沒有指定超時,則會一直等到收完指定的字節數。
data = ser.read(20) #讀20個字節
data = ser.readline() #一次讀一行,直到讀到/n當作结束,要是没有/n就會一直讀。
Readline方法的使用
是讀一行,以/n結束,要是沒有/n就一直讀,阻塞。
使用readline()時應該注意:打開串口時應該指定超時,否則如果串口沒有收到新行,則會一直等待。如果沒有超時,readline會報異常。
data = ser.readlines() #和ser.xreadlines()都需要設定超時時間
ser.next() #讀下一個
===================================================================i2C
===================================================================
SPI
===================================================================
GPIB(IEEE488) - Python GPIB控制 結合 NI VISA api
如此我們就可以透過python指令在cmd模式下 安裝pyvisa套件了 :python -m pip install -U pip 可以更新pip模組python -m pip install -U pyvisa 可以安裝pyvisa模組,並更新到最新版本 pyvisa官網為了確定此兩套件順利安裝,我們可以在cmd打python進入python mode或是開啟python專用的IDE (IDLE) 並打入import visa(enter鍵送出)來確定是否有錯誤訊息跳出,若順利執行則安裝成功
Q&A Q:鍵入 import visa 時會出現下列錯誤訊息: Traceback (most recent call last): File "", line 1, in File "C:\Python27\lib\site-packages\visa.py", line 18, infrom pyvisa import logger, __version__, log_to_screen File "C:\Python27\lib\site-packages\pyvisa\__init__.py", line 20, in import pkg_resources ImportError: No module named pkg_resources A:這是缺少 pkg_resources 模組所致,請到是德科技網站 http://www.keysight.com/ 下載 IO Libraries Suite 軟體,下載頁 http://www.keysight.com/main/software.jspx?ckey=1184883&lc=cht&cc=TW&nid=-11143.0.00&id=1184883Q:Windows ERROR 126 A:詳 http://sourceforge.net/p/pyvisa/bugs/15/程式碼範例 import visa rm = visa.ResourceManager() my_instrument = rm.open_resource('GPIB::14') my_instrument.write("*IDN?") print(my_instrument.read())=================//作業系統NI 環境安裝//====================
安裝 NI-VISA 5.4.1 切換網頁到http://www.ni.com/download/ni-visa-5.4.1/4626/en/,點擊NIVISA541full_downloader.exe。它會要求您建立使用者帳號,如下圖。 如果您已經註冊過那麼就點擊「登入」,輸入正確的使用者名稱和密碼,然後再次點擊 NIVISA541full_downloader.exe。 接著再雙擊下載的檔案NIVISA541full.exe,然後依照安裝視窗指示進行即可。
===================================================================
Socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('www.py4inf.com', 80))
mysock.send(**b**'GET http://www.py4inf.com/code/romeo.txt HTTP/1.0\n\n')
while True:
data = mysock.recv(512)
if ( len(data) < 1 ) :
break
print (data);
mysock.close()
===================================================================
CANBus(Kvaser) - Python結合CAN Bus的初勘-以Kvaser為例
最近工作上需要使用Python透過CAN Bus的工具來跟車機(BDC)做溝通控制。
以CAN tool來說,除了NI以外Vector solution for CAN也非常有名。
但礙於經費,手上只有一條Kvaser的產品
我們來到其 官網的下載區,找到了CANKing以及kvaser driver,進行溝通模擬以綽綽有餘。
若需要利用第三方平台來開發工具進行連接,我們需要Kvaser CANlib SDK。
CANlib SDK中各種api的呼叫以及回傳表 : 點此連結。
因為其工作需求,需要用Python開發,找到下列三部曲連結:
以CAN tool來說,除了NI以外Vector solution for CAN也非常有名。
但礙於經費,手上只有一條Kvaser的產品
我們來到其 官網的下載區,找到了CANKing以及kvaser driver,進行溝通模擬以綽綽有餘。
若需要利用第三方平台來開發工具進行連接,我們需要Kvaser CANlib SDK。
CANlib SDK中各種api的呼叫以及回傳表 : 點此連結。
因為其工作需求,需要用Python開發,找到下列三部曲連結:
- Accessing Kvaser CANlib from Python
- Using Python to connect to your remote device
- A more object oriented approach on accessing your Kvaser device from Python
我使用第一部曲就已綽綽有餘!!!!
===================================================================
感謝你提供 在Python環境驅動CAN BUS Interface的教學
回覆刪除