2. 镜头

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

2.1. CL2通信

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

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

res = SHARP_CFL_Init()
if res >= 0:
    print('CFL Init OK')
else:
    print('CFL Init NG')

########################### CL2 获取单个或多个LvXY ##################################################
ret,xyLv = SHARP_CFL_GetMeasureXYLv(CFL_ID0|CFL_ID9)
print('ret = ',ret)
if ret >= 0:
    print('ID0 X:%.4f Y:%.4f Lv: %.4f\r\n'%(xyLv[0].X,xyLv[0].Y,xyLv[0].LV))
    print('ID9 X:%.4f Y:%.4f Lv: %.4f\r\n'%(xyLv[9].X,xyLv[9].Y,xyLv[9].LV))

########################### CL2 获取单个或多个DB ##################################################
ret,DB = SHARP_CFL_GetMeasureDB(CFL_ID0|CFL_ID9)
print('ret = ',ret)
if ret >= 0:
    print('ID0 db:%.4f \r\n'%(DB[0]))
    print('ID9 db:%.4f \r\n'%(DB[9]))

########################### CL2 获取单个或多个 flick ##################################################
ret,flick = SHARP_CFL_GetMeasureFLICK(CFL_ID0|CFL_ID9)
print('ret = ',ret)
if ret >= 0:
    print('ID0 flick:%.4f \r\n'%(flick[0]))
    print('ID9 flick:%.4f \r\n'%(flick[9]))

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盒子 对象。

      BusRS232_Driver1 = SHARP_Multi_BusRS232_init(id = 1)

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

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

    • 3.初始化CA310.

      SHARP_COMCA410_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.4. 功能使用示例

######################  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使用详情见函数注释****************************************************






########################### COMCA410 #################################################################

res = SHARP_COMCA410_Init(COMCa310,0,0)
if res == 1:
    print('COMCA410 Init OK')
else:
    print('COMCA410 Init NG')

SHARP_COMCA410_Cal0(COMCa310)           #校准镜头

########################### COMCA410 获取多个FMA ###################################################
res,FMA = SHARP_COMCA410_GetFMA(COMCa310,CFL_ID0)           #此处的PN是无效参数
print('ret = ',res)
if res >= 0:
    print('ID0_FMA = %.4f\r\n'%FMA)      #获取1号镜头FMA

########################### COMCA410 获取单个XYLv ###################################################
One_xylv = SHARP_XYLvTypeDef()
ret = SHARP_COMCA410_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))

# 函数差异: 传入参数和返回参数的方式不同 其他都一样
ret,XYLV = SHARP_COMCA410_GetLvXY_(COMCa310,CFL_ID0)
print('ret = ',ret)
if ret >= 0:
    print('ID0 X:%.4f Y:%.4f Z: %.4f\r\n'%(XYLV.X,XYLV.Y,XYLV.LV))

########################### COMCA410 获取单个XYZ ###################################################
One_XYZ = SHARP_XYZTypeDef()
ret = SHARP_COMCA410_GetXYZ(COMCa310,CFL_ID0,One_XYZ)     #
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))

# 函数差异: 传入参数和返回参数的方式不同 其他都一样
ret,XYZ = SHARP_COMCA410_GetXYZ_(COMCa310,CFL_ID0)
print('ret = ',ret)
if ret >= 0:
    print('ID0 X:%.4f Y:%.4f Z: %.4f\r\n'%(XYZ.X,XYZ.Y,XYZ.Z))

########################### COMCA410 获取单个TcpduvLv ###########################################
ret,TcpduvLv = SHARP_COMCA410_GetTcpduvLv(COMCa310,CFL_ID0)
print('ret = ',ret)
if ret >= 0:
    print('ID0 T:%.4f duv:%.4f Lv: %.4f\r\n'%(TcpduvLv.T,TcpduvLv.duv,TcpduvLv.Lv))

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

########################### COMCA410 获取DB值 ###########################################
ret,DB = SHARP_COMCA410_GetdB(COMCa310,CFL_ID0)
print('ret = ',ret)
if ret >= 0:
    print('DB :%.4f\r\n'%(DB))