Skip to content

Commit 4e09547

Browse files
author
andy
committed
ready for replace laser reader
1 parent 40d510b commit 4e09547

File tree

12 files changed

+316
-465
lines changed

12 files changed

+316
-465
lines changed

devices/amsamotion_sensor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def get_distance_multi(self, device_addr: int, channel_num=8) -> dict:
5252
if ret == "":
5353
raise ValueError("read sensor fail")
5454
ret = ret.split('\r\n')
55-
ret = ret[1]
55+
ret = ret[-2]
5656

5757
for index, item in enumerate(ret.split(',')):
5858
multi_value.update({index: (float(item.split(':')[1].strip()) / 1000)})

devices/laser_stj_10_m0.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
"""
2+
@description: high accuracy laser sensor
3+
"""
4+
5+
import codecs
6+
from drivers.serial_driver import SerialDriver
7+
8+
MEASURE_CODE = bytes.fromhex("024D45415355524503")
9+
LOW_MEASURE_CODE = "GetVolt"
10+
11+
12+
class LaserSensor:
13+
def __init__(self, send=True):
14+
self.serial = SerialDriver()
15+
self.send = send
16+
self.accuracy = "high"
17+
18+
def init_device(self, select_default=False):
19+
"""
20+
get device
21+
:return:
22+
"""
23+
if self.accuracy == "high":
24+
self.serial.init(115200, select_default=select_default)
25+
else:
26+
self.serial.init(9600, select_default=select_default)
27+
28+
def close(self):
29+
self.serial.close()
30+
31+
def read_sensor_high(self):
32+
result = self.serial.write_and_get_buffer(MEASURE_CODE)
33+
data = codecs.encode(result, 'hex')
34+
if len(data) <= 0:
35+
raise ValueError("Read Sensor Fail")
36+
data = data.decode('utf-8')
37+
# analyze data
38+
_bai = int(data[3:4])
39+
_shi = int(data[5:6])
40+
_wei = int(data[7:8])
41+
primary_value = _bai * 100 + _shi * 10 + _wei
42+
_qian = int(data[11:12])
43+
_bai = int(data[13:14])
44+
_shi = int(data[15:16])
45+
_wei = int(data[17:18])
46+
secondary_value = _qian * 0.1 + _bai * 0.01 + _shi * 0.001 + _wei * 0.0001
47+
value = primary_value + secondary_value
48+
return value
49+
50+
def read_sensor_low(self):
51+
multi_value = {}
52+
result = self.serial.write_and_get_buffer(LOW_MEASURE_CODE)
53+
result = result.decode('utf-8')
54+
print(f"Result: {result}")
55+
for index, item in enumerate(result.split(',')):
56+
_value = float(item.split(':')[1].strip()) / 1000
57+
_value = round(_value, 3)
58+
multi_value.update({index: _value})
59+
return multi_value
60+
61+
62+
if __name__ == '__main__':
63+
ls = LaserSensor()
64+
ls.init_device()
65+
# ls.accuracy = "low"
66+
while True:
67+
ret = ls.read_sensor_high()
68+
print(ret)

drivers/serial_driver.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,4 @@ def read_buffer2(self, read_length, hex_flag=None):
134134
if __name__ == '__main__':
135135
s = SerialDriver()
136136
s.init(9600)
137-
for i in range(100):
138-
data = s.read_buffer()
139-
print(data)
137+
s.write_and_get_buffer("GetVolt")
Binary file not shown.

ot3_testing/hardware_control/jog.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ async def jog(hc: HardwareControl, mount: Mount):
4747
else:
4848
select = PositionSel.MOUNT_RIGHT
4949
# useful_pos = await hc.require_useful_pos(select)
50-
useful_pos = Point(50, 100, 500)
50+
useful_pos = Point(60, 50, 400)
5151
print("useful_pos: ", useful_pos)
5252
await hc.move_to(mount, useful_pos, target="mount")
5353

@@ -151,4 +151,4 @@ async def jog(hc: HardwareControl, mount: Mount):
151151

