//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// <summary> /// Обнавляет статистику CAN-порта /// </summary> private void UpdateStatistics() { F_CAN_STATS statistics; if (this._CanPort.IsOpen) { // Получаем и выводим статистику statistics = this._CanPort.GetStatistics(); } else { statistics = new F_CAN_STATS(); statistics.bus_error = 2; } System.Reflection.FieldInfo[] fields = (typeof(F_CAN_STATS)).GetFields(); for (int i = 0; i < this._DataGridViewStatistics.Rows.Count; i++) { for (int x = 0; x < fields.Length; x++) { Object[] objs = fields[x].GetCustomAttributes( typeof(System.ComponentModel.DescriptionAttribute), false); if ((String)this._DataGridViewStatistics.Rows[i].Cells[0].Value == ((System.ComponentModel.DescriptionAttribute)objs[0]).Description) { this._DataGridViewStatistics.Rows[i].Cells[1].Value = (UInt32)fields[x].GetValue(statistics); } } } return; }
/// <summary> /// Возаращает статистическую информацию CAN-адаптера /// </summary> /// <returns>Структура с информацией</returns> public F_CAN_STATS GetStatistics() { String message; F_CAN_RESULT result; F_CAN_STATS statistics; if (this.IsOpen) { result = Api.fw_can_get_stats(_DeviceHandle, out statistics); if (!Api.f_can_success(result)) { message = String.Format("Ошибка при получении статистики CAN-адаптера, Error: ", result); throw new InvalidOperationException(message); } } else { //message = "Метод не может быть выполнен, порт закрыт"; //throw new InvalidOperationException(message); statistics = new F_CAN_STATS(); // Возвращаем нулевые счётчики } return statistics; }
public static extern F_CAN_RESULT fw_can_get_stats( SafeFileHandle hDev, out F_CAN_STATS pStats);
public static extern F_CAN_RESULT fw_can_get_stats( SafeFileHandle hDev, out F_CAN_STATS pStats);