Pythonでシリアル(RS232C)通信

Pythonでシリアル通信(RS232C)通信をして、Arduinoマイコンのテストコマンドを制御してみました。 【準備】pipでpyserialのインストールが必要です。
RS232C
1
pip install pyserial
RS232C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/usr/bin/python3
"""
 Python RS232C
  
 ***need pyserial module***
 pip install pyserial
  
 Python3 OS:Windows or Linux
 
DATE        VER   NAME     COMMENT
 2020/03/02  0.00  garyo  NEW
"""
 
import serial
import time
import datetime
 
class PyRs232c():
     
    VERSION = "0.00"
    logFilename = "SIO.log"
 
    def __init__(self):
        self.baudrate = 9600
        self.com_name = "COM1"
        #self.com_name = '/dev/ttyUSB0'
        self.timeout = 1.0
     
    def setComName(self,com_name):
        self.com_name = com_name
     
    def setBaudrate(self,baudrate):
        self.baudrate = baudrate
 
    def sioOpen(self,com_name="",baudrate = 0):
        if com_name != "" :
            self.com_name = com_name
        if baudrate != 0:
            self.baudrate = baudrate
        self.ser = serial.Serial(self.com_name,self.baudrate,timeout = self.timeout)
        self.waitt(2)
 
    def sioClose(self):
        self.ser.close()
 
    def waitt(self,s):
        time.sleep(s)
 
    def send(self,s):
        self.logPrintln(self.disp("[Tx:]" + s))
        s = s.encode("shift-jis")
        self.ser.write(s)
 
    def recv(self,Tout = 10):
        t = time.time()
        timeout = Tout
        ret = b""
        while 1:
            if time.time() - t > timeout :
               break
            c = self.ser.read()
            ret = ret + c
            if c == b'\r':
                pass
            elif c == b'\n':
                break
            else:
                pass
 
        self.logPrintln(self.disp("[Rx:]" + str(ret,encoding='utf-8')))
        r = str(ret,encoding='utf-8')
        return (r)
 
    def Send_Command(self,Cmd,jug_str,Tout = 5):
 
        r = ""
        jug = False
        self.ret = ""
         
        self.send(Cmd + "\r\n")
 
        t = time.time()
        while 1:
            if time.time() - t > Tout :
               break
            r = r + self.recv()
            if r.find(jug_str) > -1:
                jug = True
                break
 
        self.ret = r
        return(jug)
 
    def getRet(self):
        return (self.ret)
 
    def disp(self,s):
        s=s.replace("\r","[CR]")
        s=s.replace("\n","[LF]")
        return (s)
 
#Log
    def setLogFilename(self,filename):
        self.logFilename = filename
 
    def logPrint(self,s):
        f = open(self.logFilename,'a')
        f.write(s)
        f.close()
 
    def logPrintln(self,s):
        self.logPrint(s + "\n")
 
 
if __name__ == "__main__":
 
    rs232c = PyRs232c()
    rs232c.sioOpen("COM3",9600)
    rs232c.logPrintln("\n[START]" + datetime.datetime.now().strftime('%Y/%m/%d_%H:%M:%S'))
 
    jug = True
 
    if jug == True :
        jug = rs232c.Send_Command("PS130","OK")
 
    while 1:
        if jug == True :
            jug = rs232c.Send_Command("PW130","OK")
        rs232c.waitt(.5)
        if jug == True :
            jug = rs232c.Send_Command("PW131","OK")
        rs232c.waitt(.5)
        if jug == False:
            break
 
    rs232c.sioClose()

コメント

このブログの人気の投稿

Python OpenCVとWebカメラでバーコードリーダー

VB.net Dictionaryクラスの初期化