LTT Source에 들어가는 Module Dll
장정호
2020-12-15 dd4a016ef8fc5cae0cbd336a5bdec4651b1d87c1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
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
    }
}