海康微视光源控制器说明书
特点
1.输出电压脉冲的宽度(即光源的点亮时间)可设置 1us~999us,并可进行脉宽比例设置;
2.提升光源瞬间亮度达 400%以上,并延长光源使用寿命;
3.自动输出相机触发信号,并确保在光源点亮后同步触发相机采集图片;
4.可工作于外触发模式,按需要点亮光源;也可工作于内触发模式,按固定频率点亮光源;
5.当过载自动保护
规格
使用方法简述
前面板
使用方法:
串行通讯控制
串行通讯提供使用远程计算机控制本机。相关数据协议使用,如下说明,
连接串口通讯线缆后,同时按下 M 按键与 CH 按键,切换到串口控制模式:成功后 R 指示灯变亮!
如果通信成功后,会有相应字符反回!
光源脉宽亮度设置
内触发周期操作指令:
实例源码
/// <summary>
/// MV-LEVD-200-4-PY 海康微视光源控制器协议封装类
/// </summary>
public class MVLightControler
{
/// <summary>
/// 控制器串口
/// </summary>
private SerialPort _serialPort;
/// <summary>
/// 控制器返回值
/// </summary>
private string _retStr;
/// <summary>
/// MV-LEVD-200-4-PY 光源控制器封装
/// </summary>
/// <param name="portName"></param>
public MVLightControler(string portName)
{
_serialPort = new SerialPort(portName, 19200);
_serialPort.DataBits = 8;//数据位:8
_serialPort.StopBits = StopBits.One;//停止位:1
_serialPort.Parity = Parity.None;//校验法:无
_serialPort.DataReceived += _serialPort_DataReceived;
_serialPort.Open();
}
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int nRead = _serialPort.BytesToRead;
if (nRead > 0)
{
byte[] data = new byte[nRead];
_serialPort.Read(data, 0, nRead);
_retStr = System.Text.Encoding.Default.GetString(data);
Logger.Info($"控制器返回:{_retStr}");
}
}
/// <summary>
/// 设置所有通道输出灯亮脉宽为x(us)
/// 发送 SA0888#SB0000#SC0100#SD1023# 设置 CH1 亮度 888 CH2 亮度 0 CH3 亮度 100 CH4 亮度 1023
/// </summary>
/// <param name="x">灯亮脉宽(us)</param>
public bool SetAllCHValue(int x)
{
if (x < 0)
x = 0;
if (x > 999)
x = 999;
string xxxx = x.ToString().PadLeft(4, '0');
string str = $"SA{xxxx}#SB{xxxx}#SC{xxxx}#SD{xxxx}#";
_retStr = "";
_serialPort.Write(str);
return (HiTimer.WaitCondition(() => !string.IsNullOrEmpty(_retStr)));
}
/// <summary>
/// 设置某通道输出灯亮脉宽为x(us)
/// </summary>
/// <param name="ch">通道</param>
/// <param name="x">灯亮脉宽(us)</param>
public bool SetCHValue(CH ch,int x)
{
if (x < 0)
x = 0;
if (x > 999)
x = 999;
string xxxx = x.ToString().PadLeft(4, '0');
string str = $"S{ch}{xxxx}#";
_retStr = "";
_serialPort.Write(str);
return HiTimer.WaitCondition(() => !string.IsNullOrEmpty(_retStr)) && _retStr == $"{ch}";
//例如:发送 SA0888# 返回值 A(CH1 通道灯亮脉宽为 888us)
//例如:发送 SD0000# 返回值 D(CH4 通道灯亮脉宽为 0us,即关闭)
}
/// <summary>
/// 设置触发模式
/// </summary>
/// <param name="trigerMode">触发模式</param>
public bool SetTrigerMode(TrigerMode trigerMode)
{
_retStr = "";
_serialPort.Write($"S{trigerMode}#");
return HiTimer.WaitCondition(() => !string.IsNullOrEmpty(_retStr)) && _retStr == $"{trigerMode}";
//例如:发送 SH# 返回值 H(设置内触发)
//例如:发送 SL# 返回值 L(设置外触发)
}
/// <summary>
/// 读取某通道输出灯亮脉宽(us)
/// 例如:发送 SA# 返回值 a0888(即读回 CH1 通道灯亮脉宽为 888us)
/// </summary>
/// <param name="ch">通道</param>
/// <returns>读取成功过返回正常值000~999,读取失败返回-1</returns>
public int GetCHValue(CH ch)
{
_retStr = "";
_serialPort.Write($"S{ch}#");
if (HiTimer.WaitCondition(()=>!string.IsNullOrEmpty(_retStr)))
{
return Convert.ToInt32(_retStr.Substring(1));
}
return -1;
}
}
/// <summary>
/// 通道
/// </summary>
public enum CH
{
/// <summary>
/// CH1
/// </summary>
A,
/// <summary>
/// CH2
/// </summary>
B,
/// <summary>
/// CH3
/// </summary>
C,
/// <summary>
/// CH4
/// </summary>
D
}
public enum TrigerMode
{
/// <summary>
/// 内触发
/// </summary>
H,
/// <summary>
/// 外触发
/// </summary>
L
}