152152
if __name__ == '__main__':
153153
hc = HardwareControl("192.168.6.33")
154-
asyncio.run(jog(hc, Mount.LEFT))
154+
asyncio.run(jog(hc, Mount.RIGHT))
Binary file not shown.

ot3_testing/tests/base_init.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ async def read_distance_mm_from_code_value(self, code_value: int, get_voltage=Fa
8484

8585
async def read_definition_distance(self, definition: List, channel_definition, laser: LaserSensor, mount,
8686
only_code=False,
87-
send=False, add_compensation=True) -> dict:
87+
send=False, add_compensation=True, wait_time= 1) -> dict:
8888
"""
8989
read distance, using one device id (please use same device_id in the positions)
9090
:param definition:
@@ -98,7 +98,9 @@ async def read_definition_distance(self, definition: List, channel_definition, l
9898
"""
9999
print("Reading Sensor...")
100100
result = {}
101-
time.sleep(1)
101+
for i in range(wait_time):
102+
time.sleep(1)
103+
print(f"wait ({wait_time})/{i+1}...")
102104
_channel_definition = channel_definition[mount]
103105
device_addr = _channel_definition[definition[0]]["device_addr"]
104106
code_value_list = laser.get_distance_multi(device_addr)

ot3_testing/tests/gantry_leveling.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ async def run_target_point(self, target: Point, target_name: str):
9898
# step 2 : move to target
9999
await self.move_to_test_point(target, ThisMount)
100100
# 等待读数稳定
101-
time.sleep(1)
101+
time.sleep(5)
102102
distance = self.sanliang.read_distance_n_times(5) # 读取示数
103103
while abs(distance) >= FirstThreshold:
104104
play_alarm_2()

ot3_testing/tests/zstage_leveling.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
ApplyCompensationFlag = True
1616

1717
TEST_SPEC = 0.3
18+
DefaultPort = True
19+
AdjustBeforeTest = False
1820

1921

2022
class ZStageLeveling(TestBase):
@@ -33,7 +35,7 @@ def init_laser_sensor(self, send=False):
3335
:return:
3436
"""
3537
self.laser_sensor = LaserSensor(send=send)
36-
self.laser_sensor.init_device()
38+
self.laser_sensor.init_device(select_default=DefaultPort)
3739

3840
async def move_to_test_point(self, p: Point):
3941
"""
@@ -142,7 +144,8 @@ async def run_test_slot(self, point: Point, slot_name: str, read_definition: Lis
142144
await self.calibrate_to_zero(slot_name, 0.1, read_definition, ZStageChannel,
143145
method=CalibrateMethod.Approach)
144146

145-
ret_dict = await self.read_definition_distance(read_definition, ZStageChannel, self.laser_sensor, self.mount)
147+
ret_dict = await self.read_definition_distance(read_definition, ZStageChannel, self.laser_sensor, self.mount,
148+
wait_time=5)
146149
for key, value in ret_dict.items():
147150
print(f"{slot_name}-{key}: {value}")
148151
self.judge_test_result(list(ret_dict.values()), TEST_SPEC)
@@ -199,9 +202,10 @@ async def run_z_stage_test(self, flex_name, project_path=None):
199202
self.init_laser_sensor(send=False)
200203

201204
# adjust
202-
await self.adjust_leveling('Z-C2', Mount.RIGHT)
203-
input("Run Test (开始测试)?")
204-
# run test
205+
if AdjustBeforeTest:
206+
await self.adjust_leveling('Z-C2', Mount.RIGHT)
207+
input("Run Test (开始测试)?")
208+
# run test
205209
await self.api.home()
206210

207211
csv_title = []
@@ -265,5 +269,6 @@ def save_csv(self, file_path, title, content):
265269

266270

267271
if __name__ == '__main__':
268-
obj = ZStageLeveling(ZStagePoint, robot_ip="192.168.6.33")
269-
asyncio.run(obj.run_z_stage_test("xxx"))
272+
obj = ZStageLeveling(ZStagePoint, robot_ip="192.168.6.45")
273+
for i in range(6):
274+
asyncio.run(obj.run_z_stage_test(f"xxx_{i + 1}"))

0 commit comments

Comments
 (0)