2. 镜头
本章节主要介绍了K2000如何与各类镜头(CL2,CA310,CA410)通信与数据交互。
2.1. CL2通信
CL2 镜头初始化
CFL()该方法位于sharp_lens模块中。镜头初始化完之后,就可以直接调用具体功能的方法。其他功能的实现请参见 镜头
res = SHARP_CFL_Init()
########################### 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:UNIV4.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:UNIV4.其他功能的实现请参见 镜头
### 拖一台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:UNIV4.其他功能的实现请参见 镜头
### 拖一台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))