-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfs725.py
90 lines (75 loc) · 2.33 KB
/
fs725.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
# -*- coding: utf-8 -*-
#
# Modified from https://github.com/uberdaff/kd3005p
#
# Requirements: pyserial
#
import sys
import time
import serial
class FS725Instrument:
"""Object to communicate with FS725 Rb Frequency Standard
Parameters
----------
com_port : str
Path to serial device connected to FS725.
Attributes
----------
isConnected : bool
Whether the serial connection is established.
com : :obj:`serial.Serial`
Serial port object that communicates with FS725.
Methods
-------
close():
Close serial port.
serialWriteAndReceive(self, data, delay=0.05):
Send data to FS725 via serial connection and receive response.
getCurrentValue(self, mnem):
Get value currently used by FS725.
getEEPROMValue(self, mnem):
Get value stored in EEPROM.
setCurrentValue(self, mnem, val):
Set parameter to new value.
writeCurrentValueToEEPROM(self, mnem):
Write currently used value to EEPROM for use after reset.
"""
isConnected = False
com = None
def __init__(self, com_port):
try:
com = serial.Serial(
port=com_port,
baudrate=9600,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
xonxoff=True,
)
com.isOpen()
self.com = com
self.isConnected = True
except Exception:
print("COM port failure:")
print(sys.exc_info())
self.com = None
self.isConnected = False
def close(self):
self.com.close()
def serialWriteAndReceive(self, data, delay=0.05):
self.com.write(data.encode())
out = ""
time.sleep(delay)
while self.com.inWaiting() > 0:
out += self.com.read(1).decode()
if out == "":
out = None
return out
def getCurrentValue(self, mnem):
return self.serialWriteAndReceive(f"{mnem}?\r")
def getEEPROMValue(self, mnem):
return self.serialWriteAndReceive(f"{mnem}!?\r")
def setCurrentValue(self, mnem, val):
return self.serialWriteAndReceive(f"{mnem}{val}\r")
def writeCurrentValueToEEPROM(self, mnem):
return self.serialWriteAndReceive(f"{mnem}!\r")