Пример #1
0
def laserThreadFunc():
    log.debug("laserThreadFunc 线程启动 ...")
    if SWITCH_DEVICE:
        LASER3_COM = "com3"
    else:
        LASER3_COM = "com20"
    LASER_REC_BUF_LEN = 11
    laser3 = Laser(LASER3_COM)
    time.sleep(0.01)
    laser_min_distance = 0.1  # 激光安装最小距离
    laserLed = False
    """ 等待数据准备 """
    while True:
        laser_rec_buf = laser3.laser_read_data(LASER_REC_BUF_LEN)
        if laser_rec_buf is not None:
            # 校验
            check_out = laserCheck(laser_rec_buf)
            last_val = int.from_bytes(laser_rec_buf[-1:],
                                      byteorder='little',
                                      signed=False)
            if check_out == last_val:
                laser3_dist = laser3.get_distance(laser_rec_buf)
                if laser3_dist > laser_min_distance:
                    laser_data_valid_flg = True
                    # 设置全局变量
                    my_lock.pSor_laser_main_lock.acquire()
                    gl.set_value("dou_laser_len", laser3_dist)
                    gl.set_value("laser_data_valid_flg", laser_data_valid_flg)
                    my_lock.pSor_laser_main_lock.release()
                    break
                else:
                    print(
                        "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLdou_laser_len:%s\n"
                        % laser3_dist)
            else:
                print("!!!!!!!激光校验失败!!!!!!\n")
        time.sleep(0.05)
    """ 正常流程 """
    while True:
        if laser3.com_laser.com.is_open:
            laser_rec_buf = laser3.laser_read_data(LASER_REC_BUF_LEN)
            if laser_rec_buf is not None:
                # 校验
                check_out = laserCheck(laser_rec_buf)
                last_val = int.from_bytes(laser_rec_buf[-1:],
                                          byteorder='little',
                                          signed=False)
                if check_out == last_val:
                    laser3_dist = laser3.get_distance(laser_rec_buf)
                    if laser3_dist > laser_min_distance:
                        # print("=======================挖斗激光%f" % laser3_dist)
                        dou_laser_len = laser3_dist
                        laserLed = True
                        # 设置全局变量
                        my_lock.pSor_laser_main_lock.acquire()
                        gl.set_value("dou_laser_len", dou_laser_len)
                        my_lock.pSor_laser_main_lock.release()
                    else:
                        laserLed = False
                        print("激光距离错误\n")
                else:
                    laserLed = False
                    print("!!!!! 激光校验失败 !!!!\n")
        else:
            laserLed = False
        # 设置全局变量
        my_lock.laserLedLock.acquire()
        gl.set_value("laserLed", laserLed)
        my_lock.laserLedLock.release()

        time.sleep(0.15)
Пример #2
0
def thread_laser_dou_func():
    # LASER3_COM = "com20"
    LASER3_COM = "com3"
    LASER_REC_BUF_LEN = 11
    laser3 = Laser(LASER3_COM)
    time.sleep(0.01)
    laser_min_distance = 0.1  # 激光安装最小距离
    laserLed = False
    """ 等待数据准备 """
    while True:
        laser_rec_buf = laser3.laser_read_data(LASER_REC_BUF_LEN)
        if laser_rec_buf is not None:
            # 校验
            check_out = laserCheck(laser_rec_buf)
            last_val = int.from_bytes(laser_rec_buf[-1:],
                                      byteorder='little',
                                      signed=False)
            if check_out == last_val:
                laser3_dist = laser3.get_distance(laser_rec_buf)
                if laser3_dist > laser_min_distance:
                    laser_data_valid_flg = True
                    # 设置全局变量
                    with open("lock_log.txt", "a") as file:
                        file.write(
                            "激光线程--laser_calc--in" + "\t" +
                            datetime.datetime.now().strftime('%H:%M:%S') +
                            "\n")
                    my_lock.LaserCalculatorLock.acquire()
                    with open("lock_log.txt", "a") as file:
                        file.write(
                            "激光线程--laser_calc--ing" + "\t" +
                            datetime.datetime.now().strftime('%H:%M:%S') +
                            "\n")
                    gl.set_value("dou_laser_len", laser3_dist)
                    gl.set_value("laser_data_valid_flg", laser_data_valid_flg)
                    my_lock.LaserCalculatorLock.release()
                    with open("lock_log.txt", "a") as file:
                        file.write(
                            "激光线程--laser_calc--out" + "\t" +
                            datetime.datetime.now().strftime('%H:%M:%S') +
                            "\n")
                    break
                else:
                    print(
                        "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLdou_laser_len:%s\n"
                        % laser3_dist)
            else:
                print("!!!!!!!激光校验失败!!!!!!\n")
        time.sleep(0.05)
    """ 正常流程 """
    while True:
        if laser3.com_laser.com.is_open:
            laser_rec_buf = laser3.laser_read_data(LASER_REC_BUF_LEN)
            if laser_rec_buf is not None:
                # 校验
                check_out = laserCheck(laser_rec_buf)
                last_val = int.from_bytes(laser_rec_buf[-1:],
                                          byteorder='little',
                                          signed=False)
                if check_out == last_val:
                    laser3_dist = laser3.get_distance(laser_rec_buf)
                    if laser3_dist > laser_min_distance:
                        # print("=======================挖斗激光%f" % laser3_dist)
                        dou_laser_len = laser3_dist
                        laserLed = True
                        # 设置全局变量
                        with open("lock_log.txt", "a") as file:
                            file.write(
                                "激光线程--laser_calc--in" + "\t" +
                                datetime.datetime.now().strftime('%H:%M:%S') +
                                "\n")
                        my_lock.LaserCalculatorLock.acquire()
                        with open("lock_log.txt", "a") as file:
                            file.write(
                                "激光线程--laser_calc--ing" + "\t" +
                                datetime.datetime.now().strftime('%H:%M:%S') +
                                "\n")
                        gl.set_value("dou_laser_len", dou_laser_len)
                        my_lock.LaserCalculatorLock.release()
                        with open("lock_log.txt", "a") as file:
                            file.write(
                                "激光线程--laser_calc--out" + "\t" +
                                datetime.datetime.now().strftime('%H:%M:%S') +
                                "\n")
                    else:
                        laserLed = False
                        print("激光距离错误\n")
                else:
                    laserLed = False
                    print("!!!!! 激光校验失败 !!!!\n")
        else:
            laserLed = False
        # 设置全局变量
        with open("lock_log.txt", "a") as file:
            file.write("激光线程--laser_led--in" + "\t" +
                       datetime.datetime.now().strftime('%H:%M:%S') + "\n")
        my_lock.laserLedLock.acquire()
        with open("lock_log.txt", "a") as file:
            file.write("激光线程--laser_led--ing" + "\t" +
                       datetime.datetime.now().strftime('%H:%M:%S') + "\n")
        gl.set_value("laserLed", laserLed)
        my_lock.laserLedLock.release()
        with open("lock_log.txt", "a") as file:
            file.write("激光线程--laser_led--out" + "\t" +
                       datetime.datetime.now().strftime('%H:%M:%S') + "\n")

        time.sleep(0.15)
        print("!!!!!laser线程!!!!!%s\n" %
              datetime.datetime.now().strftime('%H:%M:%S'))