7
7
import serial
8
8
import serial .tools .list_ports
9
9
import codecs
10
+ from enum import Enum
10
11
11
- VERIFY_RESPONDS = True
12
- EXPLAIN_FLAG = True
12
+ VERIFY_RESPONDS = False
13
+ EXPLAIN_FLAG = False
13
14
SET_LED_VIRTUAL = True
14
15
15
16
17
+ class UserMode (Enum ):
18
+ Debugging = 1
19
+ Running = 2
20
+
21
+
16
22
class BasicDriver :
17
23
@classmethod
18
24
def get_com_list (cls ):
@@ -25,6 +31,7 @@ def __init__(self, baud):
25
31
self .device = None
26
32
self .led_virtual = True
27
33
self .simulate = False
34
+ self .user_mode = UserMode .Running
28
35
29
36
def build_connection (self ):
30
37
res = BasicDriver .get_com_list ()
@@ -254,20 +261,20 @@ def home(self, y=True, z=True, r=True):
254
261
time .sleep (5 )
255
262
self .send_to_device ("050600000300" , "Set R Axis Speed Mode" , verify = "" )
256
263
self .judge_pos (60 , 'r' , "00000000" )
264
+ if z :
265
+ self .set_axis_speed ('z' )
266
+ self .send_to_device ("070600000302" , "Set Z Axis Relative Position Mode" , verify = "" )
267
+ self .send_to_device ("07 10 00 01 00 02 04 AC FF FF FF" , "move relative" , verify = "" )
268
+ time .sleep (0.5 )
269
+ self .send_to_device ("070600000300" , "Set Z Axis Speed Mode" , verify = "" )
270
+ self .judge_pos (30 , 'z' , "00000000" )
257
271
if y :
258
272
self .set_axis_speed ('y' )
259
273
self .send_to_device ("06 10 00 01 00 02 04 BA 24 FF FF" , "Move Relative" , verify = "061000010002" )
260
274
self .send_to_device ("060600000302" , "Set Y Axis Relative Position Mode" , verify = "" )
261
275
time .sleep (1.5 )
262
276
self .send_to_device ("060600000300" , "Set Y Axis Speed Mode" , verify = "" )
263
277
self .judge_pos (30 , 'y' , "00000000" )
264
- if z :
265
- self .set_axis_speed ('z' )
266
- self .send_to_device ("070600000302" , "Set Z Axis Relative Position Mode" , verify = "" )
267
- self .send_to_device ("07 10 00 01 00 02 04 AC FF FF FF" , "move relative" , verify = "" )
268
- time .sleep (1 )
269
- self .send_to_device ("070600000300" , "Set Z Axis Speed Mode" , verify = "" )
270
- self .judge_pos (30 , 'z' , "00000000" )
271
278
272
279
def init_motors (self ):
273
280
"""
@@ -305,7 +312,14 @@ def close_lid(self):
305
312
"""
306
313
self .send_to_device ("050600000301" , "Set R Axis Speed Mode" , verify = "" ) # 位置模式
307
314
self .send_to_device ("05 10 00 01 00 02 04 F7 D4 FF FF" , "close lid" , verify = "051000010002" )
308
- self .judge_pos (60 , "r" , "F7D4FFFF" )
315
+ ret = self .judge_pos (60 , "r" , "F7D4FFFF" , judge_method = "" )
316
+ if not ret :
317
+ for i in range (3 ):
318
+ judge_m = "Interrupt" if i >= 2 else ""
319
+ self .home (y = False , z = False )
320
+ self .send_to_device ("050600000301" , "Set R Axis Speed Mode" , verify = "" ) # 位置模式
321
+ self .send_to_device ("05 10 00 01 00 02 04 F7 D4 FF FF" , "close lid" , verify = "051000010002" )
322
+ self .judge_pos (60 , "r" , "F7D4FFFF" , judge_method = judge_m )
309
323
310
324
def dark_incubation (self , dark_time : int ):
311
325
"""
@@ -427,24 +441,43 @@ def get_axis_position(self, axis: str):
427
441
raise ValueError ("Can't find Axis" )
428
442
return (data [6 :14 ].upper ())
429
443
444
+ def read_pressure (self ):
445
+ """
446
+ 读取气压值
447
+ """
448
+ data = self .send_to_device ("04 04 00 00 00 01" , "Read Pressure" , verify = "" )
449
+ value = data [6 :10 ]
450
+ value = int (value , 16 ) / 1000
451
+ value_mpa = 0.125 * value - 0.124
452
+ return value_mpa
453
+
430
454
def set_pressure (self , pressure , duration ):
431
455
"""
432
456
施加压力过程
433
457
:param pressure: 压力值(MPa)
434
458
:param duration: 持续时间 (s)
435
459
:return:
436
460
"""
437
- self .move_to_work_position ()
438
- pressure_kpa = pressure * 1000
439
- voltage_mv = int (((pressure_kpa + 123.75 ) / 124.75 ) * 1000 )
461
+ # self.move_to_work_position()
462
+ if self .user_mode == UserMode .Debugging :
463
+ pressure_kpa = 0
464
+ else :
465
+ pressure_kpa = pressure * 1000
466
+ # voltage_mv = int(((pressure_kpa + 123.75) / 124.75) * 1000) # * 10000
467
+ voltage_mv = int (pressure_kpa * 10 )
440
468
voltage_mv_string = self ._format_hex (voltage_mv )
441
469
self .send_to_device ("03 05 00 41 FF 00" , "Pressure Open" ) # 阀门开启
442
470
self .send_to_device (f"0406000A{ voltage_mv_string } " , f"Set Pressure { pressure } Mpa" , verify = "" ) # 设置正压
471
+ time .sleep (0.5 )
472
+ pressure = self .read_pressure ()
473
+ print (f"SET { (i + 1 ) * 0.01 } GET { pressure } " )
474
+ # 显示压力值
475
+ self .set_led_pressure_value (int (pressure * 1000 ))
443
476
time .sleep (duration )
444
477
# 关闭压力
445
478
self .set_pressure_off ()
446
479
# 释放work position
447
- self .release_work_position ()
480
+ # self.release_work_position()
448
481
449
482
def move_to_work_position (self , home = False ):
450
483
"""
@@ -453,15 +486,15 @@ def move_to_work_position(self, home=False):
453
486
"""
454
487
if home :
455
488
self .home ()
456
- self .move_y ("BA24FFFF " )
457
- self .move_z ("AC67FFFF " )
489
+ self .move_y ("BAD0FFFF " )
490
+ self .move_z ("8E3EFFFF " )
458
491
459
492
def release_work_position (self ):
460
493
"""
461
494
释放work position, ready home
462
495
:return:
463
496
"""
464
- # self.move_z("00000000")
497
+ self .move_z ("00000000" )
465
498
self .home (r = False )
466
499
467
500
def init_led (self ):
@@ -495,24 +528,28 @@ def init_loop(self):
495
528
if __name__ == '__main__' :
496
529
bd = BasicDriver (19200 )
497
530
bd .build_connection ()
531
+ # for i in range(10):
532
+ # print(f"Round ---------------------------- {i + 1}")
533
+ # bd.set_pressure((i + 1) * 0.01, 10)
498
534
bd .init_device ()
535
+ bd .close_lid ()
536
+
537
+ # bd.init_device()
499
538
"""
500
539
1. x y z 轴电机测试
501
540
"""
502
541
# for i in range(10):
503
- # print(f"Round ---------------------------- {i+ 1}")
542
+ # print(f"Round ---------------------------- {i + 1}")
504
543
# bd.move_to_work_position()
505
- # bd.set_pressure(0.02, 5)
506
- # bd.home()
507
-
508
- """
509
- 2. 保温测试
510
- """
511
- # bd.heat_incubation([{"temperature": 70, "time": 60}])
512
- # bd.move_z("AC67FFFF")
513
- """
514
- 3. led测试
515
- """
516
- bd .set_led_virtual_value ()
517
-
518
-
544
+ # bd.set_pressure((i + 1) * 0.01, 10)
545
+ # bd.home()
546
+
547
+ # """
548
+ # 2. 保温测试
549
+ # """
550
+ # # bd.heat_incubation([{"temperature": 70, "time": 60}])
551
+ # # bd.move_z("AC67FFFF")
552
+ # """
553
+ # 3. led测试
554
+ # """
555
+ # bd.set_led_virtual_value()
0 commit comments