/// <summary> /// Открывает драйвер порта /// </summary> /// <exception cref="InvalidOperationException"></exception> public override void Open() { String msg; F_CAN_RESULT result; F_CAN_SETTINGS settings; settings = new F_CAN_SETTINGS(); settings.acceptance_code = 0; settings.acceptance_mask = 0; settings.baud_rate = ConvertNim351.ConvertToF_CAN_BAUDRATE(this.BitRate); //settings.error_mask = CAN_OPMODE_ERRFRAME.CAN_ERR_CRTL | CAN_OPMODE_ERRFRAME.CAN_ERR_BUSOFF ; settings.error_mask = 0xFFFF; settings.opmode = (UInt16)Api.OpModeBuilder(this.Mode, this.FrameFormat, this.ErrorFrameEnable); // Инициализация библиотеки result = Api.fw_can_init(); if (!Api.f_can_success(result)) { msg = String.Format("Ошибка при иницилизации fwcan.dll, Error: {0}", result); throw new InvalidOperationException(msg); } // Открываем адаптер CAN и получаем дескриптор порта result = Api.fw_can_open(Api.GetPortNumber(this.PortName), out this._DeviceHandle); if (!Api.f_can_success(result)) { msg = String.Format("Ошибка при открытии CAN адаптера, Error: {0}", result); throw new InvalidOperationException(msg); } // Конфигурируем контроллер result = Api.fw_can_set_controller_config(_DeviceHandle, ref settings); if (!Api.f_can_success(result)) { msg = String.Format("Ошибка при записи настроек в контроллер. Error: {0}", result); throw new InvalidOperationException(msg); } // Конфигурируем таймауты result = Api.fw_can_set_timeouts(_DeviceHandle, ref _Timeouts); if (!Api.f_can_success(result)) { msg = String.Format("Ошибка при установке таймаутов. Error: {0}", result); throw new InvalidOperationException(msg); } // Обновляем и проверяем статус порта if (!this.UpdatePortStatus()) { msg = String.Format("Ошибка. При открытии порта его статус остался неизменным: {0}", this.PortStatus); throw new Exception(msg); } return; }
public static extern F_CAN_RESULT fw_can_get_controller_config( SafeFileHandle hDev, out F_CAN_SETTINGS pDcb);
public static extern F_CAN_RESULT fw_can_get_controller_config( SafeFileHandle hDev, out F_CAN_SETTINGS pDcb);