using log4net;
|
using System;
|
using System.Collections.Generic;
|
using System.IO.Ports;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace DIT.Framework.Module
|
{
|
/// <summary>
|
/// Model : StarBright
|
/// Home : www.ophiropt.com
|
/// </summary>
|
public class Ophir_StarBright : SerialModule
|
{
|
/// <summary>
|
/// Ophir_StarBright의 생성자
|
/// </summary>
|
/// <param name="PortName"> Port이름 ex)COM6, COM13 </param>
|
/// <param name="BaudRate"> 전송속도 ex)4800, 9600, 19200 </param>
|
/// <param name="DataBits"> 바이트 당 데이터 비트의 표준길이 ex)5, 6, 7, 8 </param>
|
/// <param name="Parity">패리티 검사 프로토콜 ex)Ports.Parity.None </param>
|
/// <param name="StopBits">비트당 정지비트의 표준 개수 ex)Ports.StopBits.One </param>
|
/// <param name="Handshake">직렬 전송을 위한 핸드셰이킹 ex)Ports.Handshake.None</param>
|
public Ophir_StarBright(string PortName, int BaudRate, int DataBits = 8, Parity Parity = Parity.None, StopBits StopBits = StopBits.One, Handshake Handshake = Handshake.None)
|
: base(PortName, BaudRate, DataBits, Parity, StopBits, Handshake)
|
{
|
|
}
|
|
#region Member
|
/// <summary>
|
/// Exception Log
|
/// </summary>
|
private ILog ExceptionLog = LogManager.GetLogger("Ophir_StarBright_Exception");
|
|
/// <summary>
|
/// Exception Log를 기록하기 위한 메서드
|
/// </summary>
|
/// <param name="msg">Error Message</param>
|
private void WriteExceptionLog(string msg)
|
{
|
if (UseExceptionLog)
|
ExceptionLog.Debug(msg);
|
}
|
|
/// <summary>
|
/// Energy Flag true:갱신, false:미갱신
|
/// </summary>
|
public bool Flag { get { return flag; } private set { flag = value; } }
|
private bool flag;
|
|
/// <summary>
|
/// 읽은 Energy
|
/// </summary>
|
public double Energy { get { return energy; } private set { energy = value; } }
|
private double energy;
|
#endregion
|
|
#region Fuction
|
/// <summary>
|
/// Energy 갱신 유무 확인 1:갱신됨, 0:갱신되지 않음. Energy_flag 값 확인.
|
/// </summary>
|
/// <returns></returns>
|
public bool Read_Flag()
|
{
|
try
|
{
|
byte[] cmd = Encoding.ASCII.GetBytes($"$EF{CR}");
|
|
byte[] recvData = SendWaitData(cmd);
|
|
if (recvData == null)
|
return false;
|
|
string str = Encoding.ASCII.GetString(recvData);
|
|
string data = str.Replace("*", "").Replace("\r\n", "");
|
int check = 0;
|
if (int.TryParse(data, out check))
|
return Flag = check == 1 ? true : false;
|
else
|
return false;
|
}
|
catch (Exception e)
|
{
|
WriteExceptionLog(e.Message);
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// Module에서 마지막으로 읽은 Energy 호출
|
/// </summary>
|
/// <returns></returns>
|
public double Read_Energy()
|
{
|
try
|
{
|
byte[] cmd = Encoding.ASCII.GetBytes($"$SE{CR}");
|
|
byte[] recvData = SendWaitData(cmd);
|
|
if (recvData == null)
|
return 0;
|
|
string str = Encoding.ASCII.GetString(recvData);
|
|
string[] data = str.Replace("*", "").Split('E', ' ');
|
Energy = Convert.ToDouble(data[1]) * Math.Exp(Convert.ToDouble(data[2].Replace("\r", "")));
|
|
return Energy;
|
}
|
catch (Exception e)
|
{
|
WriteExceptionLog(e.Message);
|
return 0;
|
}
|
}
|
|
/// <summary>
|
/// Measurement Set
|
/// </summary>
|
/// <param name="mode">
|
/// 0: Query present measurement mode
|
/// 1: Passive, non-measurement mode
|
/// 2: Power
|
/// 3: Energy
|
/// 4: Exposure
|
/// 5: Power with Position (and Size) for BeamTrack sensors
|
/// 6: Reserved for Future Use
|
/// 7: Lux for PD300-CIE sensor
|
/// 8: Footcandles for PD300-CIE sensor
|
/// 9: Irradiance for PD300-RM sensors
|
/// 10: Dosage for PD300-RM Sensors
|
/// 11: Hold mode for BC20 Sensors
|
/// 12: Continuous for BC20 Sensors
|
/// 13: Reserved for future use
|
/// 14: Power from Pulse (Thermopile on StarBright only)</param>
|
/// <returns></returns>
|
public bool Set_Measurement_Mode(int mode)
|
{
|
try
|
{
|
byte[] cmd = Encoding.ASCII.GetBytes($"MM {mode}{CR}");
|
|
byte[] recvData = SendWaitData(cmd);
|
|
string str = Encoding.ASCII.GetString(recvData);
|
|
if (str.Contains("*")) return true;
|
else return false;
|
}
|
catch (Exception e)
|
{
|
WriteExceptionLog(e.Message);
|
return false;
|
}
|
}
|
#endregion
|
}
|
}
|