public string rate_on_off; public string mult_factor; public string ct_ratio; public string peak_cal; public string cr_lf; public int ChannelNumber { get { int number; if (!int.TryParse(chanlnum, out number)) return -1; return number - 1; // Prefer zero based indexes } } public double ScalingFactor { get { double d_cal_in, d_cal_ref, d_secondary, d_primary; if (!double.TryParse(cal_in, out d_cal_in)) d_cal_in = 1.0D; if (!double.TryParse(cal_ref, out d_cal_ref) || d_cal_ref == 0.0D) d_cal_ref = 1.0D; if (!double.TryParse(secondary, out d_secondary)) d_secondary = 1.0D; if (!double.TryParse(primary, out d_primary)) d_primary = 1.0D; return 5.0D * d_cal_in / d_cal_ref * d_primary / d_secondary; } } public override string ToString() { return title.ToNonNullString().Trim(); } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct ANLG_CHNL_NEW1 { private const int TYPE_LEN = 1; private const int TITLE_LEN = 20; private const int CHANLNUM_LEN = 2; private const int PRIMARY_LEN = 6; private const int SECONDARY_LEN = 4; private const int CT_RATIO_LEN = 4; private const int SHUNT_LEN = 4; private const int LIMIT_SET_LEN = 3; private const int SET_LEN = 3; private const int ON_OFF_LEN = 3; private const int SCALE_FACTOR_LEN = 2; private const int ZERO_LINE_LEN = 4; private const int MULT_FACT_LEN = 8; private const int CAL_LEN = 4; private const int PEAK_CAL_LEN = 4; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CHANLNUM_LEN + 1)] public string chanlnum; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = TITLE_LEN + 1)] public string title; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = TYPE_LEN + 1)] public string type; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PRIMARY_LEN + 1)] public string primary; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SECONDARY_LEN + 1)] public string secondary; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CAL_LEN + 1)] public string cal_in; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CAL_LEN + 1)] public string cal_ref; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SHUNT_LEN + 1)] public string shunt; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ZERO_LINE_LEN + 1)] public string display_location; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SCALE_FACTOR_LEN + 1)] public string display_scale; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LIMIT_SET_LEN + 1)] public string limit_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string limit_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string over_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string over_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string under_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string under_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string rate_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string rate_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MULT_FACT_LEN + 1)] public string mult_factor; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CT_RATIO_LEN + 1)] public string ct_ratio; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PEAK_CAL_LEN + 1)] public string peak_cal; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)] public string cr_lf; public ANLG_CHNL_NEW ToAnlgChnlNew() { return new ANLG_CHNL_NEW() { chanlnum = chanlnum, title = title, type = type, primary = primary, secondary = secondary, cal_in = cal_in, cal_ref = cal_ref, shunt = shunt, display_location = display_location, display_scale = display_scale, limit_set = limit_set, limit_on_off = limit_on_off, over_set = over_set, over_on_off = over_on_off, under_set = under_set, under_on_off = under_on_off, rate_set = rate_set, rate_on_off = rate_on_off, mult_factor = mult_factor, ct_ratio = ct_ratio, peak_cal = peak_cal, cr_lf = cr_lf }; } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct ANLG_CHNL_NEW2 { private const int TYPE_LEN = 1; private const int TITLE_LEN = 64; private const int CHANLNUM_LEN = 2; private const int PRIMARY_LEN = 6; private const int SECONDARY_LEN = 4; private const int CT_RATIO_LEN = 4; private const int SHUNT_LEN = 4; private const int LIMIT_SET_LEN = 3; private const int SET_LEN = 3; private const int ON_OFF_LEN = 3; private const int SCALE_FACTOR_LEN = 2; private const int ZERO_LINE_LEN = 4; private const int MULT_FACT_LEN = 8; private const int CAL_LEN = 4; private const int PEAK_CAL_LEN = 4; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CHANLNUM_LEN + 1)] public string chanlnum; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = TITLE_LEN + 1)] public string title; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = TYPE_LEN + 1)] public string type; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PRIMARY_LEN + 1)] public string primary; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SECONDARY_LEN + 1)] public string secondary; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CAL_LEN + 1)] public string cal_in; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CAL_LEN + 1)] public string cal_ref; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SHUNT_LEN + 1)] public string shunt; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ZERO_LINE_LEN + 1)] public string display_location; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SCALE_FACTOR_LEN + 1)] public string display_scale; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LIMIT_SET_LEN + 1)] public string limit_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string limit_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string over_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string over_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string under_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string under_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string rate_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string rate_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MULT_FACT_LEN + 1)] public string mult_factor; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CT_RATIO_LEN + 1)] public string ct_ratio; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PEAK_CAL_LEN + 1)] public string peak_cal; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)] public string cr_lf; public ANLG_CHNL_NEW ToAnlgChnlNew() { return new ANLG_CHNL_NEW() { chanlnum = chanlnum, title = title, type = type, primary = primary, secondary = secondary, cal_in = cal_in, cal_ref = cal_ref, shunt = shunt, display_location = display_location, display_scale = display_scale, limit_set = limit_set, limit_on_off = limit_on_off, over_set = over_set, over_on_off = over_on_off, under_set = under_set, under_on_off = under_on_off, rate_set = rate_set, rate_on_off = rate_on_off, mult_factor = mult_factor, ct_ratio = ct_ratio, peak_cal = peak_cal, cr_lf = cr_lf }; } } public struct EVNT_CHNL_NEW { public string eventnum; public string e_title; public string nc_no; public string alarm_on_off; public string rtn_on_off; public ushort eveentdebouncems; public int EventNumber { get { int number; if (!int.TryParse(eventnum, out number)) return -1; return number - 1; // Prefer zero based indexes } } public override string ToString() { return e_title.ToNonNullString().Trim(); } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct EVNT_CHNL_NEW1 { private const int EVENTNUM_LEN = 2; private const int E_TITLE_LEN = 20; private const int NC_NO_LEN = 2; private const int E_ON_OFF_LEN = 3; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = EVENTNUM_LEN + 1)] public string eventnum; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_TITLE_LEN + 1)] public string e_title; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NC_NO_LEN + 1)] public string nc_no; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_ON_OFF_LEN + 1)] public string alarm_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_ON_OFF_LEN + 1)] public string rtn_on_off; [MarshalAs(UnmanagedType.I2)] public ushort eveentdebouncems; public EVNT_CHNL_NEW ToEvntChnlNew() { return new EVNT_CHNL_NEW() { eventnum = eventnum, e_title = e_title, nc_no = nc_no, alarm_on_off = alarm_on_off, rtn_on_off = rtn_on_off, eveentdebouncems = eveentdebouncems }; } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct EVNT_CHNL_NEW2 { private const int EVENTNUM_LEN = 2; private const int E_TITLE_LEN = 64; private const int NC_NO_LEN = 2; private const int E_ON_OFF_LEN = 3; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = EVENTNUM_LEN + 1)] public string eventnum; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_TITLE_LEN + 1)] public string e_title; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NC_NO_LEN + 1)] public string nc_no; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_ON_OFF_LEN + 1)] public string alarm_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_ON_OFF_LEN + 1)] public string rtn_on_off; [MarshalAs(UnmanagedType.I2)] public ushort eveentdebouncems; public EVNT_CHNL_NEW ToEvntChnlNew() { return new EVNT_CHNL_NEW() { eventnum = eventnum, e_title = e_title, nc_no = nc_no, alarm_on_off = alarm_on_off, rtn_on_off = rtn_on_off, eveentdebouncems = eveentdebouncems }; } } // Since this structure includes dynamically sized arrays, we manually parse structure public struct EVENT_DISPLAY { public short[] values; public EVENT_DISPLAY(BinaryReader reader, int eventGroups) { values = new short[eventGroups]; for (int i = 0; i < values.Length; i++) { values[i] = reader.ReadInt16(); } } } [StructLayout(LayoutKind.Sequential)] public struct SEQ_RSLTS { [MarshalAs(UnmanagedType.U2)] public ushort flag_seq; [MarshalAs(UnmanagedType.R4)] public float mag_zero_o; [MarshalAs(UnmanagedType.R4)] public float mag_pos_o; [MarshalAs(UnmanagedType.R4)] public float mag_pos_u; [MarshalAs(UnmanagedType.R4)] public float mag_neg_o; [MarshalAs(UnmanagedType.I2)] public short offset_zero_seq; [MarshalAs(UnmanagedType.I2)] public short offset_pos_seq_over; [MarshalAs(UnmanagedType.I2)] public short offset_pos_seq_under; [MarshalAs(UnmanagedType.I2)] public short offset_neg_seq; } [StructLayout(LayoutKind.Sequential)] public struct SWING_RSLTS { [MarshalAs(UnmanagedType.U2)] public ushort s_flag_r; [MarshalAs(UnmanagedType.R4)] public float s_val_max0; [MarshalAs(UnmanagedType.R4)] public float s_val_min0; [MarshalAs(UnmanagedType.I2)] public short s_offset; } [StructLayout(LayoutKind.Sequential)] public struct FREQUENCY_RSLTS { [MarshalAs(UnmanagedType.U2)] public ushort f_flag; [MarshalAs(UnmanagedType.R4)] public float f_result; [MarshalAs(UnmanagedType.I2)] public short f_offset; } [StructLayout(LayoutKind.Sequential)] public struct THD_RSLTS { [MarshalAs(UnmanagedType.U2)] public ushort thd_flag; [MarshalAs(UnmanagedType.R4)] public float thd_result; [MarshalAs(UnmanagedType.I2)] public short thd_offset; } [StructLayout(LayoutKind.Sequential)] public struct TFreqRslts { [MarshalAs(UnmanagedType.U2)] public ushort f_flag; [MarshalAs(UnmanagedType.R4)] public float f_result; [MarshalAs(UnmanagedType.I2)] public short f_offset; } [StructLayout(LayoutKind.Sequential)] public struct SENS_RSLTS { private const int SEQUENCE_GROUPS = 32; private const int SWING_CHANNELS_MAX = 1; private const int MAX_FREQ_CHNLS = 128; [MarshalAs(UnmanagedType.ByValArray, SizeConst = SEQUENCE_GROUPS)] public SEQ_RSLTS[] seq_rslts; [MarshalAs(UnmanagedType.ByValArray, SizeConst = SWING_CHANNELS_MAX)] public SWING_RSLTS[] swing_rslts; public FREQUENCY_RSLTS freq_rslts; public THD_RSLTS thd_rslts; [MarshalAs(UnmanagedType.I2)] public short vNFreqChnls; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_FREQ_CHNLS)] public TFreqRslts[] vFreqRslts; }; [StructLayout(LayoutKind.Sequential)] public struct TPwrRslt { [MarshalAs(UnmanagedType.I2)] public short vLineGp; [MarshalAs(UnmanagedType.R4)] public float vPwr; [MarshalAs(UnmanagedType.I2)] public short vTrigFlg; [MarshalAs(UnmanagedType.I2)] public short vOfs; [MarshalAs(UnmanagedType.I2)] public short vBlkCnt; [MarshalAs(UnmanagedType.I2)] public short vIsLim; } [StructLayout(LayoutKind.Sequential)] public struct TPwrRcd { private const int MAX_PWR_TRIGS = 16; [MarshalAs(UnmanagedType.I2)] public short vRcdSize; [MarshalAs(UnmanagedType.U2)] public ushort vRevId; [MarshalAs(UnmanagedType.I2)] public short vNPwrTrigs; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_PWR_TRIGS)] public TPwrRslt[] vaPwrRslt; } [StructLayout(LayoutKind.Sequential)] public struct BoardAnalogEventChannels { [MarshalAs(UnmanagedType.I2)] public short analyze_board1_analog_channels; [MarshalAs(UnmanagedType.I2)] public short analyze_board2_analog_channels; [MarshalAs(UnmanagedType.I2)] public short analyze_board1_event_channels; [MarshalAs(UnmanagedType.I2)] public short analyze_board2_event_channels; } // Since this structure includes a dynamically sized string, we manually parse structure public struct A_SELECTION { public short size; public byte[] value; public A_SELECTION(BinaryReader reader) { size = reader.ReadInt16(); value = reader.ReadBytes(size); } } // Since this structure includes a dynamically sized string, we manually parse structure public struct E_GRP_SELECT { public short size; public byte[] value;Lines 501–1000 of 1220. Previous lines Load more
public string rate_on_off; public string mult_factor; public string ct_ratio; public string peak_cal; public string cr_lf; public int ChannelNumber { get { int number; if (!int.TryParse(chanlnum, out number)) return -1; return number - 1; // Prefer zero based indexes } } public double ScalingFactor { get { double d_cal_in, d_cal_ref, d_secondary, d_primary; if (!double.TryParse(cal_in, out d_cal_in)) d_cal_in = 1.0D; if (!double.TryParse(cal_ref, out d_cal_ref) || d_cal_ref == 0.0D) d_cal_ref = 1.0D; if (!double.TryParse(secondary, out d_secondary)) d_secondary = 1.0D; if (!double.TryParse(primary, out d_primary)) d_primary = 1.0D; return 5.0D * d_cal_in / d_cal_ref * d_primary / d_secondary; } } public override string ToString() { return title.ToNonNullString().Trim(); } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct ANLG_CHNL_NEW1 { private const int TYPE_LEN = 1; private const int TITLE_LEN = 20; private const int CHANLNUM_LEN = 2; private const int PRIMARY_LEN = 6; private const int SECONDARY_LEN = 4; private const int CT_RATIO_LEN = 4; private const int SHUNT_LEN = 4; private const int LIMIT_SET_LEN = 3; private const int SET_LEN = 3; private const int ON_OFF_LEN = 3; private const int SCALE_FACTOR_LEN = 2; private const int ZERO_LINE_LEN = 4; private const int MULT_FACT_LEN = 8; private const int CAL_LEN = 4; private const int PEAK_CAL_LEN = 4; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CHANLNUM_LEN + 1)] public string chanlnum; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = TITLE_LEN + 1)] public string title; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = TYPE_LEN + 1)] public string type; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PRIMARY_LEN + 1)] public string primary; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SECONDARY_LEN + 1)] public string secondary; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CAL_LEN + 1)] public string cal_in; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CAL_LEN + 1)] public string cal_ref; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SHUNT_LEN + 1)] public string shunt; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ZERO_LINE_LEN + 1)] public string display_location; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SCALE_FACTOR_LEN + 1)] public string display_scale; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LIMIT_SET_LEN + 1)] public string limit_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string limit_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string over_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string over_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string under_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string under_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string rate_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string rate_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MULT_FACT_LEN + 1)] public string mult_factor; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CT_RATIO_LEN + 1)] public string ct_ratio; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PEAK_CAL_LEN + 1)] public string peak_cal; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)] public string cr_lf; public ANLG_CHNL_NEW ToAnlgChnlNew() { return new ANLG_CHNL_NEW() { chanlnum = chanlnum, title = title, type = type, primary = primary, secondary = secondary, cal_in = cal_in, cal_ref = cal_ref, shunt = shunt, display_location = display_location, display_scale = display_scale, limit_set = limit_set, limit_on_off = limit_on_off, over_set = over_set, over_on_off = over_on_off, under_set = under_set, under_on_off = under_on_off, rate_set = rate_set, rate_on_off = rate_on_off, mult_factor = mult_factor, ct_ratio = ct_ratio, peak_cal = peak_cal, cr_lf = cr_lf }; } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct ANLG_CHNL_NEW2 { private const int TYPE_LEN = 1; private const int TITLE_LEN = 64; private const int CHANLNUM_LEN = 2; private const int PRIMARY_LEN = 6; private const int SECONDARY_LEN = 4; private const int CT_RATIO_LEN = 4; private const int SHUNT_LEN = 4; private const int LIMIT_SET_LEN = 3; private const int SET_LEN = 3; private const int ON_OFF_LEN = 3; private const int SCALE_FACTOR_LEN = 2; private const int ZERO_LINE_LEN = 4; private const int MULT_FACT_LEN = 8; private const int CAL_LEN = 4; private const int PEAK_CAL_LEN = 4; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CHANLNUM_LEN + 1)] public string chanlnum; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = TITLE_LEN + 1)] public string title; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = TYPE_LEN + 1)] public string type; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PRIMARY_LEN + 1)] public string primary; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SECONDARY_LEN + 1)] public string secondary; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CAL_LEN + 1)] public string cal_in; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CAL_LEN + 1)] public string cal_ref; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SHUNT_LEN + 1)] public string shunt; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ZERO_LINE_LEN + 1)] public string display_location; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SCALE_FACTOR_LEN + 1)] public string display_scale; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LIMIT_SET_LEN + 1)] public string limit_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string limit_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string over_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string over_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string under_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string under_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = SET_LEN + 1)] public string rate_set; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ON_OFF_LEN + 1)] public string rate_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MULT_FACT_LEN + 1)] public string mult_factor; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CT_RATIO_LEN + 1)] public string ct_ratio; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PEAK_CAL_LEN + 1)] public string peak_cal; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)] public string cr_lf; public ANLG_CHNL_NEW ToAnlgChnlNew() { return new ANLG_CHNL_NEW() { chanlnum = chanlnum, title = title, type = type, primary = primary, secondary = secondary, cal_in = cal_in, cal_ref = cal_ref, shunt = shunt, display_location = display_location, display_scale = display_scale, limit_set = limit_set, limit_on_off = limit_on_off, over_set = over_set, over_on_off = over_on_off, under_set = under_set, under_on_off = under_on_off, rate_set = rate_set, rate_on_off = rate_on_off, mult_factor = mult_factor, ct_ratio = ct_ratio, peak_cal = peak_cal, cr_lf = cr_lf }; } } public struct EVNT_CHNL_NEW { public string eventnum; public string e_title; public string nc_no; public string alarm_on_off; public string rtn_on_off; public ushort eveentdebouncems; public int EventNumber { get { int number; if (!int.TryParse(eventnum, out number)) return -1; return number - 1; // Prefer zero based indexes } } public override string ToString() { return e_title.ToNonNullString().Trim(); } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct EVNT_CHNL_NEW1 { private const int EVENTNUM_LEN = 2; private const int E_TITLE_LEN = 20; private const int NC_NO_LEN = 2; private const int E_ON_OFF_LEN = 3; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = EVENTNUM_LEN + 1)] public string eventnum; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_TITLE_LEN + 1)] public string e_title; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NC_NO_LEN + 1)] public string nc_no; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_ON_OFF_LEN + 1)] public string alarm_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_ON_OFF_LEN + 1)] public string rtn_on_off; [MarshalAs(UnmanagedType.I2)] public ushort eveentdebouncems; public EVNT_CHNL_NEW ToEvntChnlNew() { return new EVNT_CHNL_NEW() { eventnum = eventnum, e_title = e_title, nc_no = nc_no, alarm_on_off = alarm_on_off, rtn_on_off = rtn_on_off, eveentdebouncems = eveentdebouncems }; } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct EVNT_CHNL_NEW2 { private const int EVENTNUM_LEN = 2; private const int E_TITLE_LEN = 64; private const int NC_NO_LEN = 2; private const int E_ON_OFF_LEN = 3; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = EVENTNUM_LEN + 1)] public string eventnum; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_TITLE_LEN + 1)] public string e_title; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NC_NO_LEN + 1)] public string nc_no; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_ON_OFF_LEN + 1)] public string alarm_on_off; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = E_ON_OFF_LEN + 1)] public string rtn_on_off; [MarshalAs(UnmanagedType.I2)] public ushort eveentdebouncems; public EVNT_CHNL_NEW ToEvntChnlNew() { return new EVNT_CHNL_NEW() { eventnum = eventnum, e_title = e_title, nc_no = nc_no, alarm_on_off = alarm_on_off, rtn_on_off = rtn_on_off, eveentdebouncems = eveentdebouncems }; } } // Since this structure includes dynamically sized arrays, we manually parse structure public struct EVENT_DISPLAY { public short[] values; public EVENT_DISPLAY(BinaryReader reader, int eventGroups) { values = new short[eventGroups]; for (int i = 0; i < values.Length; i++) { values[i] = reader.ReadInt16(); } } } [StructLayout(LayoutKind.Sequential)] public struct SEQ_RSLTS { [MarshalAs(UnmanagedType.U2)] public ushort flag_seq; [MarshalAs(UnmanagedType.R4)] public float mag_zero_o; [MarshalAs(UnmanagedType.R4)] public float mag_pos_o; [MarshalAs(UnmanagedType.R4)] public float mag_pos_u; [MarshalAs(UnmanagedType.R4)] public float mag_neg_o; [MarshalAs(UnmanagedType.I2)] public short offset_zero_seq; [MarshalAs(UnmanagedType.I2)] public short offset_pos_seq_over; [MarshalAs(UnmanagedType.I2)] public short offset_pos_seq_under; [MarshalAs(UnmanagedType.I2)] public short offset_neg_seq; } [StructLayout(LayoutKind.Sequential)] public struct SWING_RSLTS { [MarshalAs(UnmanagedType.U2)] public ushort s_flag_r; [MarshalAs(UnmanagedType.R4)] public float s_val_max0; [MarshalAs(UnmanagedType.R4)] public float s_val_min0; [MarshalAs(UnmanagedType.I2)] public short s_offset; } [StructLayout(LayoutKind.Sequential)] public struct FREQUENCY_RSLTS { [MarshalAs(UnmanagedType.U2)] public ushort f_flag; [MarshalAs(UnmanagedType.R4)] public float f_result; [MarshalAs(UnmanagedType.I2)] public short f_offset; } [StructLayout(LayoutKind.Sequential)] public struct THD_RSLTS { [MarshalAs(UnmanagedType.U2)] public ushort thd_flag; [MarshalAs(UnmanagedType.R4)] public float thd_result; [MarshalAs(UnmanagedType.I2)] public short thd_offset; } [StructLayout(LayoutKind.Sequential)] public struct TFreqRslts { [MarshalAs(UnmanagedType.U2)] public ushort f_flag; [MarshalAs(UnmanagedType.R4)] public float f_result; [MarshalAs(UnmanagedType.I2)] public short f_offset; } [StructLayout(LayoutKind.Sequential)] public struct SENS_RSLTS { private const int SEQUENCE_GROUPS = 32; private const int SWING_CHANNELS_MAX = 1; private const int MAX_FREQ_CHNLS = 128; [MarshalAs(UnmanagedType.ByValArray, SizeConst = SEQUENCE_GROUPS)] public SEQ_RSLTS[] seq_rslts; [MarshalAs(UnmanagedType.ByValArray, SizeConst = SWING_CHANNELS_MAX)] public SWING_RSLTS[] swing_rslts; public FREQUENCY_RSLTS freq_rslts; public THD_RSLTS thd_rslts; [MarshalAs(UnmanagedType.I2)] public short vNFreqChnls; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_FREQ_CHNLS)] public TFreqRslts[] vFreqRslts; }; [StructLayout(LayoutKind.Sequential)] public struct TPwrRslt { [MarshalAs(UnmanagedType.I2)] public short vLineGp; [MarshalAs(UnmanagedType.R4)] public float vPwr; [MarshalAs(UnmanagedType.I2)] public short vTrigFlg; [MarshalAs(UnmanagedType.I2)] public short vOfs; [MarshalAs(UnmanagedType.I2)] public short vBlkCnt; [MarshalAs(UnmanagedType.I2)] public short vIsLim; } [StructLayout(LayoutKind.Sequential)] public struct TPwrRcd { private const int MAX_PWR_TRIGS = 16; [MarshalAs(UnmanagedType.I2)] public short vRcdSize; [MarshalAs(UnmanagedType.U2)] public ushort vRevId; [MarshalAs(UnmanagedType.I2)] public short vNPwrTrigs; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_PWR_TRIGS)] public TPwrRslt[] vaPwrRslt; } [StructLayout(LayoutKind.Sequential)] public struct BoardAnalogEventChannels { [MarshalAs(UnmanagedType.I2)] public short analyze_board1_analog_channels; [MarshalAs(UnmanagedType.I2)] public short analyze_board2_analog_channels; [MarshalAs(UnmanagedType.I2)] public short analyze_board1_event_channels; [MarshalAs(UnmanagedType.I2)] public short analyze_board2_event_channels; } // Since this structure includes a dynamically sized string, we manually parse structure public struct A_SELECTION { public short size; public byte[] value; public A_SELECTION(BinaryReader reader) { size = reader.ReadInt16(); value = reader.ReadBytes(size); } } // Since this structure includes a dynamically sized string, we manually parse structure public struct E_GRP_SELECT { public short size; public byte[] value;