blob: c42b5dd69cea7bf7f7d077c215c03e4257d8ef8a (
plain)
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
|
"""
This unit talks to i-Series controllers sold by Omega and Newport.
They are often can be connected via iServer interface
Specifically, i853 units with LAN connection, but should be ok with many others
"""
from qolab.hardware.basic import BasicInstrument
import socket
class I800(BasicInstrument):
def __init__(self, *args, host='192.168.1.200', port=1000, **kwds):
"""
host - default hostname or IP of the controller unit (192.168.1.200) is factory default
port - socket port (1000 by default) which accept HTTP POST requests
"""
BasicInstrument.__init__(self, *args, **kwds)
self.host=host
self.port=port
self.config['Device type']='TemperatureController'
self.config['Device model'] = 'i800'
self.config['FnamePrefix'] = 'temperature'
self.deviceProperties = {'Temerature'}
@BasicInstrument.tsdb_append
def getTemperature(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((self.host, self.port))
cmd_start_marker='*'
modbus_address='01'
command='X01'; # give decimal representation (X) of the temperature (01 address)
cmnd=f'POST / HTTP/1.1\r\n\r\n{cmd_start_marker}{modbus_address}{command}\r\n'
s.send(cmnd.encode('ascii'))
reply=s.recv(100).decode('ascii')
if reply[0:5] != '01X01':
# check the proper echo response
return None
t = reply[5:]
t = float(t)
return t
if __name__ == '__main__':
tc = I800()
tc.getTemperature()
|