醬是創客的Python教學主題第2篇,以Python語言來實作教學,本篇教學將以Windows 10外接USB轉RS485 Serial並使用python的pySerial套件接收/發送byte實作,常見的應用就是來當Modbus Master透過RTU抓Slave的資料

設備:
Windows PC一台
PYC U485B USB轉RS485 #露天拍賣 #蝦皮購物

接線方式:
PC–USB–PYC U485B(USB轉RS485)
PYC U485B(USB轉RS485)–A線–A線–自行撰寫的RS485設備
PYC U485B(USB轉RS485)–B線–B線–自行撰寫的RS485設備
(115200,N,8,1)

首先要先準備一台Windows PC,並安裝好Python最新的版本,並到Windows的cmd底下安裝python的pyserial套件

C:\Users\chosemaker\Desktop>pip install pyserial

接著我們安裝PYC U485B的驅動程式,到他的官網下載驅動程式,裡面並附有如何在Windows安裝驅動程式的說明。接著到Windows裝置管理員,找出連接埠>>通訊連接埠,裡面會顯示出該USB的COM port 是多少,本範例使用COM1

開始來寫Python的程式

import serial, time
  
ser = serial.Serial()
ser.port = "COM1"
  
#115200,N,8,1
ser.baudrate = 115200
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
ser.parity = serial.PARITY_NONE #set parity check
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
  
ser.timeout = 0.5          #non-block read 0.5s
ser.writeTimeout = 0.5     #timeout for write 0.5s
ser.xonxoff = False    #disable software flow control
ser.rtscts = False     #disable hardware (RTS/CTS) flow control
ser.dsrdtr = False     #disable hardware (DSR/DTR) flow control
  
try: 
    ser.open()
except Exception as ex:
    print ("open serial port error " + str(ex))
    exit()
  
if ser.isOpen():
  
    try:
        ser.flushInput() #flush input buffer
        ser.flushOutput() #flush output buffer
  
        #write 8 byte data
        ser.write([78, 78, 78, 78, 78, 78, 78, 78])
        print("write 8 byte data: 78, 78, 78, 78, 78, 78, 78, 78")
  
        time.sleep(0.5)  #wait 0.5s
  
        #read 8 byte data
        response = ser.read(8)
        print("read 8 byte data:")
        print(response)
  
        ser.close()
    except Exception as e1:
        print ("communicating error " + str(e1))
  
else:
    print ("open serial port error")

自行撰寫的RS232設備收到PC發的8 byte 0x78後,會回發一個8 byte裡面是可以直接顯示8個string “N”。建立一個new.py並放在/home/pi,執行python new.py就可以跑出以下

C:\Users\chosemaker\Desktop>python new.py
write 8 byte data: 78, 78, 78, 78, 78, 78, 78, 78
read 8 byte data:
b'NNNNNNNN'