2. 镜头

本章节主要介绍了K2000如何与各类镜头(CL2,CA310,CA410)通信与数据交互。

2.1. CL2通信

  • CL2 镜头初始化 CFL() 该方法位于 sharp_lens 模块中。

  • 镜头初始化完之后,就可以直接调用具体功能的方法。其他功能的实现请参见 镜头

My_CL2=CFL()
########################### CL2 获取单个XYLv ##################################
res1,XYLV = My_CL2.CFL_GetMeasureXYLv(My_CL2.CFL_ID0)
if res1>=0:
    print(XYLV[0].X,XYLV[0].Y,XYLV[0].LV)
########################### CL2 获取DB值 ##################################
res1,DB= My_CL2.CFL_GetMeasureDB(My_CL2.CFL_ID0)
if res1>=0:
    print(DB[0])
########################### CL2 获取FLICK##################################
res1,FLICK= My_CL2.CFL_GetMeasureFLICK(My_CL2.CFL_ID0)
if res1>=0:
    print(FLICK[0])

2.2. CA310通信

K2000与CA310通信的方式主要有两种,具体方法如下: - 1.以RS232 作为媒介去通信。

  • 1.初始化RS232对象。

    comDriver = SHARP_uart_init(port = 7,baudrate = 38400, bits=7, parity=PARITY_EVEN, stop=2,read_buf_len = 4096)

  • 2.将RS232对象绑定到CA310上。绑定的方法为

    SHARP_COMCa310InterfaceInit(sky_comDriver,id = 0)

    sky_comDriver 为需要绑定的设备对象。

  • 3.初始化CA310.

    SHARP_COMCA310_Init(Lens_comDriver,ch,sync)

    Lens_comDriver 探头消息结构对象

    ch 内存通道,值域0 ~ 99

    sync 同步模式 -1:默认 0:NTSC 1:PAL 2:EXT 3:UNIV

  • 4.CA310 初始化完之后,就可以直接调用具体功能的方法。其他功能的实现请参见 镜头

comDriver = SHARP_uart_init(port = 7,baudrate = 38400, bits=7, parity=PARITY_EVEN, stop=2,read_buf_len = 4096)
COMCa310 = SHARP_COMCa310InterfaceInit(comDriver)
######################  CA310 初始化 #####################################################
res = SHARP_COMCA310_Init(COMCa310,0,0)
if res == 1:
    print('COMCA310 Init OK')
else:
    print('COMCA310 Init NG')
  • 2.以RS232 作为媒介通过 BUS转RS232盒子去 通信。此通信方式支持与多个CA310通信。

    • 1.初始化BUS转RS232盒子 对象。

      BusRS232_Driver1 = SHARP_Multi_BusRS232_init(id = 1)

    • 2.将设备对象绑定到CA310上。

      绑定的方法为 SHARP_COMCa310InterfaceInit(sky_comDriver,id = 0) sky_comDriver为需要绑定的对象。

    • 3.初始化CA310.

      SHARP_COMCA310_Init(Lens_comDriver,ch,sync)

      Lens_comDriver 探头消息结构对象

      ch 内存通道,值域0 ~ 99

      sync 同步模式 -1:默认 0:NTSC 1:PAL 2:EXT 3:UNIV

    • 4.其他功能的实现请参见 镜头

    ### 拖一台CA310/CA410 并且使用BUS转RS232盒子通信,
    BusRS232_Driver1 = SHARP_Multi_BusRS232_init(id = 1)
    COMCa310 = SHARP_COMCa310InterfaceInit(BusRS232_Driver1)
    
    # ### 拖多台CA310/CA410镜头时 SHARP_COMCa310InterfaceInit()方法需要传指定的ID ID从1开始 默认从0开始
    ##################### 第一台CA310/CA410 初始化  #####################
    BusRS232_Driver1 = SHARP_Multi_BusRS232_init(id = 1)   #此处的id代表盒子上的ID
    COMCa310 = SHARP_COMCa310InterfaceInit(BusRS232_Driver1,id = 1)
    ##################### 第2台CA310/CA410  初始化  #####################
    BusRS232_Driver1 = SHARP_Multi_BusRS232_init(id = 2)   #此处的id代表盒子上的ID
    COMCa310 = SHARP_COMCa310InterfaceInit(BusRS232_Driver1,id = 2)
    ######################  CA310 初始化 #####################################################
    res = SHARP_COMCA310_Init(COMCa310,0,0)
    if res == 1:
        print('COMCA310 Init OK')
    else:
        print('COMCA310 Init NG')
    

