python通过串口控制fxplc_转:Python通过pyserial控制串口操作

https://blog.csdn.net/lovelyaiq/article/details/48101487

你想通过串行端口读写数据,典型场景就是和一些硬件设备打交道(比如一个机器人或传感器)。尽管你可以通过使用Python内置的I/O模块来完成这个任务,但对于串行通信最好的选择是使用 pySerial包 。 这个包的使用非常简单,先安装pySerial,使用类似下面这样的代码就能很容易的打开一个串行端口:

一、用python操作串口,首先需要下载相关模块:

pyserial (http://pyserial.wiki.sourceforge.net/pySerial)

pywin32 (http://sourceforge.net/projects/pywin32/)

import serial

ser = serial . Serial(‘/dev/tty.usbmodem641‘, # Device name varies

baudrate = 9600,

bytesize = 8,

parity = ‘N‘,

stopbits = 1)

设备名对于不同的设备和操作系统是不一样的。 比如,在Windows系统上,你可以使用0,1等表示的一个设备来打开通信端”COM0”和”COM1”。 一旦端口打开,那就可以使用read() , readline() 和 write() 函数读写数据了。

二,十六进制显示

十六进制显示的实质是把接收到的字符转换成其对应的ASCII码,然后将ASCII码值再转换成十六进制数显示出来,这样就可以显示特殊字符了。在这里定义了一个函数,如hexShow(argv),代码如下:

[python] view plain copy

import serial

def hexShow(argv):

result = ‘‘

hLen = len(argv)

for i in xrange(hLen):

hvol = ord(argv[i])

hhex = ‘%02x‘%hvol

result += hhex+‘ ‘

print ‘hexShow:‘,result

t = serial.Serial(‘com12‘,9600)

print t.portstr

strInput = raw_input(‘enter some words:‘)

n = t.write(strInput)

print n

str = t.read(n)

print str

hexShow(str)

3,十六进制发送

十六进制发送实质是发送十六进制格式的字符串,如‘\xaa‘,‘\x0b‘。重点在于怎么样把一个字符串转换成十六进制的格式,有两个误区:

1)‘\x‘+‘aa‘是不可以,涉及到转义符反斜杠

2)‘\\x‘+‘aa‘和r‘\x‘+‘aa‘也不可以,这样的打印结果虽然是\xaa,但赋给变量的值却是‘\\xaa‘

这里用到decode函数,

[python] view plain copy

list=‘aabbccddee‘

hexer=list.decode("hex")

print  hexer

需要注意一点,如果字符串list的长度为奇数,则decode会报错,可以按照实际情况,用字符串的切片操作,在字符串的开头或结尾加一个‘0‘

假如在串口助手以十六进制发送字符串"abc",那么你在python中则这样操作“self.l_serial.write(”\x61\x62\x63") ”

当然,还有另外一个方法:

[python] view plain copy

strSerial = "abc"

strHex = binascii.b2a_hex(strSerial)

#print strHex

strhex = strHex.decode("hex")

#print strhex

self.l_serial.write(strhex);

Short introduction

Open port 0 at "9600,8,N,1", no timeout

[text] view plain copy

>>> import serial

>>> ser = serial.Serial(0)  # open first serial port

>>> print ser.portstr       # check which port was really used

>>> ser.write("hello")      # write a string

>>> ser.close()             # close port

Open named port at "19200,8,N,1", 1s timeout

[text] view plain copy

>>> ser = serial.Serial(‘/dev/ttyS1‘, 19200, timeout=1)

>>> x = ser.read()          # read one byte

>>> s = ser.read(10)        # read up to ten bytes (timeout)

>>> line = ser.readline()   # read a ‘\n‘ terminated line

>>> ser.close()

Open second port at "38400,8,E,1", non blocking HW handshaking

[text] view plain copy

>>> ser = serial.Serial(1, 38400, timeout=0,

...                     parity=serial.PARITY_EVEN, rtscts=1)

>>> s = ser.read(100)       # read up to one hundred bytes

...                         # or as much is in the buffer

Get a Serial instance and configure/open it later

>>> ser = serial.Serial()

>>> ser.baudrate = 19200

>>> ser.port = 0

>>> ser

Serial(port=‘COM1‘, baudrate=19200, bytesize=8, parity=‘N‘, stopbits=1, timeout=None, xonxoff=0, rtscts=0)

>>> ser.open()

>>> ser.isOpen()

True

>>> ser.close()

>>> ser.isOpen()

False

Parameters for the Serial class

[text] view plain copy

ser = serial.Serial(

port=None,              # number of device, numbering starts at

# zero. if everything fails, the user

# can specify a device string, note

# that this isn‘t portable anymore

# if no port is specified an unconfigured

# an closed serial port object is created

baudrate=9600,          # baud rate

bytesize=EIGHTBITS,     # number of databits

parity=PARITY_NONE,     # enable parity checking

stopbits=STOPBITS_ONE,  # number of stopbits

timeout=None,           # set a timeout value, None for waiting forever

xonxoff=0,              # enable software flow control

rtscts=0,               # enable RTS/CTS flow control

interCharTimeout=None   # Inter-character timeout, None to disable

)

The port is immediately opened on object creation, if a port is given. It is not opened if port is None.

Options for read timeout:

[text] view plain copy

timeout=None            # wait forever

timeout=0               # non-blocking mode (return immediately on read)

timeout=x               # set timeout to x seconds (float allowed)

Methods of Serial instances

[text] view plain copy

open()                  # open port

close()                 # close port immediately

setBaudrate(baudrate)   # change baud rate on an open port

inWaiting()             # return the number of chars in the receive buffer

read(size=1)            # read "size" characters

write(s)                # write the string s to the port

flushInput()            # flush input buffer, discarding all it‘s contents

flushOutput()           # flush output buffer, abort output

sendBreak()             # send break condition

setRTS(level=1)         # set RTS line to specified logic level

setDTR(level=1)         # set DTR line to specified logic level

getCTS()                # return the state of the CTS line

getDSR()                # return the state of the DSR line

getRI()                 # return the state of the RI line

getCD()                 # return the state of the CD line

Attributes of Serial instances

Read Only:

[text] view plain copy

portstr                 # device name

BAUDRATES               # list of valid baudrates

BYTESIZES               # list of valid byte sizes

PARITIES                # list of valid parities

STOPBITS                # list of valid stop bit widths

New values can be assigned to the following attributes, the port will be reconfigured, even if it‘s opened at that time:

[text] view plain copy

port                    # port name/number as set by the user

baudrate                # current baud rate setting

bytesize                # byte size in bits

parity                  # parity setting

stopbits                # stop bit with (1,2)

timeout                 # timeout setting

xonxoff                 # if Xon/Xoff flow control is enabled

rtscts                  # if hardware flow control is enabled

Exceptions

[text] view plain copy

serial.SerialException

Constants

parity:

[text] view plain copy

serial.PARITY_NONE

serial.PARITY_EVEN

serial.PARITY_ODD

stopbits:

[text] view plain copy

serial.STOPBITS_ONE

al.STOPBITS_TWO

bytesize:

[text] view plain copy

serial.FIVEBITS

serial.SIXBITS

serial.SEVENBITS

serial.EIGHTBITS

---------------------

作者:TiRan_Yang

你可能感兴趣的:(python通过串口控制fxplc_转:Python通过pyserial控制串口操作)