-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
186 lines (172 loc) · 5.88 KB
/
main.py
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
from mySerial import MySerial
import serial
import adam
import RepeatedTimer
from time import sleep
import csv
if __name__ == '__main__':
buffer = ''
debug = False
while True:
if debug:
a1 = '/dev/ttyUSB0'
a2 = 9600
a3 = 8
a4 = serial.PARITY_NONE
a5 = serial.STOPBITS_ONE
a6 = 0
a7 = 0
a8 = None
module = '4017'
address = '04'
else:
print('Lista delle porte disponibili:')
ls = MySerial.serial_ports()
if len(ls) == 0:
print('Nessuna porta seriale disponibile.')
exit(0)
for i in range(len(ls)):
print('{}, porta = {}'.format(i,ls[i]))
print('# porta da aprire >')
while True:
try:
a1 = int(input())
if a1 > len(ls):
raise NameError
a1 = ls[a1]
break
except NameError:
print('valore errato')
print('inserire il valore del baudrate (tipico 9600)>')
while True:
try:
a2 = int(input())
break
except NameError:
print('valore errato')
print('inserire il valore del bytesize (tipico 8)>')
while True:
try:
a3 = int(input())
break
except NameError:
print('valore errato')
# other default parameter not implemented
a4 = serial.PARITY_NONE
a5 = serial.STOPBITS_ONE
a6 = 0
a7 = 0
a8 = None
try:
ser = MySerial(
port=a1,
baudrate=a2,
bytesize=a3,
parity=a4,
stopbits=a5,
xonxoff=a6,
rtscts=a7,
interCharTimeout=a8
)
break
except serial.SerialException as Error:
print(Error)
print('port fail')
if debug:
break
while True:
print('inserire il nome del modulo da inizializzare >')
module = input()
print('inserire l\'indirizzo del modulo da inizializzare >')
address = input()
try:
sonda1 = adam.Adam(module, address=address)
break
except ValueError as e:
print(e)
# this flag is false if a background operation on the serial
# port is active
flag = True
while True:
print('operazione richiesta >')
switch = input()
if switch == 'help':
print('--help--')
print('send: spedire un comando')
print('acq: iniziare una sessione di acquisizione')
print('stop: terminare una sessione di acquisizione')
print('cmd : lista dei comandi disponibili nel modulo')
print('info: un sacco di informazioni sui comandi disponibili')
print('exit: uscire dal programma')
elif switch == 'send' and flag:
print('comando da spedire >')
command = input()
parameters = sonda1.command_parsing(command)
other = {}
for c in parameters:
if (len(c) >= 2 and c != 'AA') or c =='N':
print('parametro addizionale {} >'.format(c))
other[c] = input()
data, rec = sonda1.send_command(command, **other)
ser.write(data)
if debug:
sleep(1)
dati = ser.my_read_line()
print(dati, len(dati))
print(rec(dati))
else:
print(rec(ser.my_read_line()))
elif switch == 'acq' and flag:
print('delay >')
t = int(input())
print('nome del file>')
file = input()
file += '.xls'
print('comando da spedire >')
command = input()
parameters = sonda1.command_parsing(command)
if parameters[0] != '#':
print('comando non valido ai fini di acquisizione')
continue
file = open(file, 'a')
w = csv.writer(file, dialect='excel')
w.writerow(["delay", "Address"])
w.writerow([t, sonda1.get_id()])
other = {}
for c in parameters:
if (len(c) >= 2 and c != 'AA') or c == 'N':
print('optional parameter {} >'.format(c))
other[c] = input()
command, receiver = sonda1.send_command(command, **other)
ser.write(command)
sleep(2)
data = receiver(ser.my_read_line())
print(data)
w.writerow([i[0] for i in data])
w.writerow([i[1] for i in data])
process = RepeatedTimer.RepeatedTimer(t, ser.inquiring, command, receiver, w)
process.start()
flag = False
print('processo di acquisizione iniziato.\nPrima di eseguire altre '
'operazioni sulla porta seriale è necessario bloccare l\' acquisizione')
elif switch == 'stop' and not flag:
process.stop()
file.close()
flag = True
print('Il processo è stato fermato')
elif switch == 'cmd':
print('lista dei comandi disponibili:')
print(sonda1.cmd())
elif switch == 'info':
print(sonda1)
elif switch == 'exit':
if not flag:
process.stop()
file.close()
try:
ser.close()
except NameError:
pass
exit(0)
else:
print('comando non supportato o acquisizione in corso')