2.3. CA410通信

K2000与CA410通信的具体方法如下:

  • 1.以RS232 作为媒介通过 BUS转RS232盒子去 通信。此通信方式支持与多个CA410通信。

    • 1.初始化BUS转RS232盒子对象,将设备对象绑定到CA410上,并且初始化CA410。

      绑定的方法为 My_CA410 = COMCA410(SHARP_Multi_BusRS232_init(id=1),1,0) My_CA410 为需要绑定的对象。

    • 2.校准镜头。

    while True:
        try:
            My_CA410.COMCA410_Cal0()        #校准镜头
            print('410_1_zero OK\n')
            break
        except Exception as e:
            print("410_1_zero NG\r")
    
    • 3.其他功能的实现请参见 镜头

2.4. 功能使用示例_CL2

from sharp_lens import CFL
from sharp_user import user_mode

def CL2_Test_demo():
    My_CL2=CFL()
    ########################### CL2 获取单个XYLv ##################################
    res1,XYLV = My_CL2.CFL_GetMeasureXYLv(My_CL2.CFL_ID0)
    if res1>=0:
        print(XYLV[0].X,XYLV[0].Y,XYLV[0].LV)
    ########################### CL2 获取DB值 ##################################
    res1,DB= My_CL2.CFL_GetMeasureDB(My_CL2.CFL_ID0)
    if res1>=0:
        print(DB[0])
    ########################### CL2 获取FLICK##################################
    res1,FLICK= My_CL2.CFL_GetMeasureFLICK(My_CL2.CFL_ID0)
    if res1>=0:
        print(FLICK[0])

2.5. 功能使用示例_CA310

######################  CA310  #####################################################
res = SHARP_COMCA310_Init(COMCa310,0,0)
if res == 1:
    print('COMCA310 Init OK')
else:
    print('COMCA310 Init NG')
# SHARP_COMCA310_Cal0(comDriver)

### 注意 PN 不可传0 PN = CFL_ID0 代表P1号镜头  PN = CFL_ID2 代表P3号镜头 以此类推
########################### COMCA310 获取多个FMA ###################################################

### 返回的参数  FMA[0]--对应P1号镜头获取flick  FMA[1]--对应P3号镜头获取flick
res,FMA = SHARP_COMCA310_GetFMA(COMCa310,CFL_ID0|CFL_ID2)
print('ret = ',res)
if res >= 0:
    print('ID0_FMA = %.4f\r\n'%FMA[0])      #获取1号镜头FMA
    print('ID2_FMA = %.4f\r\n'%FMA[1])      #获取2号镜头FMA

########################### COMCA310 获取单个LvXY ##################################################
One_xylv = SHARP_XYLvTypeDef()
ret = SHARP_COMCA310_GetLvXY(COMCa310,CFL_ID0,One_xylv)     #此处如果传入多个PN 也会只返回一个值
print('ret = ',ret)
if ret >= 0:
    print('ID0 X:%.4f Y:%.4f Lv: %.4f\r\n'%(One_xylv.X,One_xylv.Y,One_xylv.LV))


########################### COMCA310 获取多个LvXY ###################################################
ret,multi_xylv = SHARP_COMCA310_Get_Multi_LvXY(COMCa310,CFL_ID0|CFL_ID2)        #此函数也可以用于读单个镜头的XYLV
print('ret = ',ret)
if ret >= 0:
    print('ID0 X:%.4f Y:%.4f Lv: %.4f\r\n'%(multi_xylv[0].X,multi_xylv[0].Y,multi_xylv[0].LV))
    print('ID2 X:%.4f Y:%.4f Lv: %.4f\r\n'%(multi_xylv[1].X,multi_xylv[1].Y,multi_xylv[1].LV))

########################### COMCA310 获取单个XYZ ###################################################
One_XYZ = SHARP_XYZTypeDef()
ret = SHARP_COMCA310_GetXYZ(COMCa310,CFL_ID0,One_XYZ)     #此处如果传入多个PN 也会只返回一个值
print('ret = ',ret)
if ret >= 0:
    print('ID0 X:%.4f Y:%.4f Z: %.4f\r\n'%(One_XYZ.X,One_XYZ.Y,One_XYZ.Z))

