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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
namespace SHARP_CLAS_UI
{
    public class Power_Meter : Serial_Module
    {
        #region Field
        Equipment _equip;
 
        string com_port;
        
        #endregion
 
        #region Construct
        public Power_Meter(Equipment _equip, string com_port = "COM3") : 
            base(com_port, 9600, 8)
        {
            this._equip = _equip;
            this.com_port = com_port;
        }
        #endregion
 
        #region Function
        public new string SendWaitData(string send_data)
        {
            byte[] recv_datas = base.SendWaitData(send_data + "\r\n");
 
            if (recv_datas == null)
            {
                return string.Empty;
            }
 
            string str_data = Encoding.ASCII.GetString(recv_datas);
 
            str_data = str_data.Replace("\r\n", "");
 
            return str_data;
        }
 
        public double Read_Power()
        {
            try
            {
                string str_data = SendWaitData("READ?");
 
                if (str_data == string.Empty) return 0;
 
                string[] power_data = str_data.Split(',');
 
                if (power_data.Count() != 5) return 0;
 
                double power = double.Parse(power_data[0]);
                double x_position = double.Parse(power_data[1]);
                double y_position = double.Parse(power_data[2]);
                char flag = power_data[3][0];
                int timestamp = int.Parse(power_data[4]);
 
                if (flag == 'R')
                {
                    //Over Range Error    
                    Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0931_POWER_METER_OVER_RANGE_ERROR);
                }
                else if (flag == 'T')
                {
                    //Over Temperature Error    
                    Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0932_POWER_METER_OVER_TEMPERATURE_ERROR);
                }
 
                return power;
            }
            catch(Exception e)
            {
                _equip.Write_Exception_Log(e.Message);
                return 0;
            }
        }
 
        public bool Check_Power_Meter_Status()
        {
            string Status = SendWaitData("SYSTem:STATus?");
 
            if (Status == string.Empty) return false;
 
            if (Status == "T")
            {
                //Damage Temperature is exceeded
                Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0933_POWER_METER_DAMAGED_TEMPERATURE_IS_EXCEEDED);
                return false;
            }
            else
            {
                return true;
            }
        }
 
        public void Set_Measurement_Mode_W()
        {
            SendWaitData("CONFigure:MEASure W");
        }
 
        public bool Check_Measurement_Mode_W()
        {
            string Mode = SendWaitData("CONFigure:MEASure?");
 
            if (Mode == string.Empty) return false;
 
            if (Mode == "W")
            {
                return true;
            }
            else
            {
                return false;
            }
        }
 
        public void Set_Zero()
        {
            SendWaitData("CONFIqure:ZERO");
        }
        #endregion
    }
 
    public class Power_Meter_Data
    {
        public double Power;
        public double X_Position;
        public double Y_Position;
        public char Flag;
        public int Timestamp;
    }
}