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 bool HandShakingOn() { string result = SendWaitData("Command:SYSTem:COMMunicate:HANDshaking ON"); if (result.Contains("OK")) { return true; } else { return false; } } 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; } }