-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSMCServer.py
More file actions
57 lines (42 loc) · 1.67 KB
/
SMCServer.py
File metadata and controls
57 lines (42 loc) · 1.67 KB
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
import minimalmodbus
import zmq
import serial
import minimalmodbus
from time import sleep
class SMCServer( minimalmodbus.Instrument ):
def __init__(self, portname='/dev/ttyS0', slaveaddress=1, port=5050):
minimalmodbus.Instrument.__init__(self, portname, slaveaddress)
self.serial.baudrate = 19200
self.serial.bytesize = 7
self.serial.parity = serial.PARITY_EVEN
self.serial.timeout = 0.3
self.mode = minimalmodbus.MODE_ASCII
context = zmq.Context()
self.socket = context.socket(zmq.REP)
self.socket.bind("tcp://*:%d"%port)
print("SerialServer listening at *:%d relaying to %s" % (port,portname))
def loop(self):
while True:
msg = self.socket.recv().decode("utf-8").strip()
print("Processing %s" % msg)
msg = msg.split()
reply = ""
if "write" in msg:
self.write(msg[1], msg[2], msg[3])
reply = "OK"
self.socket.send(reply.encode())
if "read" in msg:
reply = str(self.read(msg[1], msg[2]))
self.socket.send(reply.encode())
sleep(0.5)
def write(self, register, precision, value):
self.write_register(int(register), float(value), int(precision))
def read(self, register, precision):
return self.read_register(int(register), int(precision))
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-p","--port")
parser.add_option("-d","--device")
(options,args)=parser.parse_args()
myServer = SMCServer(port=int(options.port),portname=options.device)
myServer.loop()