########################### COMCA310 获取多个XYZ ####################################################
ret,multi_xyz = SHARP_COMCA310_Get_Multi_XYZ(COMCa310,CFL_ID0|CFL_ID2)
print('ret = ',ret)
if ret >= 0:
    print('ID0 X:%.4f Y:%.4f Z: %.4f\r\n'%(multi_xyz[0].X,multi_xyz[0].Y,multi_xyz[0].Z))
    print('ID2 X:%.4f Y:%.4f Z: %.4f\r\n'%(multi_xyz[1].X,multi_xyz[1].Y,multi_xyz[1].Z))

########################### COMCA310 获取单个或多个TcpduvLv ###########################################
ret,multi_TcpduvLv = SHARP_COMCA310_GetTcpduvLv(COMCa310,CFL_ID0|CFL_ID2)
print('ret = ',ret)
if ret >= 0:
    print('ID0 T:%.4f duv:%.4f Lv: %.4f\r\n'%(multi_TcpduvLv[0].T,multi_TcpduvLv[0].duv,multi_TcpduvLv[0].Lv))
    print('ID1 T:%.4f duv:%.4f Lv: %.4f\r\n'%(multi_TcpduvLv[1].T,multi_TcpduvLv[1].duv,multi_TcpduvLv[1].Lv))

########################### COMCA310 获取单个或多个uvLv ###############################################
ret,multi_u_v_Lv = SHARP_COMCA310_GetuvLv(COMCa310,CFL_ID0|CFL_ID2)
print('ret = ',ret)
if ret >= 0:
    print('ID0 U:%.4f V:%.4f Lv: %.4f\r\n'%(multi_u_v_Lv[0].U_,multi_u_v_Lv[0].v_,multi_u_v_Lv[0].Lv))
    print('ID1 U:%.4f V:%.4f Lv: %.4f\r\n'%(multi_u_v_Lv[1].U_,multi_u_v_Lv[1].v_,multi_u_v_Lv[1].Lv))

#**************************其他CA310使用详情见函数注释****************************************************

2.6. 功能使用示例_CA410

from sharp_lens import COMCA410
from sharp_user import SHARP_Multi_BusRS232_init
from sharp_user import user_mode

def CA410_Test_demo():

### 拖一台CA310/CA410 并且使用BUS转RS232盒子通信,
My_CA410 = COMCA410(SHARP_Multi_BusRS232_init(id=1),1,0)

########################### COMCA410 #############################
while True:
    try:
        My_CA410.COMCA410_Cal0()        #校准镜头
        print('410_1_zero OK\n')
        break
    except Exception as e:
        print("410_1_zero NG\r")

########################## COMCA410 获取FMA ################################
FMA = My_CA410.COMCA410_GetFMA(COMCA410.CA410_ID0)
user_mode.DEBUG('FMA = %.4f\r\n'%FMA)      #获取1号镜头FMA

########################### COMCA410 获取单个XYLv ##################################
XYLV = My_CA410.COMCA410_Get_LvXY(COMCA410.CA410_ID0)
user_mode.DEBUG('ID0 X:%.4f Y:%.4f Z: %.4f\r\n'%(XYLV.X,XYLV.Y,XYLV.LV))

########################### COMCA410 获取单个TcpduvLv ###########################################
TcpduvLv = My_CA410.COMCA410_GetTcpduvLv(COMCA410.CA410_ID0)
user_mode.DEBUG('ID0 T:%.4f duv:%.4f Lv: %.4f\r\n'%(TcpduvLv.T,TcpduvLv.duv,TcpduvLv.Lv))

########################### COMCA310 获取单个或多个uvLv ############################
u_v_Lv = My_CA410.COMCA410_GetuvLv(COMCA410.CA410_ID0)
user_mode.DEBUG('ID0 U:%.4f V:%.4f Lv: %.4f\r\n'%(u_v_Lv.U_,u_v_Lv.v_,u_v_Lv.Lv))

########################### COMCA410 获取DB值 ###########################################
DB = My_CA410.COMCA410_GetdB(COMCA410.CA410_ID0)
user_mode.DEBUG('DB :%.4f\r\n'%(DB))