diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 2c24ef7..813d8e5 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/Vinclude/DSP.h b/Vinclude/DSP.h index c3923e6..dd339f4 100644 --- a/Vinclude/DSP.h +++ b/Vinclude/DSP.h @@ -59,8 +59,8 @@ extern int __isr_vector_ram_end; #define IRQ_PRIORITY_TZ 1 #define IRQ_PRIORITY_ADC 2 -#define IRQ_PRIORITY_10K 3 -#define IRQ_PRIORITY_CAP 4 +#define IRQ_PRIORITY_CAP 3 +#define IRQ_PRIORITY_10K 4 #define IRQ_PRIORITY_CAN 5 #define IRQ_PRIORITY_1K 6 #define IRQ_PRIORITY_EQEP 6 diff --git a/Vinclude/Global_time.h b/Vinclude/Global_time.h index cc2a119..cd48720 100644 --- a/Vinclude/Global_time.h +++ b/Vinclude/Global_time.h @@ -114,7 +114,9 @@ extern "C" { RELATIVE_TIME relative_time1;//!относительное времЯ 1 RELATIVE_TIME relative_time2;//!относительное времЯ 2 +#ifdef USE_ABSOLUTE_TIME_CLOCK ABSOLUTE_TIME absolute_time;//!абсолютное времЯ +#endif int16 time_type;//!часы реального времени (1 - есть) int32 PowerOn_time; //!<Общее времЯ наработки int32 PowerOn_time_min; //!<Общее времЯ наработки в минутах @@ -146,18 +148,15 @@ extern "C" #define ABSOLUTE_TIME_DEFAULTS {0,0,0,0,0} //!Инициализатор TGlobalTime. -#define GLOBAL_TIME_DEFAULTS { RELATIVE_TIME_DEFAULTS,\ - RELATIVE_TIME_DEFAULTS,\ - ABSOLUTE_TIME_DEFAULTS,\ - 1,0,0,0,0,0,0,\ - GlobalTime_init,\ - GlobalTime_calc,\ - GlobalTime_ms_calc,\ - GlobalTime_slow_calc,\ - GlobalTime_read_PowerOn_time, \ - GlobalTime_write_PowerOn_time, \ - GlobalTime_read_oper_time, \ - GlobalTime_write_oper_time,\ +#define GLOBAL_TIME_DEFAULTS { .time_type = 1,\ + .init = GlobalTime_init,\ + .calc = GlobalTime_calc,\ + .ms_calc = GlobalTime_ms_calc,\ + .slow_calc = GlobalTime_slow_calc,\ + .read_PowerOn_time = GlobalTime_read_PowerOn_time, \ + .write_PowerOn_time = GlobalTime_write_PowerOn_time, \ + .read_oper_time = GlobalTime_read_oper_time, \ + .write_oper_time = GlobalTime_write_oper_time,\ } //! \memberof TGlobalTime diff --git a/Vinclude/SM_CmdLogic.h b/Vinclude/SM_CmdLogic.h index 394d9b7..6e9f13c 100644 --- a/Vinclude/SM_CmdLogic.h +++ b/Vinclude/SM_CmdLogic.h @@ -51,15 +51,11 @@ extern "C" //! см. TSM_CmdLogic struct SSM_CmdLogic { - int state;//!DATA & (1 << 14)) == 0) // Вход 1 + +#else + +#define D_IN1 0 + +#endif + +// Дефайним дискретные выходы +#ifdef HW_MOTORCONTROLBOARD +#define D_OUT1_ON GPIOA->DATAOUTSET = (1 << 15) +#define D_OUT1_OFF GPIOA->DATAOUTCLR = (1 << 15) +#else +#define D_OUT1_ON +#define D_OUT1_OFF +#endif + + + +// Вектор состоЯниЯ дискретных выходов +extern volatile Uint8 output_vect; + +// Вектор состоЯниЯ дискретных входов +extern volatile Uint8 input_vect; + + +void DIO_Init(); + +void DIO_slow_calc(); // вызывать в фоновой программе + +void DIO_fast_calc(); // вызывать с частотой 1кГц или 10 кГц + + +#ifdef __cplusplus +} +#endif + +#endif + +/*@}*/ diff --git a/Vinclude/V_DPR_eCAP.h b/Vinclude/V_DPR_eCAP.h index c4d69c7..592025e 100644 --- a/Vinclude/V_DPR_eCAP.h +++ b/Vinclude/V_DPR_eCAP.h @@ -85,11 +85,9 @@ Uint16 rsvd: Uint32 PrevTspeed; // Предыдущая величина периода для расчёта скорости Uint32 PrevTspeed1; // Предыдущая величина периода для расчёта скорости по датчику А. - Uint32 PrevTspeed11; Uint32 PrevTspeed2; // Предыдущая величина периода для расчёта скорости по датчику B. - Uint32 PrevTspeed22; Uint32 PrevTspeed3; // Предыдущая величина периода для расчёта скорости по датчику C. - Uint32 PrevTspeed33; + int16 CAPCalcEna1; int16 CAPCalcEna2; @@ -136,29 +134,19 @@ Uint16 rsvd: /****************************************************************************** Инициализация структуры по умолчанию ******************************************************************************/ -#define DPRECAP_DEFAULTS \ - {\ - 0,0,0,0,0,0,0,0,0, \ - 0,0,0,0,0, \ - 0,0,0,0,0,0, \ - 0,0,0,0,0,0,0,\ - 0,0,0,\ - 0,0,0,0,0,\ - 0,0,0,0,\ - 0,0,0,0,0,0,\ - 0,0,\ - &DPReCAP_Init, \ - &DPReCAP_AngleCalc, \ - &DPReCAP_Angle6Calc, \ - &DPReCAP_AngleErrorCalc, \ - &DPReCAP_SpeedCalc, \ - &DPReCAP_CAP1Calc, \ - &DPReCAP_CAP2Calc, \ - &DPReCAP_CAP3Calc, \ - &DPReCAP_HelpCalc, \ - &DPReCAP_SlowCalc, \ - &DPReCAP_msCalc, \ - &DPReCAP_calc_10k\ +#define DPRECAP_DEFAULTS {\ + .Init = DPReCAP_Init, \ + .AngleCalc = DPReCAP_AngleCalc, \ + .Angle6Calc = DPReCAP_Angle6Calc, \ + .AngleErrorCalc = DPReCAP_AngleErrorCalc, \ + .SpeedCalc = DPReCAP_SpeedCalc, \ + .CAP1Calc = DPReCAP_CAP1Calc, \ + .CAP2Calc = DPReCAP_CAP2Calc, \ + .CAP3Calc = DPReCAP_CAP3Calc, \ + .HelpCalc = DPReCAP_HelpCalc, \ + .slow_calc = DPReCAP_SlowCalc, \ + .ms_calc = DPReCAP_msCalc, \ + .calc_10k = DPReCAP_calc_10k\ } /****************************************************************************** diff --git a/Vinclude/V_Fan.h b/Vinclude/V_Fan.h new file mode 100644 index 0000000..589d9c3 --- /dev/null +++ b/Vinclude/V_Fan.h @@ -0,0 +1,87 @@ +/*! + Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + \file V_Fan.h + \brief Модуль работы вентилятора + \author ООО "НПФ Вектор". http://motorcontrol.ru + \version v 1.0 25/08/2017 + + \addtogroup + @{*/ + + +#ifndef V_FAN_H +#define V_FAN_H + + +//! вентилятор выключен +#define FAN_CONTROL_STATE_OFF 0 +//! вентилятор включен +#define FAN_CONTROL_STATE_ON 1 +//! состояние перегрева +#define FAN_CONTROL_STATE_OVERHEAT 2 + +/* Включение и выключение вентилятора */ +#if defined (HW_MOTORCONTROLBOARD) +#define FAN_ON GPIOB->MASKLB[16].MASKLB = 16 //NT_GPIOA->DATA |= (1 << 13) +#define FAN_OFF GPIOB->MASKLB[16].MASKLB = 0 //NT_GPIOA->DATA &= ~(1 << 13) +#endif + +#if !defined (HW_MOTORCONTROLBOARD) +/* Дефайны для других контроллеров */ +#define FAN_ON +#define FAN_OFF +#endif + + +struct SFanControl{ + Uint16 Enabled; + Uint16 manualOn; // Принудительное влкючение + + int state; //!<состояние + int state_shadow;//!< состояние теневое + int state_prev;//!<состояние предыдущее + int StateOn;//!<двоичное состояние: включен/не включен + + long T_on;//!<температура включения + long T_off;//!<температура выключения + long T_alarm;//!температура вывода предупреждения + long temperature; //! Температура, по которой осуществляется контроль + + void (*init)(volatile struct SFanControl*); + void (*slow_calc)(volatile struct SFanControl*); +}; + +typedef volatile struct SFanControl TFanControl; + + + +//! \memberof TFanControl +void FanControl_init(TFanControl*); +//! \memberof TFanControl +void FanControl_slow_calc(TFanControl*); //расчет в фоновом режиме + + +#define FAN_CONTROL_DEFAULTS {0,0,\ + FAN_CONTROL_STATE_OFF,FAN_CONTROL_STATE_OFF,FAN_CONTROL_STATE_OFF,0,\ + _IQ(2.5),_IQ(2), _IQ(4), _IQ(0),\ + FanControl_init,\ + FanControl_slow_calc} + + + +#endif + +/*@}*/ diff --git a/Vinclude/V_MBVarsConv.h b/Vinclude/V_MBVarsConv.h deleted file mode 100644 index 167245b..0000000 --- a/Vinclude/V_MBVarsConv.h +++ /dev/null @@ -1,90 +0,0 @@ -/*! - Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - \file v_MBVarsConv.h - \brief Модуль преобразования данных Modbus - \author ООО "НПФ ВЕКТОР" - \version v.1.1. 02/03/2017 - - \addtogroup v_ModBus - - @{ -*/ - - - -#ifndef V_MBVARSCONV_H -#define V_MBVARSCONV_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "DSP.h" - -/*! \class TMBVarsConv - \brief Модуль преобразования данных Modbus - - Класс \a TMBVarsConv, основанный на структуре SMBVarsConv, предназначен - для преобразования данных из формата 16 разрядов Modbus в формат системы управления (IQ 24). -*/ - - -struct SMBVars{ - int Command; - int CommandPrev; - int speed_ref; - int CurIs; - int CurSpeed; - int Main_ErrorCode; - int Umax_protect; - }; -//!см. TMBVarsConv MBVars -#define SMBVARS_DEFAULTS {0,0,0,0,0,0} - - -struct SMBVarsConv{ - struct SMBVars Vars; - Uint16 NeedForSave; - void (*init)(volatile struct SMBVarsConv*); - void (*calc)(volatile struct SMBVarsConv*); - void (*slow_calc)(volatile struct SMBVarsConv*); - }; - -typedef volatile struct SMBVarsConv TMBVarsConv; - -//!Инициализатор по умолчанию -#define MBVARSCONV_DEFAULTS { SMBVARS_DEFAULTS,\ - 0,\ - MBVarsConv_init,\ - MBVarsConv_calc,\ - MBVarsConv_slow_calc\ - } - -//! \memberof TMBVarsConv -void MBVarsConv_init(TMBVarsConv *p); -//! \memberof TMBVarsConv -void MBVarsConv_calc(TMBVarsConv *p); -//! \memberof TMBVarsConv -void MBVarsConv_slow_calc(TMBVarsConv *p); - - -#ifdef __cplusplus -} -#endif - -#endif - -/*@}*/ diff --git a/Vinclude/V_ModBus.h b/Vinclude/V_ModBus.h deleted file mode 100644 index 69edddd..0000000 --- a/Vinclude/V_ModBus.h +++ /dev/null @@ -1,126 +0,0 @@ -/*! - Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - \file V_ModBus.h - \brief Драйвер ModBus (см. TModBus) - \author Alecksey Anuchin - \version v 1.1 24/03/2017 - \defgroup V_ModBus Драйвер ModBus (см. TModBus) - @{ -*/ - -#ifndef V_MODBUS_H -#define V_MODBUS_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "mbod.h" - - -#define MODBUS_MAX_RX_COUNT 10 - -/*! \class TModBus - \brief Драйвер ModBus - - Класс \a TModBus, основанный на структуре SModBus, обрабатывает - входящие посылки по RS-485 как посылки ModBus (RTU). */ - -//! см. TModBus - - - //! Структура modbus для хранения внутренних данных - typedef struct {volatile Uint16 In[MODBUS_MAX_RX_COUNT];//!<Массив для принятия данных - volatile Uint16 InCount;//!<Счетчик для массива принятых данных - volatile MB_Record /*const*/ *Addr;//!<Указатель на словарь - volatile Uint16 TimeOut;//!<Текущий таймаут, который надо выдерживать - volatile Uint16 TimeOut1_5;//!<Рассчитанный таймаут 1,5 длины переданного байта - volatile Uint16 TimeOut2_5;//!<Рассчитанный таймаут 2,5 длины переданного байта - volatile Uint16 ToSend;//!<Данные для отправки - volatile Uint16 NumOfHRs;//!<Количество Holding Registers - volatile Uint16 MiddleOfHRs;//!<Середина Holding Registers - volatile Uint16 InitialStepOfHRs;//!<Шаг Holding Registers - volatile Uint16 NumOfIRs;//!<Количество Input Registers - volatile Uint16 MiddleOfIRs;//!<Середина Input Registers - volatile Uint16 InitialStepOfIRs;//!<Шаг Input Registers - volatile Uint16 NumOfCs;//!<Количество Coils - volatile Uint16 MiddleOfCs;//!<Середина Coils - volatile Uint16 InitialStepOfCs;//!<Шаг Coils - volatile Uint16 NumOfDIs;//!<Количество Discrete Inputs - volatile Uint16 MiddleOfDIs;//!<Середина Discrete Inputs - volatile Uint16 InitialStepOfDIs;//!<Шаг Discrete Inputs - volatile Uint16 RxCRC;//!<Принимаемая контрольная сумма - volatile Uint16 TxCRC;//!<Передаваемая контрольная сумма - volatile Uint16 MagicNumber;//!<Эм... - volatile int16 TxState;//!<Состояние передачи - volatile Uint16 temp;//!< - volatile int16 RecievedCounter;//!<Счетчик для отсчиывания таймаута по приему - UART_TypeDef *UART;//!Указатель на используемый модуль UART - } MODBUS_INT; - - #define MODBUS_INT_DEFAULTS {{0},0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\ - 0xFFFF,0xFFFF, 0xA001,-1, 0,0, \ - } - -struct SModBus{Uint32 BaudRate;//!<Скорость работы по RS - Uint16 ExecutionFreq;//!< Частота тактирования модуля - Uint16 RSNodeID; //!< Номер узла в сети - Uint16 Enabled; //!< Разрешение изменения параметров привода через ModBus - Uint16 Refresh; //!< Флаг изменения параметров по Modbus - int16 error; - int16 errorCode; - int16 AutoRestart; - int16 clear_error; - Uint16 received_data; - Uint16 GPIOsValue; - Uint16 isOnline;//!< В сети мы или нет (идут ли пакеты) - Uint32 OfflineCounter;//!< Счетчик инкрементируется с частотой вызова процедуры ModBus_Execute и обнуляется, если в сети есть пакеты - Uint32 OfflineCounterMax;//!< Таймаут отсутствия пакетов в сети (в единицах счёта OfflineCounter) - Uint16 ReceiveByteCounter;//!< Счетчик принятых байт - Uint16 ReceivePacketCounter;//!< Счетчик принятых посылок - MODBUS_INT MBInternals;//!< Служебные переменные для работы драйвера (не для пользователя) - void (*Init)(volatile struct SModBus*); - void (*Execute)(volatile struct SModBus*); - }; - - -typedef volatile struct SModBus TModBus; - - -#define MODBUS_DEFAULTS {9600,10000, 0x01, 1, 0,\ - 0,0,0,0,0,0,0,0,0,0,0,\ - MODBUS_INT_DEFAULTS,\ - ModBus_Init, \ - ModBus_Execute,\ - } - - -//! \memberof TModBus -void ModBus_Init(TModBus *p); -//! \memberof TModBus -void ModBus_Execute(TModBus *p); -//! \memberof TModBus -int16 ModBus_FindVocAddr(TModBus *p,volatile MB_Record Table[], Uint16 TableSize, int16 Type, Uint16 Index, int16 NumOfIndexs, int16 Mid, int16 Step); - - - -#ifdef __cplusplus -} -#endif - -#endif - -/*@}*/ diff --git a/Vinclude/V_QEP.h b/Vinclude/V_QEP.h index 943cedb..943f01c 100644 --- a/Vinclude/V_QEP.h +++ b/Vinclude/V_QEP.h @@ -184,7 +184,7 @@ Uint16 rsvd: union SPOSSPEED_FLG1 Posspeed_FLG1; union SPOSSPEED_FLG2 Posspeed_FLG2; Uint16 GPIOsValue;//!< Текущее значение ножек GPIO модуля QEP - Uint16 Index_eventFlag; + Uint16 Index_eventCounter; Uint16 UPPS_forWatch;//!< Текущее значение UPPS _iq AngleOffset;//!< Смещение электрического угла в градусах int16 RevolutionCounter; // Количество механических оборотов; @@ -211,13 +211,11 @@ Uint16 rsvd: typedef volatile struct SposspeedEqep TposspeedEqep; //! Инициализатор по-умолчанию. - #define POSSPEED_DEFAULTS {0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0, 0,{0},{0},0,0,FILTER_DEFAULTS,0,\ - 0,0x0790,0,0,0,0,0,0,0,0,0,0,0,\ - 0,0,0,0,0,\ - TposspeedEqep_init,\ - TposspeedEqep_Calc,\ - TposspeedEqep_SlowCalc,\ - TposspeedEqep_IndexEvent,\ + #define POSSPEED_DEFAULTS {.speed_filter = FILTER_DEFAULTS,\ + .init = TposspeedEqep_init,\ + .calc = TposspeedEqep_Calc,\ + .slow_calc = TposspeedEqep_SlowCalc,\ + .index = TposspeedEqep_IndexEvent,\ } //! \memberof TposspeedEqep diff --git a/Vinclude/V_RTC_Clock.h b/Vinclude/V_RTC_Clock.h deleted file mode 100644 index 29a1d9a..0000000 --- a/Vinclude/V_RTC_Clock.h +++ /dev/null @@ -1,83 +0,0 @@ -/*! - Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - \file V_RTC_Clock.h - \brief Модуль работы с часами реального времени - \author ООО "НПФ Вектор". Все права защищены. http://motorcontrol.ru - \version v 2.0 25/03/2016 - - \defgroup V_rmp_ctrl Задатчик интенсивности (см. TRMPCtrl) - - @{ -*/ -#ifndef V_RTC_CLOCK_H_ -#define V_RTC_CLOCK_H_ - -#define RTC_SLAVE_ADDRESS 0x68 // Для RTC DS1340 адрес 1101 000b = 0x68 (хотя в руководстве они его как бы дополняют нулём - // и получают 1101 0000b = 0xD0) -#define RTC_WRITE_ERROR 1 -#define RTC_READ_ERROR 2 -#define RTC_TIMEOUT_ERROR 3 - -#define RTC_TIMEOUT 1000 // Количество ожидания шины -#define RTC_SECOND_WAITING_TIMEOUT 10000 // Время, в течение которого должна смениться секунда (задается в мс). Если не меняется, значит часы не работают. - -struct SRTCClock{ - Uint16 ms; // На всякий - Uint16 msInDay; // Милиписюли с начала суток - Uint16 error; // Код ошибки - Uint16 tryCounter; // Счетчик ожиданий шины - - Uint16 second; - Uint16 minute; - Uint16 hour; - - Uint16 DOW; // DayOfWeek - день недели (пусть будет, что, жалко что ли?) - Uint16 day; // Date - это число месяца - Uint16 month; - Uint16 year; - - Uint32 packed_time; // Время, упакованное в слово - Uint32 timeToSet; // Время, которое нужно установить на часах, упакованное в слово - - Uint16 setTimeFlag; - Uint16 readTimeFlag; - - Uint16 secondPrev; - Uint16 stoppedCounter; - Uint16 ClockOk; - void (*init)(volatile struct SRTCClock*); // Инициализация - void (*read)(volatile struct SRTCClock*); // Прочитать время из часиков - void (*set)(volatile struct SRTCClock*); // Письнуть время в часики - void (*msCalc)(volatile struct SRTCClock*); - void (*slowCalc)(volatile struct SRTCClock*); -}; - -typedef volatile struct SRTCClock TRTCClock; - -#define RTC_CLOCK_DEFAULTS {0,0,0,0, 0,0,0, 0,0,0,0, 0,0, 0,0, 0,0,0,\ - RTC_Clock_Init,\ - RTC_Clock_Read_Time,\ - RTC_Clock_Set_Time,\ - RTC_Clock_Ms_Calc,\ - RTC_Clock_Slow_Calc} - -void RTC_Clock_Init (TRTCClock *); -void RTC_Clock_Read_Time (TRTCClock *); -void RTC_Clock_Set_Time (TRTCClock *); -void RTC_Clock_Ms_Calc (TRTCClock *); -void RTC_Clock_Slow_Calc (TRTCClock *); - -#endif /* V_I2CCLOCK_H_ */ diff --git a/Vinclude/V_SSI_Encoder.h b/Vinclude/V_SSI_Encoder.h index 0759f8e..8136429 100644 --- a/Vinclude/V_SSI_Encoder.h +++ b/Vinclude/V_SSI_Encoder.h @@ -29,6 +29,13 @@ #ifndef V_SSI_ENCODER_H #define V_SSI_ENCODER_H +// Разрешение энкодера +#define SSI_ENC_RESOLUTION 12 + +// Из-за особенностей схемы, будет приниматься на 1 бит больше, чем надо, +// поэтому старший будем обнулять этой маской +#define SSI_ENC_DATA_MASK ((1 << SSI_ENC_RESOLUTION) - 1) + #ifdef __cplusplus extern "C" { #endif @@ -83,10 +90,9 @@ extern "C" { typedef volatile struct S_SSI_Encoder TSSI_Encoder; //! Инициализатор по-умолчанию. - #define SSI_ENCODER_DEFAULTS {0,0,0,0, 0,0,0,0, 0,0,0,0,0,0, 0,0, 0,0,0,0,0,\ - SSI_Encoder_init,\ - SSI_Encoder_Calc,\ - SSI_Encoder_Read,\ + #define SSI_ENCODER_DEFAULTS {.init = SSI_Encoder_init,\ + .calc = SSI_Encoder_Calc,\ + .read = SSI_Encoder_Read,\ } //! \memberof TSSI_Encoder @@ -96,7 +102,7 @@ extern "C" { //! \memberof TSSI_Encoder void SSI_Encoder_Read(TSSI_Encoder*); - #ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Vinclude/V_UdControl.h b/Vinclude/V_UdControl.h new file mode 100644 index 0000000..647bc3c --- /dev/null +++ b/Vinclude/V_UdControl.h @@ -0,0 +1,104 @@ +/*! + Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + \file V_UdControl.h + \brief Модуль плавного заряда ЗПТ + \author ООО "НПФ Вектор". http://motorcontrol.ru + \version v 1.0 25/08/2017 + + \addtogroup + @{*/ + + +#ifndef V_UD_CONTROL_H +#define V_UD_CONTROL_H + + +#include "build.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +//! состояние выключено +#define UD_CONTROL_STATE_OFF 0 +//! состояние ожидания включения +#define UD_CONTROL_STATE_WAIT 1 +//! состояние включено +#define UD_CONTROL_STATE_ON 2 + + + + + +/*! \class TUdControl + \brief Управление цепью заряда звена постоянного тока + + Класс \a TUdControl, основанный на структуре SUdControl, служит + для управления дискретным выходом, который замыкает цепь заряда + звена постоянного тока. Перед включением следуют три проверки: + выдержка таймаута, превышение напряжения выше заданной уставки и + выполаживание кривой напряжения (производная стремится к нулю). +*/ + +//!см. TUdControl +struct SUdControl{ + Uint16 Enabled; + int fault_start; //!<попытка пуска при незашунтированном реле + int state; //!<состояние + int state_prev;//!<состояние предыдущее + int E;//!<флаг первого вхождения + int StateCounter;//!<счетчик времени нахождения в состоянии + long fUdc_output_prev;//!<значения напряжения предыдущее + long U_on;//!<напряжение включения + long U_off;//!<напряжение выключения + long Timeout_on;//!<таймаут включения в мс. + long deriv_time_ZPT; //!<производная по напряжению на миллисекунде + long deriv_const; //!<константа уставки сравнения производной + int StateOn;//!<двоичное состояние: включен/не включен + TFilter fUdc;//!<фильтр напряжения на ЗПТ + + void (*init)(volatile struct SUdControl*); + void (*calc)(volatile struct SUdControl*); +}; + +typedef volatile struct SUdControl TUdControl; + + + +//! \memberof TUdControl +void UdControl_init(TUdControl*); +//! \memberof TUdControl +void UdControl_calc(TUdControl*); + + +#define UD_CONTROL_DEFAULTS {0,0,UD_CONTROL_STATE_OFF,UD_CONTROL_STATE_OFF,\ + 0,0,0,\ + _IQ(0.8),_IQ(0.5),3000,0,\ + 0,0, FILTER_DEFAULTS,\ + UdControl_init,\ + UdControl_calc} + + +#ifdef __cplusplus +} +#endif + +#endif + + +/*@}*/ + diff --git a/Vinclude/V_adc.h b/Vinclude/V_adc.h index 1cefc1d..70225b7 100644 --- a/Vinclude/V_adc.h +++ b/Vinclude/V_adc.h @@ -53,30 +53,13 @@ extern "C" int32 IaGainNom; //!< Вспомогательный коэфф. усиления. int32 IA_temp; //!<Временная переменная - int16 IASampleLength; //длина выборки (кол-во точек на периоде ШИМ) - int16 IAPointer; //номер последней выборки - int16 IABuf[4]; //массив точек для усреднения - - int16 Imeas_b_gain; int16 Imeas_b_offset; int32 Imeas_b; int32 IbGainNom; int32 IB_temp; - int16 IBSampleLength; //длина выборки (кол-во точек на периоде ШИМ) - int16 IBPointer; //номер последней выборки - int16 IBBuf[4]; //массив точек для усреднения - - int16 Imeas_c_gain; - int16 Imeas_c_offset; int32 Imeas_c; - int32 IcGainNom; - int16 IC_temp; - - int16 ICSampleLength; //длина выборки (кол-во точек на периоде ШИМ) - int16 ICPointer; //номер последней выборки - int16 ICBuf[4]; //массив точек для усреднения int16 Udc_meas_gain; int16 Udc_meas_offset; @@ -84,14 +67,10 @@ extern "C" int32 UdcGainNom; int16 Udc_temp; - int16 UdcSampleLength; //длина выборки (кол-во точек на периоде ШИМ) - int16 UdcPointer; //номер последней выборки - int16 UdcBuf[4]; //массив точек для усреднения - - int16 T_meas_gain; //!< Коэффициент усиления. - int32 T_meas; //!< Измеренное значение усредненное. - int32 TGainNom; //!< Вспомогательный коэфф. усиления. - int16 T_temp; //!<Временная переменная + int16 AI_meas_gain; //!< Коэффициент усиления аналогового входа + int32 AI_meas; //!< Измеренное значение усредненное. + int32 AIGainNom; //!< Вспомогательный коэфф. усиления. + int16 AI_temp; //!< Временная переменная void (*init)(struct SAdcDrv *); void (*fast_calc)(struct SAdcDrv*); @@ -105,13 +84,9 @@ extern "C" //!Инициализатор по умолчанию. #define ADC_DRV_DEFAULTS {\ 54,0,0,0,0, \ - 4,0,{0}, \ 54,0,0,0,0, \ - 4,0,{0}, \ - 54,0,0,0,0, \ - 4,0,{0}, \ + 0,\ 800,0,0,0,0, \ - 4,0,{0}, \ 100,0,0,0, \ AdcDrv_init,\ AdcDrv_fast_calc,\ diff --git a/Vinclude/V_common.h b/Vinclude/V_common.h index 48cd9ba..6aecc23 100644 --- a/Vinclude/V_common.h +++ b/Vinclude/V_common.h @@ -1,25 +1,25 @@ /*! - Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" +Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. - \file v_common.h - \brief Объявление структур данных различного назначения, которые еще слишком малы для того, чтобы - организовывать их в отдельный модуль - \author ООО "НПФ Вектор". Все права защищены. http://motorcontrol.ru - \version v 2.0 25/03/2016 +\file v_common.h +\brief Объявление структур данных различного назначения, которые еще слишком малы для того, чтобы +организовывать их в отдельный модуль +\author ООО "НПФ Вектор". Все права защищены. http://motorcontrol.ru +\version v 2.0 25/03/2016 - \defgroup v_common Объявление структур данных различного назначения +\defgroup v_common Объявление структур данных различного назначения @{*/ @@ -33,90 +33,85 @@ extern "C" //!Битовое поле для битового статуса системы управления - typedef struct - { - unsigned int ready: - 1; - unsigned int running: - 1; - unsigned int fault: - 1; - unsigned int alarm: - 1; - unsigned int testing: - 1; - unsigned int overheat: - 1; - } DRV_STATUS_BIT; +typedef struct +{ + unsigned int ready :1; + unsigned int running :1; + unsigned int fault :1; + unsigned int alarm :1; + unsigned int testing :1; + unsigned int overheat :1; +} DRV_STATUS_BIT; //!Структура для статуса системы управления (содержит DRV_STATUS_BIT) - typedef union - { - int all; - DRV_STATUS_BIT bit; - }TDrvStatus; +typedef union +{ + int all; + DRV_STATUS_BIT bit; +}TDrvStatus; //!Битовое поле слова управления - typedef struct - { -unsigned int start: - 1; -unsigned int stop: - 1; -unsigned int trip_reset: - 1; -unsigned int reserved: - 5; - } CMD_BIT; +typedef struct +{ + unsigned int start :1; + unsigned int stop :1; + unsigned int trip_reset :1; + unsigned int reserved :5; +} CMD_BIT; //!Структура слова управления (содержит DRV_STATUS_BIT) - typedef union - { - unsigned int all; - CMD_BIT bit; - }TCmd; +typedef union +{ + unsigned int all; + CMD_BIT bit; +}TCmd; + - //! Структура, содержащия основные задания для привода - typedef volatile struct - { - long speed_ref;//!< Задание скорости - long Iq_ref;//!< Задание токоограничения для векторной системы управления - long i_flux_ref;//!< Задание тока для замкнутой по току системы управления (не векторной) - long theta_elec;//!< Задание углового положения вектора тока/напряжения +typedef volatile struct +{ + long speed_ref;//!< Задание скорости + long Iq_ref;//!< Задание токоограничения для векторной системы управления + long i_flux_ref;//!< Задание тока для замкнутой по току системы управления (не векторной) + long theta_elec;//!< Задание углового положения вектора тока/напряжения long ua_ref, uf_ref; // Задания тока якоря и тока ОВ для ДПТ long DCMspeed_ref;//!< Задание скорости - } TRefs; +} TRefs; //! Структура для хранения параметров привода, двигателя, базовых величин системы управления - typedef struct - { - long Rs;//!< Сопротивление фазы статора - long Ls;//!< Индуктивность фазы статора - int p;//!< Количество пар полюсов - int I_nom;//!< Номинальный (базовый) фазный ток в формате 16.0 - long _1_I_nom;//!< 1/I_nom - int U_nom;//!< Номинальное (базовое) фазное напряжение в формате 16.0 - long _1_U_nom;//!< 1/U_nom - int Udc_nom;//!< Номинальное (базовое) напряжение ЗПТ в формате 16.0 - long _1_Udc_nom;//!< 1/Udc_nom - int speed_nom;//!< Номинальная (базовая) скорость в формате 16.0 - int freq_nom;//!< Номинальная (базовая) частота в формате 16.0 - int power;//!< Номинальная (базовая) мощность в формате 16.0 - int sens_type;//!< Тип датчика положения - } TDrvParams; +typedef struct +{ + long Rs;//!< Сопротивление фазы статора + long Ls;//!< Индуктивность фазы статора + int p;//!< Количество пар полюсов + int I_nom;//!< Номинальный (базовый) фазный ток в формате 16.0 + long _1_I_nom;//!< 1/I_nom + int U_nom;//!< Номинальное (базовое) фазное напряжение в формате 16.0 + long _1_U_nom;//!< 1/U_nom + int Udc_nom;//!< Номинальное (базовое) напряжение ЗПТ в формате 16.0 + long _1_Udc_nom;//!< 1/Udc_nom + int speed_nom;//!< Номинальная (базовая) скорость в формате 16.0 + int freq_nom;//!< Номинальная (базовая) частота в формате 16.0 + int power;//!< Номинальная (базовая) мощность в формате 16.0 + int sens_type;//!< Тип датчика положения +} TDrvParams; - -//! Структура для битовых "переключателей", таких как направление вращения, разрешение рекуперации и т.п. -typedef struct { - Uint16 recuperation_ena;//!< Разрешение рекуперации энергии при торможении - Uint16 rotation_dir;//!< Направление вращения - Uint16 Reboot;//!< Программная перезагрузка - Uint16 AutoOffset;//!< автосмещение АЦП - Uint16 HardwareType;//!< Тип железа, под который собран проект - Uint16 excitation_ena;//!< Разрешение возбудителя - } TSysSwitches; + +struct SsysSwitches { + Uint16 recuperation_ena :1; //!< 0 Разрешение рекуперации энергии при торможении + Uint16 Reboot :1; //!< 1 Программная перезагрузка + Uint16 AutoOffset :1; //!< 2 автосмещение АЦП + Uint16 use_led :1; //!< 3 Использовать светодиод вместо JTAG + Uint16 use_led_prev :1; //!< 4 Использовать светодиод вместо JTAG + Uint16 :11; +}; + + +typedef union { + struct SsysSwitches bit; + Uint16 all; +} TSysSwitches; #ifdef __cplusplus } diff --git a/Vinclude/V_event_log.h b/Vinclude/V_event_log.h index 9ae3bc3..46a8af6 100644 --- a/Vinclude/V_event_log.h +++ b/Vinclude/V_event_log.h @@ -104,7 +104,7 @@ typedef volatile struct SLogger TLogger; //т.к. часов реального времени нет (МК 30.1), в качестве временнОго маркера аварий используется время включенного состояния #define LOGGER_DEFAULTS {0,0,0,1,0,\ - (Uint32*)&RTCclock.packed_time,\ + (Uint32*)&global_time.PowerOn_time,\ {0,0,0,0},0,0,0,0,0,\ EVENT_FIFO_DEFAULTS,\ Logger_Init,\ diff --git a/Vinclude/V_led.h b/Vinclude/V_led.h deleted file mode 100644 index d3ca601..0000000 --- a/Vinclude/V_led.h +++ /dev/null @@ -1,68 +0,0 @@ -/*! - Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - \file Vled.h - \brief Управление светодиодами - \author ООО "НПФ Вектор". http://motorcontrol.ru - \version v 2.0 25/03/2016 - - */ - -#ifndef VINCLUDE_V_LED_H_ -#define VINCLUDE_V_LED_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif -#include "DSP.h" - -#define LED1 0 -#define LED2 1 -#define LED3 2 -#define LED4 3 -#define LED5 4 -#define LED6 5 - -#define LED_ALL 6 - -struct Sled; -typedef volatile struct Sled Tled; - -struct Sled{ - Uint16 timer1, timer2, timer3, timer4, timer5, timer6; - Uint16 mode, prevMode; - Uint16 mode3counter; - void (*init)(Tled*); - void (*toggle)(Tled*, Uint16); - void (*on)(Tled*, Uint16); - void (*off)(Tled*, Uint16); - void (*msCalc)(Tled*); -}; - - - -#define LED_DEFAULTS {0,0,0,0,0,0,0,0,0, LED_init, LED_toggle, LED_on, LED_off, LED_msCalc} -void LED_init (Tled*); -void LED_toggle (Tled*, Uint16); -void LED_on (Tled*, Uint16); -void LED_off (Tled*, Uint16); -void LED_msCalc (Tled*); - -#ifdef __cplusplus -} -#endif - -#endif /* VINCLUDE_V_LED_H_ */ diff --git a/Vinclude/V_pid_reg3_pos.h b/Vinclude/V_pid_reg3_pos.h deleted file mode 100644 index e37969e..0000000 --- a/Vinclude/V_pid_reg3_pos.h +++ /dev/null @@ -1,108 +0,0 @@ -/*! - Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - \file V_pid_reg3.h - \brief ПИД-регулятор (см. TPidReg3) - \author ООО "НПФ Вектор". http://motorcontrol.ru - \version v 2.0 25/03/2016 - -\defgroup V_pid_reg3 ПИД-регулятор - -@{*/ - - - -#ifndef PID_REG3_POS_H -#define PID_REG3_POS_H - -#ifdef __cplusplus -extern "C" { -#endif - - /*! \class TPidReg3 - \brief Модуль ПИД-регулятора - - Класс \a TPidReg3, основанный на структуре SPidReg3, представляет - собой пропорционально - интегрально - дифференциальный регулятор. - Все коэффициенты настраиваемые, дифференциальная часть имеет настраиваемый фильтр. - - */ - -//! см. TPidReg3 -typedef struct SPidReg3_pos{ long pid_ref_reg3; //!< Input: Reference input - long pid_fdb_reg3;//!< Input: Feedback input - long e_reg3;//!ALTFUNCSET = (1 << 14) + (1 << 15); //CAN_TX[0], CAN_RX[0] - GPIOB->DENSET = (1 << 14) + (1 << 15); } #endif //CAN_1_ENABLE @@ -268,12 +267,12 @@ void co_RPDO8_Callback(Uint16 nodeID, Uint16 tag_CANnum) //!Если происходит запись в параметр [5139h.01h] Текущ. знач.Часы реального времени, //то вызывается callback_RTC - там устанавливается запрос на коррекцию часов. -void callback_RTC(Uint16 par, Uint16 tag_CANnum) { - if (par == 1) { - RTCclock.setTimeFlag = 1; //произошла запись в часы - - } -} +//void callback_RTC(Uint16 par, Uint16 tag_CANnum) { +// if (par == 1) { +// RTCclock.setTimeFlag = 1; //произошла запись в часы +// +// } +//} //!Обращение к переменной dlog.next_value_var с данными цифрового осциллографа. diff --git a/Vsrc/SM_CmdLogic.c b/Vsrc/SM_CmdLogic.c index 2182aef..d57023d 100644 --- a/Vsrc/SM_CmdLogic.c +++ b/Vsrc/SM_CmdLogic.c @@ -70,7 +70,14 @@ void SM_CmdLogicms_Calc(TSM_CmdLogic *p) { if (sm_prot.state == PROT_ON_OK) {//если ДА защит включился, обрабатываем команды включения if ((cmd.bit.start == 1) && (sm_sys.state == SYS_READY))//есть битовая команда старта - p->state = CMD_LOGIC_TURNED_ON; //поехали + if (udControl.Enabled == 0) { //Если цепь плавного заряда ЗПТ отключена, то переходим к пуску + p->state = CMD_LOGIC_TURNED_ON; //поехали + } else { + if (udControl.StateOn == 1) //Если цепь плавного заряда ЗПТ включена, ждем срабатывания реле, а потом запускаем + p->state = CMD_LOGIC_TURNED_ON; //поехали + else + udControl.fault_start = 1; //если пытаемся пустится при незашунтированном реле, попадаем в аварию + } } //дискретный автомат со структурами управления в СТОПе всегда тоже принудительно переводим в стоп diff --git a/Vsrc/SM_Ctrl.c b/Vsrc/SM_Ctrl.c index 28f0040..eb2de5c 100644 --- a/Vsrc/SM_Ctrl.c +++ b/Vsrc/SM_Ctrl.c @@ -144,7 +144,7 @@ void SM_Ctrl_Fast_Calc(TSM_Ctrl *p) { p->state = CTRL_RUN_U2F; } if (p->run_mode == CTRL_FLUXING) {//режим удержания (постоянный ток) - p->state = CTRL_FLUXING; + p->state = CTRL_RUN_I2F; } if (p->run_mode == CTRL_RUN_I2F) {//частотно-токовый режим (вращение вектора тока) p->state = CTRL_RUN_I2F; @@ -162,68 +162,13 @@ void SM_Ctrl_Fast_Calc(TSM_Ctrl *p) { p->state = CTRL_AUTO_SENSOR_TUNING; } - if (p->run_mode == CTRL_RUN_LATENCY_TEST) { // Режим измерения задержки между ШИМ и датчиками тока - p->state = CTRL_RUN_LATENCY_TEST; - } + /*DO END*/ break; } - case CTRL_FLUXING: { //Режим постоянный ток - if (p->E == 1) { - /*ENTRY START*/ - pwm.On(&pwm); - pid_id.ui_reg3 = 0; //сбрасывем интегральные каналы - pid_iq.ui_reg3 = 0; //чтобы не накапливались - pid_spd.ui_reg3 = 0; - refs.theta_elec = 0;//заданный угол - 0. Но он есть в группе Задания, его можно менять на ходу! - if (dlog.StartBits & (1 << 1)) - dlog.set_mode(1, &dlog); - /*ENTRY END*/ - } - /*DO START*/ - - //два тока фаз из АЦП в модуль фазных преобразований - clarke.as = adc.Imeas_a; - clarke.bs = adc.Imeas_b; - clarke.calc(&clarke);//расчет - - //из фазных преобразований в координатные преобразования. - //Поворачиваем вектор на заданный угол refs.theta_elec - park.ds = clarke.ds; - park.qs = clarke.qs; - park.ang = refs.theta_elec; - park.calc(&park); - - //регулятор тока "как бы" оси d (на самом деле эта ось к двигателю к оси d не привязана, это свободная ось) - pid_id.pid_ref_reg3 = refs.i_flux_ref; //задание на ток намагничивания - pid_id.pid_fdb_reg3 = park.de;//обратная связь - то что пришло с фазных преобразований - pid_id.calc(&pid_id); - - //регулятор тока "как бы" оси q (на самом деле эта ось к двигателю к оси q не привязана, это свободная ось) - pid_iq.pid_ref_reg3 = 0;//задание - ноль - pid_iq.pid_fdb_reg3 = park.qe;park.de;//обратная связь - то что пришло с фазных преобразований - pid_iq.calc(&pid_iq); - - //обратные фазные преобразования. - //Крутим вектор напряжения, который выдают регуляторы токов обратно на угол refs.theta_elec - ipark.de = pid_id.pid_out_reg3; - ipark.qe = pid_iq.pid_out_reg3; - ipark.ang = refs.theta_elec; - ipark.calc(&ipark); - - //получившиеся задания напряжения по осям альфа и бета отправляем на модуль ШИМ - pwm.UalphaRef = ipark.ds; - pwm.UbetaRef = ipark.qs; - pwm.update(&pwm); - - //в наблюдаемые переменные - текущий амплитудный ток в статоре (обратная связь регулятора d) - cur_par.Is = pid_id.pid_fdb_reg3; - - break; - } case CTRL_RUN_U2F: { //Режим скалярное управление U(f) if (p->E == 1) { @@ -295,18 +240,21 @@ void SM_Ctrl_Fast_Calc(TSM_Ctrl *p) { cur_par.Ialpha = clarke.ds; cur_par.Ibeta = clarke.qs; - //задание скорости на вход задатчика интенсивности - rmp.input = refs.speed_ref; - rmp.calc(&rmp);//расчет задатчика - - //угол refs.theta_elec - интеграл от скорости rmp.output. - //Константа FAST_CALC_TS - период дискретизации - //drv_params.freq_nom номинальная частота (базовый параметр частоты для относительных единиц измерения) - refs.theta_elec += _IQmpy( - _IQmpyI32(drv_params.freq_nom,FAST_CALC_TS), rmp.output); - cur_par.ThetaRefCurr = refs.theta_elec; - refs.theta_elec &= 0x00FFFFFF;//отсечение лишней верхней части, если угол больше единицы в IQ (360 градусов) + // Если режим не удержание, то расчитывать угол в зависимости от скорости. + // Иначе задание эл. угла будет браться из параметра и оставаться постоянным. + if (p->run_mode != CTRL_FLUXING) { + //задание скорости на вход задатчика интенсивности + rmp.input = refs.speed_ref; + rmp.calc(&rmp);//расчет задатчика + //угол refs.theta_elec - интеграл от скорости rmp.output. + //Константа FAST_CALC_TS - период дискретизации + //drv_params.freq_nom номинальная частота (базовый параметр частоты для относительных единиц измерения) + refs.theta_elec += _IQmpy( + _IQmpyI32(drv_params.freq_nom,FAST_CALC_TS), rmp.output); + cur_par.ThetaRefCurr = refs.theta_elec; + refs.theta_elec &= 0x00FFFFFF;//отсечение лишней верхней части, если угол больше единицы в IQ (360 градусов) + } //текущий угол с датчика положения, переведенный в электрический из механического //cur_par.ThetaCurr = posspeedEqep.theta_elecContinouos; @@ -396,7 +344,7 @@ void SM_Ctrl_Fast_Calc(TSM_Ctrl *p) { pid_spd.pid_out_max = refs.Iq_ref; //Максимум выхода регулятора скорости - заданный ток - if (sw.recuperation_ena & 1) //если разрешена рекуперация + if (sw.bit.recuperation_ena) //если разрешена рекуперация pid_spd.pid_out_min = -refs.Iq_ref; //минимум рег. скор. - отрицательный ток else //иначе @@ -605,7 +553,7 @@ void SM_Ctrl_Fast_Calc(TSM_Ctrl *p) { pid_spd.pid_out_max = refs.Iq_ref; //Максимум выхода регулятора скорости - заданный ток - if (sw.recuperation_ena & 1) //если разрешена рекуперация + if (sw.bit.recuperation_ena) //если разрешена рекуперация pid_spd.pid_out_min = -refs.Iq_ref; //минимум рег. скор. - отрицательный ток else //иначе @@ -743,34 +691,6 @@ void SM_Ctrl_Fast_Calc(TSM_Ctrl *p) { break; } - case CTRL_RUN_LATENCY_TEST: { //Режим постоянный ток - if (p->E == 1) { - /*ENTRY START*/ - pwm.On(&pwm); - p->ctrl_counter = 0; - - if (dlog.StartBits & (1 << 1)) - dlog.set_mode(1, &dlog); - /*ENTRY END*/ - } - /*DO START*/ - p->ctrl_counter++; - pwm.UalphaRef = 0; - pwm.UbetaRef = 0; - DebugW1++; - if (p->ctrl_counter > 100){ - if (labs(adc.Imeas_a)< refs.i_flux_ref){ - pwm.UalphaRef = _IQ(1); - pwm.UbetaRef = 0; - } else { - p->ctrl_counter = 0; - } - } - - pwm.update(&pwm); - break; - } - default: { break; diff --git a/Vsrc/SM_Net.c b/Vsrc/SM_Net.c index c696357..b4ce6a6 100644 --- a/Vsrc/SM_Net.c +++ b/Vsrc/SM_Net.c @@ -52,7 +52,7 @@ void SM_Net_Init(TSM_Net *p) { //логгер событий: // размер буфера: 50 // стартовый адрес в SPI: 3000 - FaultLog.init(&FaultLog, 50, 3000, (Uint32*)&RTCclock.packed_time);//ниже указатель на время может быть переопределен в зависимости от работы часов + FaultLog.init(&FaultLog, 50, 3000, (Uint32*)&global_time.PowerOn_time);//ниже указатель на время может быть переопределен в зависимости от работы часов ////Работа с CANopen через UART (параллельно с CAN, нет конфликта) @@ -113,10 +113,6 @@ void SM_Net_Slow_Calc(TSM_Net *p) { MBVarsConv.slow_calc(&MBVarsConv); #endif - if (RTCclock.ClockOk)//часы работают? - FaultLog.time_ptr = (Uint32*)&RTCclock.packed_time;//время для банка аварий из часов - else - FaultLog.time_ptr = (Uint32*)&global_time.PowerOn_time;//если не работают, то из модуля подсчета времени наработки } //!Быстрый расчет diff --git a/Vsrc/SM_Protect.c b/Vsrc/SM_Protect.c index b0ecd43..c6a7914 100644 --- a/Vsrc/SM_Protect.c +++ b/Vsrc/SM_Protect.c @@ -34,7 +34,6 @@ int16 WriteCounter = 0; void SM_Protect_Init(TSM_Protect *p) { p->state_prev = 0xff; p->state = 0x00; - GPIOA->DENSET = (1 << 7);//для приема ножки апп. аварии разрешаем работу ножки как цифры } //! Быстрый расчет. @@ -55,12 +54,15 @@ void SM_Protect_Fast_Calc(TSM_Protect *p) { } /*Защита по максимальному току*/ - if (adc.Imeas_a > sm_prot.Imax_protect) sm_prot.bit_fault2 |= F_CTRL_MAX_I_PH_A; - if (adc.Imeas_a < -sm_prot.Imax_protect) sm_prot.bit_fault2 |= F_CTRL_MAX_I_PH_A; - if (adc.Imeas_b > sm_prot.Imax_protect) sm_prot.bit_fault2 |= F_CTRL_MAX_I_PH_B; - if (adc.Imeas_b < -sm_prot.Imax_protect) sm_prot.bit_fault2 |= F_CTRL_MAX_I_PH_B; - if (adc.Imeas_c > sm_prot.Imax_protect) sm_prot.bit_fault2 |= F_CTRL_MAX_I_PH_C; - if (adc.Imeas_c < -sm_prot.Imax_protect) sm_prot.bit_fault2 |= F_CTRL_MAX_I_PH_C; + if (labs(adc.Imeas_a) > sm_prot.Imax_protect) sm_prot.bit_fault2 |= F_CTRL_MAX_I_PH_A; + if (labs(adc.Imeas_b) > sm_prot.Imax_protect) sm_prot.bit_fault2 |= F_CTRL_MAX_I_PH_B; + if (labs(adc.Imeas_c) > sm_prot.Imax_protect) sm_prot.bit_fault2 |= F_CTRL_MAX_I_PH_C; + + // Защита от пуска при незашунтированном реле плавного заряда ЗПТ + if (udControl.Enabled == 1) { //Если есть цепь шунтирования ЗПТ, то выставляем аварии по выполнению условий + if (udControl.fault_start == 1) + sm_prot.bit_fault1 |= F_RELAY_START; + } //при превышении скорости выше аварийной нормы if (labs(cur_par.speed) > sm_prot.speed_max) { @@ -132,19 +134,16 @@ void SM_Protect_Fast_Calc(TSM_Protect *p) { if (cmd.bit.trip_reset == 1) {//команда на сброс аварии p->state = PROT_ON_OK;//идем в "норма" p->clearDrvFault = 1; //отправить драйверу ключей команду сброса + + if (udControl.Enabled == 1) { //Если есть цепь шунтирования ЗПТ, то сбрасываем возможные состояния аварий + udControl.fault_start = 0; + } + //обнуляем все флаги аварий p->bit_fault1 = 0; p->bit_fault2 = 0; cmd.all = 0;//командное слово - //в самом низу!!! пытаемся сбросить флаг pdp аппаратный - //если авария все еще имеется, то сразу произойдет прерывание - //и возведется флаг аварии - if (PWM0->TZFLG_bit.OST == 1) { //имеется флаг аппаратной аварии - //флаг можно сбрасывать - PWM0->TZCLR = 0x7; - PWM1->TZCLR = 0x7; - PWM2->TZCLR = 0x7; - } + } break; } diff --git a/Vsrc/SM_Sys.c b/Vsrc/SM_Sys.c index 948c5a1..a8fac71 100644 --- a/Vsrc/SM_Sys.c +++ b/Vsrc/SM_Sys.c @@ -28,22 +28,28 @@ #if defined ( __CMCPPARM__ ) extern const Uint32 __Vectors; #elif defined (__GNUC__) - + // ничего #endif +#define LED_ON GPIOA->MASKLB[8].MASKLB = 8 +#define LED_OFF GPIOA->MASKLB[8].MASKLB = 0 +void setLedEnabled (Uint8 enabled) { + + // Если надо JTAG - включим альт-функцию и хорошо + if (enabled) { + GPIOA->ALTFUNCCLR = 1 << 3; + } else { + GPIOA->ALTFUNCSET = 1 << 3; + } +} + //! Инициализация системы управления после включения //!Инициализация некоторых модулей и настройка прерываний системы. //!Здесь настраивается большинство прерываний //! \memberof TSM_Sys void SM_Sys_Init(TSM_Sys *p) { -#if defined (HW_VECTORCARD_DRV8301_EVM) - sw.HardwareType = 0; -#elif defined (HW_VECTORCARD_DRV8312_EVM) - sw.HardwareType = 1; -#elif defined (HW_VECTORCARD_SIMULATOR) - sw.HardwareType = 2; -#endif + cmd.all = 0; drv_status.all = 0; UserMem.init(&UserMem); @@ -54,10 +60,12 @@ void SM_Sys_Init(TSM_Sys *p) { sm_ctrl.init(&sm_ctrl); //Структура системы управления pwm.init(&pwm); //Модуль ШИМ cur_par.init(&cur_par); //Расчет текущих показателей привода - leds.init(&leds);//светодиоды - + udControl.init(&udControl); //глобальное времЯ (внешние или внутр. часы) global_time.init(&global_time); + fanControl.init(&fanControl); + DIO_Init(); + brakeResistor.init(&brakeResistor); if (drv_params.sens_type == POS_SENSOR_TYPE_HALL){ //В типе датчика выбран ДПР на элементах Холла // DPReCAP.Init(&DPReCAP); //ДПР иниц. @@ -173,6 +181,17 @@ void SM_Sys_Init(TSM_Sys *p) { sm_sys.state = SYS_READY; + // Чтобы можно было по желанию включить светодиод: + // Разрешение изменения регистров настройки порта А, разрешение работы A3 на выход + // Но на этом этапе у нас ещё включена альтернативная функция, поэтому A3 пока ещё JTAG-овая + GPIOA->LOCKKEY = 0xaDeadBee; + __NOP();__NOP(); + GPIOA->LOCKCLR = 1 << 3; + GPIOA->OUTENSET = 1 << 3; + // На всякий случай принудительно отключим использование светодиода + sw.bit.use_led = FALSE; + + #ifdef WATCHDOG_ON Watchdog.enable(); //если сторожевой таймер используется, инициализируем #endif //WATCHDOG_ON @@ -188,25 +207,26 @@ void SM_Sys_Fast_Calc(TSM_Sys *p) { if (drv_params.sens_type == POS_SENSOR_TYPE_ENCODER) //В типе датчика выбран энкодер posspeedEqep.calc(&posspeedEqep); //ДПР энкодер if (drv_params.sens_type == POS_SENSOR_TYPE_HALL){ //В типе датчика выбран ДПР Холла - DPReCAP.AngleCalc(&DPReCAP); //ДПР Холл, интерполяция угла положения (результат в DPReCAP.Angle) - DPReCAP.Angle6Calc(&DPReCAP); //ДПР Холл, получение угла с точнгстью 60 градусов (результат в DPReCAP.Angle6) - DPReCAP.SpeedCalc(&DPReCAP); //ДПР Холл, расчет скорости вращения (DPReCAP.speed) - DPReCAP.calc_10k(&DPReCAP); //ДПР Холл, служебные функции + DPReCAP.AngleCalc(&DPReCAP); //ДПР Холл, интерполяция угла положения (результат в DPReCAP.Angle) + DPReCAP.Angle6Calc(&DPReCAP); //ДПР Холл, получение угла с точнгстью 60 градусов (результат в DPReCAP.Angle6) + DPReCAP.SpeedCalc(&DPReCAP); //ДПР Холл, расчет скорости вращения (DPReCAP.speed) + DPReCAP.calc_10k(&DPReCAP); //ДПР Холл, служебные функции } if (drv_params.sens_type == POS_SENSOR_TYPE_SSI){ //Датчик с интерфейсом SSI. Перед употреблением читайте заголовочный файл! - SSI_Encoder.calc(&SSI_Encoder);//Датчик положения SSI + SSI_Encoder.calc(&SSI_Encoder); //Датчик положения SSI } - - - sm_prot.fast_calc(&sm_prot); //Защиты - sm_ctrl.fast_calc(&sm_ctrl); //Главный дискретный автомат системы управления + DIO_fast_calc(); // Дискретные входы и выходы + udControl.calc(&udControl); // Контроль заряда ЗПТ + sm_prot.fast_calc(&sm_prot); //Защиты + sm_ctrl.fast_calc(&sm_ctrl); //Главный дискретный автомат системы управления global_time.calc(&global_time); cur_par.calc(&cur_par); //Расчет текущих показателей привода drv_params.sens_type = drv_params.sens_type & 7; //Отсекаем верхнюю часть переменной, там мусор + brakeResistor.fastCalc(&brakeResistor); #ifdef WATCHDOG_ON // Watchdog.feed();//если сторожевой таймер используется, сбрасываем его здесь #endif //WATCHDOG_ON @@ -217,15 +237,29 @@ void SM_Sys_Fast_Calc(TSM_Sys *p) { //!Вызов расчетов модулей системы управления, требующих миллисекундной дискретизации //! \memberof TSM_Sys void SM_Sys_ms_Calc(TSM_Sys* p) { - sm_cmd_logic.ms_calc(&sm_cmd_logic); //Обработка команд управления - sm_net.ms_calc(&sm_net); //обертка для вызова коммуникационных драйверов - adc.ms_calc(&adc); //АЦП + // Светодиодик + if (sm_ctrl.state == CTRL_STOP) p->ledPeriod = 2000; + else p->ledPeriod = 1000; + + p->ledTimer++; + if (p->ledTimer < (p->ledPeriod >> 1)) + LED_ON; + else if (p->ledTimer < p->ledPeriod) + LED_OFF; + else + p->ledTimer = 0; + + + + sm_cmd_logic.ms_calc(&sm_cmd_logic); //Обработка команд управления + sm_net.ms_calc(&sm_net); //обертка для вызова коммуникационных драйверов + adc.ms_calc(&adc); //АЦП sm_prot.ms_calc(&sm_prot); //Защиты AutoOffset.ms_calc(&AutoOffset); //авто смещение некоторых каналов АЦП //блочная передача драйвера CANopen. Через неё, в частности, грузятся осциллограммы dlog // Can2BTInterface.ms_calc(&Can2BTInterface, TMR2->VALUE, &co2_vars); - leds.msCalc(&leds);//светодиоды - RTCclock.msCalc(&RTCclock);//часы + fanControl.slow_calc(&fanControl); + UserMem.ms_calc(&UserMem);//пользовательская память в МК if ((drv_params.sens_type == 2) || (drv_params.sens_type == 3)){ //В типе датчика выбран ДПР Холла DPReCAP.ms_calc(&DPReCAP); @@ -238,9 +272,13 @@ void SM_Sys_ms_Calc(TSM_Sys* p) { //!Вызов медленных расчетов остальных модулей //! \memberof TSM_Sys void SM_Sys_Slow_Calc(TSM_Sys *p) { -// Can2BTInterface.slow_calc(&Can2BTInterface);//интерфейс блочной передачи CANopen, медленный расчет + //Пересчет коэффициентов для масштабирования токов и напряжений + drv_params._1_Udc_nom = _IQdiv(_IQ16(1), _IQ16(drv_params.Udc_nom)); + drv_params._1_I_nom = _IQdiv(_IQ16(1), _IQ16(drv_params.I_nom)); + drv_params._1_U_nom = _IQdiv(_IQ16(1), _IQ16(drv_params.U_nom)); + UserMem.slow_calc(&UserMem);//пользовательская память в МК - RTCclock.slowCalc(&RTCclock);//часы реального времени + sm_prot.slow_calc(&sm_prot);//модуль защит sm_net.slow_calc(&sm_net); //обертка для вызова коммуникационных драйверов dlog.background_analizer(&dlog); //фоновый обработчик модуля осциллографирования @@ -253,14 +291,11 @@ void SM_Sys_Slow_Calc(TSM_Sys *p) { posspeedEqep.slow_calc(&posspeedEqep);//инициализация модуля энкодера RotorObserver.slow_calc(&RotorObserver);//наблюдатель потока ротора АД DPReCAP.slow_calc(&DPReCAP);//ДПР Холла + DIO_slow_calc(); // Дискретные входы и выходы - //Пересчет коэффициентов для масштабирования токов и напряжений - drv_params._1_Udc_nom = _IQdiv(_IQ16(1), _IQ16(drv_params.Udc_nom)); - drv_params._1_I_nom = _IQdiv(_IQ16(1), _IQ16(drv_params.I_nom)); - drv_params._1_U_nom = _IQdiv(_IQ16(1), _IQ16(drv_params.U_nom)); - if (sw.Reboot & 1) { //команда перезагрузки - sw.Reboot = 0; //сбрасываем её + if (sw.bit.Reboot & 1) { //команда перезагрузки + sw.bit.Reboot = 0; //сбрасываем её if (sm_ctrl.state == CTRL_STOP) { //перезагружаемся только в останове //выполняем сброс проца //Перезагружает во флеш! @@ -270,11 +305,16 @@ void SM_Sys_Slow_Calc(TSM_Sys *p) { //вызов расчета смещения АЦП для токов фаз //Делаем расчет только в останове и отсутствии аварии - if ((sw.AutoOffset & 1) && (sm_ctrl.state == CTRL_STOP)) AutoOffset.Enabled=1; + if ((sw.bit.AutoOffset) && (sm_ctrl.state == CTRL_STOP)) AutoOffset.Enabled=1; else AutoOffset.Enabled=0; + // Если разрешили светодиод + if (sw.bit.use_led && !sw.bit.use_led_prev) + setLedEnabled(TRUE); + else if (!sw.bit.use_led && sw.bit.use_led_prev) + setLedEnabled(FALSE); - + sw.bit.use_led_prev = sw.bit.use_led; } /*@}*/ diff --git a/Vsrc/V_AutoOffset.c b/Vsrc/V_AutoOffset.c index f8d67e8..766c748 100644 --- a/Vsrc/V_AutoOffset.c +++ b/Vsrc/V_AutoOffset.c @@ -42,14 +42,12 @@ void AutoOffset_calc(TAutoOffset *p) { //если это не так, то интеграторы пойдут считать p->IA_int = p->IA_int + _IQmpy(p->FilterK, adc.Imeas_a); p->IB_int = p->IB_int + _IQmpy(p->FilterK, adc.Imeas_b); - p->IC_int = p->IC_int + _IQmpy(p->FilterK, adc.Imeas_c); } void AutoOffset_slow_calc(TAutoOffset *p) { long IA_pu; long IB_pu; - long IC_pu; if (p->Enabled){//если модуль авторасчета смещения токов включен //пересчитываем из о.е. обратно в значения АЦП @@ -59,12 +57,9 @@ void AutoOffset_slow_calc(TAutoOffset *p) { IB_pu = -p->IB_int / (_IQ16mpy(adc.Imeas_b_gain, drv_params._1_I_nom)); adc.Imeas_b_offset = IB_pu >> 1; - IC_pu = -p->IC_int / (_IQ16mpy(adc.Imeas_c_gain, drv_params._1_I_nom)); - adc.Imeas_c_offset = IC_pu >> 1; } else {//модуль выключен, инициализируем интеграторы текущими значенями смещений p->IA_int=-(((long)adc.Imeas_a_offset)<<1)*_IQ16mpy(adc.Imeas_a_gain, drv_params._1_I_nom); p->IB_int=-(((long)adc.Imeas_b_offset)<<1)*_IQ16mpy(adc.Imeas_b_gain, drv_params._1_I_nom); - p->IC_int=-(((long)adc.Imeas_c_offset)<<1)*_IQ16mpy(adc.Imeas_c_gain, drv_params._1_I_nom); } } diff --git a/Vsrc/V_BrakeResistor.c b/Vsrc/V_BrakeResistor.c new file mode 100644 index 0000000..1030839 --- /dev/null +++ b/Vsrc/V_BrakeResistor.c @@ -0,0 +1,73 @@ +/*! + Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + \file V_BrakeResistor.c + \brief Модуль управления сливным резистором + \author ООО "НПФ Вектор". http://motorcontrol.ru + \version v 1.0 25/08/2017 + + \addtogroup + @{*/ + +#include +#include "main.h" + +#if defined (HW_MOTORCONTROLBOARD) +#define BR_CONTROL_OFF GPIOB->DATAOUTCLR = (1 << 7); +#define BR_CONTROL_ON GPIOB->DATAOUTSET = (1 << 7); +#else +#define BR_CONTROL_OFF // операция для выключения +#define BR_CONTROL_ON // операция для включения +#endif + +void BrakeResistor_Init (TbrakeResistor *p) { + p->state = BRAKE_R_STATE_OFF; + + // Настройка ножки + BR_CONTROL_OFF; + GPIOB->ALTFUNCCLR = (1 << 7); + GPIOB->OUTENSET = (1 << 7); + +} + +void BrakeResistor_fastCalc (TbrakeResistor *p) { + // Защита от одинаковых уставок (должен быть гистерезис) + if (p->bottomLevel >= p->upperLevel) + p->bottomLevel = _IQmpy(p->upperLevel, _IQ(0.95)); + + if (!p->enabled) { + p->state = BRAKE_R_STATE_OFF; + BR_CONTROL_OFF; + return; + } + // Если разрешено управление тормозным резистором, то + // если напряжение больше одной уставки - влкючить, а если меньше другой - выключить + + if (adc.Udc_meas > p->upperLevel){ + p->state = BRAKE_R_STATE_ON; + BR_CONTROL_ON; + + } else if (adc.Udc_meas < p->bottomLevel) { + p->state = BRAKE_R_STATE_OFF; + BR_CONTROL_OFF; + } + + + + + +} + +/*@}*/ diff --git a/Vsrc/V_CANtoRS.c b/Vsrc/V_CANtoRS.c index 9ab0ed9..c855c52 100644 --- a/Vsrc/V_CANtoRS.c +++ b/Vsrc/V_CANtoRS.c @@ -31,11 +31,9 @@ void CANtoRS_init(TCANtoRS *p) { GPIOB->ALTFUNCSET = (1 << 8) + (1 << 9); - GPIOB->DENSET = (1 << 8) + (1 << 9); p->UART=UART1;//Используемый в драйвере номер UART (0, 1) - p->UART->CR_bit.UARTEN = 1; // Разрешить работу UART // Настройка частоты в двух регистрах: // задание делителя частоты для получения BaudRate @@ -49,14 +47,25 @@ void CANtoRS_init(TCANtoRS *p) { p->UART->FBRD_bit.DIVFRAC = 8; - p->UART->LCRH_bit.SPS = 0; // Нет проверки четности - p->UART->LCRH_bit.WLEN = 3; // Длина посылки 8 бит - p->UART->LCRH_bit.FEN = 1; // Использовать FIFO - p->UART->CR_bit.TXE = 1; // Разрешить приём - p->UART->CR_bit.RXE = 1; // Разрешить передачу - p->UART->LCRH_bit.STP2 = 0; // 1 стоп-бит + //p->UART->LCRH_bit.SPS = 0; // Нет проверки четности + //p->UART->LCRH_bit.WLEN = 3; // Длина посылки 8 бит + //p->UART->LCRH_bit.FEN = 1; // Использовать FIFO + //p->UART->LCRH_bit.STP2 = 0; // 1 стоп-бит + // + //p->UART->CR_bit.UARTEN = 1; // Разрешить работу UART + //p->UART->CR_bit.TXE = 1; // Разрешить приём + //p->UART->CR_bit.RXE = 1; // Разрешить передачу - p->CounterWrongCRC=0; + p->UART->LCRH = (0 << UART_LCRH_SPS_Pos) | + (3 << UART_LCRH_WLEN_Pos) | + (1 << UART_LCRH_FEN_Pos) | + (0 << UART_LCRH_STP2_Pos); + + p->UART->CR = (1 << UART_CR_UARTEN_Pos) | + (1 << UART_CR_TXE_Pos) | + (1 << UART_CR_RXE_Pos); + + p->CounterWrongCRC=0; p->CounterRes=0; p->CounterSended=0; p->PacketInWait=0; @@ -73,8 +82,8 @@ void CANtoRS_init(TCANtoRS *p) { Uint16 CANtoRS_SendP(Uint16* Data, int16 len, TCANtoRS *p) { volatile int16 i; Uint16 MyCRC; - p->buf_out[0]=0x7E; - for (i=0;ibuf_out[0] = 0x7E; + for (i = 0; i < len; i++) p->buf_out[i+1]=Data[i]; MyCRC=CANtoRS_C_CRC(p,Data,len); p->buf_out[len+1]=MyCRC & 0xFF;//первый байт diff --git a/Vsrc/V_DIO.c b/Vsrc/V_DIO.c new file mode 100644 index 0000000..dc97c54 --- /dev/null +++ b/Vsrc/V_DIO.c @@ -0,0 +1,85 @@ +/*! + Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + \file V_DIO.c + \brief Модуль дискретных входов/выходов + \author ООО "НПФ Вектор". http://motorcontrol.ru + \version v 1.0 25/08/2017 + + \addtogroup + @{*/ + + + +#include "main.h" +#include "filter.h" + + + +// Вектор состоЯниЯ дискретных выходов +volatile Uint8 output_vect = 0; + +// Вектор состоЯниЯ дискретных входов +volatile Uint8 input_vect = 0; + +// Фильтры дискретных входов +TFilter fIn1 = FILTER_DEFAULTS; + + + +void DIO_Init() +{ +#if defined (HW_MOTORCONTROLBOARD) + // Инициализация дискретного входа + GPIOA->ALTFUNCCLR = (1 << 14); + GPIOA->OUTENCLR = (1 << 14); + + // Инициализация дискретного выхода + GPIOA->ALTFUNCCLR = (1 << 15); + GPIOA->OUTENSET = (1 << 15); + + // Коэффициент фильтрации дискретных входов + fIn1.T = _IQ(0.03); + +#endif + +} + + +void DIO_slow_calc() +{ + // Выводим управлЯющее воздействие по Выходу 1 + if (BIT_IS_SET(output_vect, 0)) + D_OUT1_ON; + else + D_OUT1_OFF; + + // Получаем состоЯние Входа 1 с учётом фильтрации + if (fIn1.output > _IQ(0.8)) SET_BIT(input_vect, 0); + if (fIn1.output < _IQ(0.3)) CLEAR_BIT(input_vect, 0); + +} + + +void DIO_fast_calc() +{ + // Инерционный фильтр дискретного Входа 1 + fIn1.input = (D_IN1 == 1) ? _IQ(1.0) : 0; + fIn1.calc(&fIn1); + +} + +/*@}*/ + diff --git a/Vsrc/V_DPR_eCAP.c b/Vsrc/V_DPR_eCAP.c index 5ff2393..e2e6399 100644 --- a/Vsrc/V_DPR_eCAP.c +++ b/Vsrc/V_DPR_eCAP.c @@ -41,76 +41,120 @@ void DPReCAP_Init(TDPReCAP* p) { //Инициализация ECAP1 ECAP0->ECEINT = 0x0000; // Disable all capture interrupts ECAP0->ECCLR = 0xFFFF; // Clear all CAP interrupt flags - ECAP0->ECCTL0_bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads - ECAP0->ECCTL1_bit.TSCTRSTOP = 0; // Make sure the counter is stopped - ECAP0->ECCTL0_bit.PRESCALE = 0; // DIV1 + //ECAP0->ECCTL0 = 0; // Disable CAP1-CAP4 register loads + //ECAP0->ECCTL1 = 0; // Make sure the counter is stopped // Configure peripheral registers - ECAP0->ECCTL1_bit.CONTOST = 0; // continuous mode - ECAP0->ECCTL0_bit.CAP0POL = 0; // rising edge - ECAP0->ECCTL0_bit.CAP1POL = 1; // falling edge - ECAP0->ECCTL0_bit.CTRRST0 = 0; // absolute time stamp - ECAP0->ECCTL0_bit.CTRRST1 = 0; // absolute time stamp - ECAP0->ECCTL1_bit.STOPWRAP = 1; // Wrap after Capture Event 2 -// ECAP0->ECCTL1_bit.SYNCI_EN = 1; // Enable sync in - ECAP0->ECCTL1_bit.SYNCOSEL = 0; // Pass through - ECAP0->ECCTL0_bit.CAPLDEN = 1; // Enable capture units + //ECAP0->ECCTL0_bit.CAP0POL = 0; // rising edge + //ECAP0->ECCTL0_bit.CAP1POL = 1; // falling edge + //ECAP0->ECCTL0_bit.CTRRST0 = 0; // absolute time stamp + //ECAP0->ECCTL0_bit.CTRRST1 = 0; // absolute time stamp + //ECAP0->ECCTL0_bit.CAPLDEN = 1; // Enable capture units + //ECAP0->ECCTL0_bit.PRESCALE = 0; // DIV1 + // + //ECAP0->ECCTL1_bit.CONTOST = 0; // continuous mode + //ECAP0->ECCTL1_bit.STOPWRAP = 1; // Wrap after Capture Event 2 + //ECAP0->ECCTL1_bit.SYNCOSEL = 0; // Pass through + //ECAP0->ECCTL1_bit.TSCTRSTOP = 1; // Start Counter + //ECAP0->ECCTL1_bit.REARM = 0; // Has no effect (Не очень понимаю этот регистр) + // + //ECAP0->ECEINT_bit.CEVT0 = 1; // 1 events = interrupt + //ECAP0->ECEINT_bit.CEVT1 = 1; // 2 events = interrupt + ECAP0->ECCTL0 = (0 << ECAP_ECCTL0_CAP0POL_Pos) | + (1 << ECAP_ECCTL0_CAP1POL_Pos) | + (0 << ECAP_ECCTL0_CTRRST0_Pos) | + (0 << ECAP_ECCTL0_CTRRST1_Pos) | + (1 << ECAP_ECCTL0_CAPLDEN_Pos) | + (0 << ECAP_ECCTL0_PRESCALE_Pos); + ECAP0->ECCTL1 = (0 << ECAP_ECCTL1_CONTOST_Pos) | + (1 << ECAP_ECCTL1_STOPWRAP_Pos) | + (1 << ECAP_ECCTL1_TSCTRSTOP_Pos) | + (0 << ECAP_ECCTL1_REARM_Pos) | + (0 << ECAP_ECCTL1_SYNCOSEL_Pos); - ECAP0->ECCTL1_bit.TSCTRSTOP = 1; // Start Counter - ECAP0->ECCTL1_bit.REARM = 0; // Has no effect (Не очень понимаю этот регистр) - ECAP0->ECCTL0_bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loads - ECAP0->ECEINT_bit.CEVT0 = 1; // 1 events = interrupt - ECAP0->ECEINT_bit.CEVT1 = 1; // 2 events = interrupt + ECAP0->ECEINT = (1 << ECAP_ECEINT_CEVT0_Pos) | + (1 << ECAP_ECEINT_CEVT1_Pos); //Инициализация ECAP2 ECAP1->ECEINT = 0x0000; // Disable all capture interrupts ECAP1->ECCLR = 0xFFFF; // Clear all CAP interrupt flags - ECAP1->ECCTL0_bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads - ECAP1->ECCTL1_bit.TSCTRSTOP = 0; // Make sure the counter is stopped - ECAP1->ECCTL0_bit.PRESCALE = 0; // DIV1 + //ECAP1->ECCTL0_bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads + //ECAP1->ECCTL1_bit.TSCTRSTOP = 0; // Make sure the counter is stopped + // + //// Configure peripheral registers + //ECAP1->ECCTL0_bit.CAP0POL = 0; // rising edge + //ECAP1->ECCTL0_bit.CAP1POL = 1; // falling edge + //ECAP1->ECCTL0_bit.CTRRST0 = 0; // absolute time stamp + //ECAP1->ECCTL0_bit.CTRRST1 = 0; // absolute time stamp + //ECAP1->ECCTL0_bit.CAPLDEN = 1; // Enable capture units + //ECAP1->ECCTL0_bit.PRESCALE = 0; // DIV1 + // + //ECAP1->ECCTL1_bit.CONTOST = 0; // continuous mode + //ECAP1->ECCTL1_bit.STOPWRAP = 1; // Wrap after Capture Event 2 + //ECAP1->ECCTL1_bit.TSCTRSTOP = 1; // Start Counter + //ECAP1->ECCTL1_bit.REARM = 0; // Has no effect (Не очень понимаю этот регистр) + //ECAP1->ECCTL1_bit.SYNCOSEL = 0; // Pass through + // + //ECAP1->ECEINT_bit.CEVT0 = 1; // 1 events = interrupt + //ECAP1->ECEINT_bit.CEVT1 = 1; // 2 events = interrupt - // Configure peripheral registers - ECAP1->ECCTL1_bit.CONTOST = 0; // continuous mode - ECAP1->ECCTL0_bit.CAP0POL = 0; // rising edge - ECAP1->ECCTL0_bit.CAP1POL = 1; // falling edge - ECAP1->ECCTL0_bit.CTRRST0 = 0; // absolute time stamp - ECAP1->ECCTL0_bit.CTRRST1 = 0; // absolute time stamp - ECAP1->ECCTL1_bit.STOPWRAP = 1; // Wrap after Capture Event 2 -// ECAP1->ECCTL1_bit.SYNCI_EN = 1; // Enable sync in - ECAP1->ECCTL1_bit.SYNCOSEL = 0; // Pass through - ECAP1->ECCTL0_bit.CAPLDEN = 1; // Enable capture units + ECAP1->ECCTL0 = (0 << ECAP_ECCTL0_CAP0POL_Pos) | + (1 << ECAP_ECCTL0_CAP1POL_Pos) | + (0 << ECAP_ECCTL0_CTRRST0_Pos) | + (0 << ECAP_ECCTL0_CTRRST1_Pos) | + (1 << ECAP_ECCTL0_CAPLDEN_Pos) | + (0 << ECAP_ECCTL0_PRESCALE_Pos); + + ECAP1->ECCTL1 = (0 << ECAP_ECCTL1_CONTOST_Pos) | + (1 << ECAP_ECCTL1_STOPWRAP_Pos) | + (1 << ECAP_ECCTL1_TSCTRSTOP_Pos) | + (0 << ECAP_ECCTL1_REARM_Pos) | + (0 << ECAP_ECCTL1_SYNCOSEL_Pos); + + ECAP1->ECEINT = (1 << ECAP_ECEINT_CEVT0_Pos) | + (1 << ECAP_ECEINT_CEVT1_Pos); - ECAP1->ECCTL1_bit.TSCTRSTOP = 1; // Start Counter - ECAP1->ECCTL1_bit.REARM = 0; // Has no effect (Не очень понимаю этот регистр) - ECAP1->ECCTL0_bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loads - ECAP1->ECEINT_bit.CEVT0 = 1; // 1 events = interrupt - ECAP1->ECEINT_bit.CEVT1 = 1; // 2 events = interrupt //Инициализация ECap3 ECAP2->ECEINT = 0x0000; // Disable all capture interrupts ECAP2->ECCLR = 0xFFFF; // Clear all CAP interrupt flags - ECAP2->ECCTL0_bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads - ECAP2->ECCTL1_bit.TSCTRSTOP = 0; // Make sure the counter is stopped - ECAP2->ECCTL0_bit.PRESCALE = 0; // DIV1 + //ECAP2->ECCTL0_bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads + //ECAP2->ECCTL1_bit.TSCTRSTOP = 0; // Make sure the counter is stopped + // + //// Configure peripheral registers + //ECAP2->ECCTL0_bit.CAP0POL = 0; // rising edge + //ECAP2->ECCTL0_bit.CAP1POL = 1; // falling edge + //ECAP2->ECCTL0_bit.CTRRST0 = 0; // absolute time stamp + //ECAP2->ECCTL0_bit.CTRRST1 = 0; // absolute time stamp + //ECAP2->ECCTL0_bit.CAPLDEN = 1; // Enable capture units + //ECAP2->ECCTL0_bit.PRESCALE = 0; // DIV1 + // + //ECAP2->ECCTL1_bit.CONTOST = 0; // continuous mode + //ECAP2->ECCTL1_bit.STOPWRAP = 1; // Wrap after Capture Event 2 + //ECAP2->ECCTL1_bit.TSCTRSTOP = 1; // Start Counter + //ECAP2->ECCTL1_bit.REARM = 0; // Has no effect (Не очень понимаю этот регистр) + //ECAP2->ECCTL1_bit.SYNCOSEL = 0; // Pass through + // + //ECAP2->ECEINT_bit.CEVT0 = 1; // 1 events = interrupt + //ECAP2->ECEINT_bit.CEVT1 = 1; // 2 events = interrupt - // Configure peripheral registers - ECAP2->ECCTL1_bit.CONTOST = 0; // continuous mode - ECAP2->ECCTL0_bit.CAP0POL = 0; // rising edge - ECAP2->ECCTL0_bit.CAP1POL = 1; // falling edge - ECAP2->ECCTL0_bit.CTRRST0 = 0; // absolute time stamp - ECAP2->ECCTL0_bit.CTRRST1 = 0; // absolute time stamp - ECAP2->ECCTL1_bit.STOPWRAP = 1; // Wrap after Capture Event 2 -// ECAP2->ECCTL1_bit.SYNCI_EN = 1; // Enable sync in - ECAP2->ECCTL1_bit.SYNCOSEL = 0; // Pass through - ECAP2->ECCTL0_bit.CAPLDEN = 1; // Enable capture units + ECAP2->ECCTL0 = (0 << ECAP_ECCTL0_CAP0POL_Pos) | + (1 << ECAP_ECCTL0_CAP1POL_Pos) | + (0 << ECAP_ECCTL0_CTRRST0_Pos) | + (0 << ECAP_ECCTL0_CTRRST1_Pos) | + (1 << ECAP_ECCTL0_CAPLDEN_Pos) | + (0 << ECAP_ECCTL0_PRESCALE_Pos); - ECAP2->ECCTL1_bit.TSCTRSTOP = 1; // Start Counter - ECAP2->ECCTL1_bit.REARM = 0; // Has no effect (Не очень понимаю этот регистр) - ECAP2->ECCTL0_bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loads - ECAP2->ECEINT_bit.CEVT0 = 1; // 1 events = interrupt - ECAP2->ECEINT_bit.CEVT1 = 1; // 2 events = interrupt + ECAP2->ECCTL1 = (0 << ECAP_ECCTL1_CONTOST_Pos) | + (1 << ECAP_ECCTL1_STOPWRAP_Pos) | + (1 << ECAP_ECCTL1_TSCTRSTOP_Pos) | + (0 << ECAP_ECCTL1_REARM_Pos) | + (0 << ECAP_ECCTL1_SYNCOSEL_Pos); + + ECAP2->ECEINT = (1 << ECAP_ECEINT_CEVT0_Pos) | + (1 << ECAP_ECEINT_CEVT1_Pos); p->TsNom = ((SystemCoreClock / (drv_params.speed_nom * drv_params.p)) * 15*2); //коэффициент для пересчета времени между метками в мс в скорость в об/мин @@ -560,7 +604,6 @@ void DPReCAP_SlowCalc(TDPReCAP* p) { if (p->initialized==0){ p->Init(p); GPIOA->ALTFUNCSET = (1 << 4) + (1 << 5) + (1 << 6); - GPIOA->DENSET = (1 << 4) + (1 << 5) + (1 << 6); SIU->REMAPAF_bit.ECAP0EN = 1; SIU->REMAPAF_bit.ECAP1EN = 1; SIU->REMAPAF_bit.ECAP2EN = 1; diff --git a/Vsrc/V_Fan.c b/Vsrc/V_Fan.c new file mode 100644 index 0000000..4be14b5 --- /dev/null +++ b/Vsrc/V_Fan.c @@ -0,0 +1,92 @@ +/*! + Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + \file V_Fan.c + \brief Модуль работы вентилятора + \author ООО "НПФ Вектор". http://motorcontrol.ru + \version v 1.0 25/08/2017 + + \addtogroup + @{*/ + + +#include "main.h" + + +//! \memberof TFanControl +void FanControl_init(TFanControl *p) +{ +#if defined (HW_MOTORCONTROLBOARD) + p->Enabled = 1; //Включаем блок вентилятора + + //Проинитим выход для управления вентилятором + FAN_OFF; + GPIOB->ALTFUNCCLR = (1 << 4); //выключить альт. функцию + GPIOB->OUTENSET = (1 << 4); //на выход +#endif +} + +//! \memberof TFanControl +void FanControl_slow_calc(TFanControl *p) { + if (p->Enabled){//если есть вентилятор + //считаем дискретный автомат + p->state_shadow = p->state; + p->state_prev = p->state_shadow; + + switch (p->state_shadow) { + + + case FAN_CONTROL_STATE_OFF: //вентилятор не работает, температура инвертора меньше T_on + { + FAN_OFF; + p->StateOn = 0; + if ((p->temperature > p->T_on) || (p->manualOn)) + p->state = FAN_CONTROL_STATE_ON; + break; + } + + case FAN_CONTROL_STATE_ON: //включение вентилятора, температура больше T_on и меньше T_alarm + { + FAN_ON; //включить вентилятор + p->StateOn = 1; //состояние работы + + if (p->temperature > p->T_alarm) //если температура поднялась еще больше, переходим в режим перегрева + p->state = FAN_CONTROL_STATE_OVERHEAT; + if ((p->temperature < p->T_off) && (!p->manualOn)) //если температура опустилась ниже заданного уровня, переходим в обычный режим + p->state = FAN_CONTROL_STATE_OFF; + break; + } + + case FAN_CONTROL_STATE_OVERHEAT: //температура больше T_alarm, вентилятор работает, выводится предупреждение о перегреве + { + FAN_ON; //включить вентилятор + p->StateOn = 1; //состояние работы + drv_status.bit.overheat = 1; //вывод предупреждения о перегреве + if (p->temperature < p->T_alarm) { //если температура опустилась ниже заданного уровня, переходим в обычный режим + drv_status.bit.overheat = 0; //сброс предупреждения о перегреве + p->state = FAN_CONTROL_STATE_ON; + } + break; + + } + + } + } + + +} + +/*@}*/ + diff --git a/Vsrc/V_PWM_Module.c b/Vsrc/V_PWM_Module.c index fbb9332..cc55b0d 100644 --- a/Vsrc/V_PWM_Module.c +++ b/Vsrc/V_PWM_Module.c @@ -32,10 +32,7 @@ void PWM_Module_Init(TPWM_Module *p) { SIU->PWMSYNC_bit.PRESCRST = 0; //синхронизация таймеров - сброс внутренних счетчиков - -// ------------------------------------------------------------------------ - // Настраиваем модуль ePWM0 - // ------------------------------------------------------------------------ + // Настройка периода if (p->Frequency < PWM_FREQ_MIN) p->Frequency = PWM_FREQ_MIN; if (p->Frequency > PWM_FREQ_MAX) @@ -44,43 +41,58 @@ void PWM_Module_Init(TPWM_Module *p) { p->k_pwm = PWM0->TBPRD; p->FreqPrev = p->Frequency; //предыдущая частота + +// ------------------------------------------------------------------------ + // Настраиваем модуль ePWM0 + // ------------------------------------------------------------------------ PWM0->TBPHS_bit.TBPHS = 0x0000; // Phase is 0 PWM0->TBCTR = 0x0000; // Clear counter - // Setup counter mode - PWM0->TBCTL_bit.PRDLD = TB_SHADOW; // загрузка TBPRD при TBCTR = 0 - PWM0->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN; // Count up-down - PWM0->TBCTL_bit.PHSEN = TB_DISABLE; // Disable phase loading - PWM0->TBCTL_bit.PHSDIR = TB_UP; // Считать вверх после загрузки фазы - PWM0->TBCTL_bit.HSPCLKDIV = 0; // High Speed Time-base Clock Prescale - PWM0->TBCTL_bit.CLKDIV = 0; // Time-base Clock Prescale - PWM0->TBCTL_bit.SYNCOSEL = TB_CTR_ZERO; // выдаём синхро-сигнал при TBCTR = 0 + // Настройка счётчика. в комментарии расписано по полям, но для ускорения всё грузится за один раз + //PWM0->TBCTL_bit.PRDLD = TB_SHADOW; // Загрузка TBPRD при TBCTR = 0 + //PWM0->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN; // Счёт вверх-вниз + //PWM0->TBCTL_bit.PHSEN = TB_DISABLE; // Не синхронизировать этот таймер ни с чем + //PWM0->TBCTL_bit.HSPCLKDIV = 0; // Первый делитель частоты (нет деления) + //PWM0->TBCTL_bit.CLKDIV = 0; // Второй делитель частоты (нет деления) + //PWM0->TBCTL_bit.SYNCOSEL = TB_CTR_ZERO; // Выдаём синхро-сигнал при TBCTR = 0 + //PWM0->TBCTL_bit.FREESOFT = 2; // Продолжать счёт при дебажном останове процессора + //PWM0->TBCTL_bit.SHADOWGLOB = 1; // Разрешить нормальную работу теневых регистров - // Setup shadowing - PWM0->CMPCTL_bit.SHDWAMODE = CC_SHADOW; //включить SHADOW для сравнения - PWM0->CMPCTL_bit.LOADAMODE = CC_CTR_ZERO; // Load on period and zero + PWM0->TBCTL = (TB_SHADOW << PWM_TBCTL_PRDLD_Pos) | + (TB_COUNT_UPDOWN << PWM_TBCTL_CTRMODE_Pos) | + (TB_DISABLE << PWM_TBCTL_PHSEN_Pos) | + (0 << PWM_TBCTL_HSPCLKDIV_Pos) | + (0 << PWM_TBCTL_CLKDIV_Pos) | + (TB_CTR_ZERO << PWM_TBCTL_SYNCOSEL_Pos) | + (2 << PWM_TBCTL_FREESOFT_Pos) | + (1 << PWM_TBCTL_SHDWGLOB_Pos); - PWM0->CMPCTL_bit.SHDWBMODE = CC_SHADOW; //включить SHADOW для сравнения - PWM0->CMPCTL_bit.LOADBMODE = CC_CTR_ZERO; // Load on period and zero + // Настройка теневых загрузок регистров + //PWM0->CMPCTL_bit.SHDWAMODE = CC_SHADOW; // Использовать теневой регистр для CMPA + //PWM0->CMPCTL_bit.LOADAMODE = CC_CTR_ZERO; // Загружать в активный из теневого по нулю счётчика + //PWM0->CMPCTL_bit.SHDWBMODE = CC_SHADOW; // Использовать теневой регистр для CMPB + //PWM0->CMPCTL_bit.LOADBMODE = CC_CTR_ZERO; // Загружать в активный из теневого по нулю счётчика + PWM0->CMPCTL = (CC_SHADOW << PWM_CMPCTL_SHDWAMODE_Pos) | + (CC_CTR_ZERO << PWM_CMPCTL_LOADAMODE_Pos) | + (CC_SHADOW << PWM_CMPCTL_SHDWBMODE_Pos) | + (CC_CTR_ZERO << PWM_CMPCTL_LOADBMODE_Pos); - // Set Compare values + // Обнуление уставки сравнения PWM0->CMPA_bit.CMPA = 0; // Set compare A value - // Set actions - PWM0->AQCTLA = AQ_EPWM_DISABLE; // для начала события для PWM1A запрещены - PWM0->AQCTLA_bit.ZRO = 1; //обнуляем при нуле счетчика - PWM0->AQCTLA_bit.CAU = 2; //включаем при сравнении и инкрементиовании - PWM0->AQCTLA_bit.CAD = 1; //обнуляем при сравнении и декрементровании + // Настройка действий при сравнении счётчика с уставками + //PWM0->AQCTLA_bit.ZRO = AQ_CLEAR; //обнуляем при нуле счетчика + //PWM0->AQCTLA_bit.CAU = AQ_SET; //включаем при сравнении и инкрементиовании + //PWM0->AQCTLA_bit.CAD = AQ_CLEAR; //обнуляем при сравнении и декрементровании + PWM0->AQCTLA = (AQ_CLEAR << PWM_AQCTLA_ZRO_Pos) | + (AQ_SET << PWM_AQCTLA_CAU_Pos) | + (AQ_CLEAR << PWM_AQCTLA_CAD_Pos); - //Для PWMB тоже самое, что для PWMА. Без инверсии. Инверсия далее в модуле МВ - PWM0->AQCTLB = PWM0->AQCTLA; // для начала события для PWM1B запрещены - PWM0->AQCTLB_bit.ZRO = PWM0->AQCTLA_bit.ZRO; //обнуляем при нуле счетчика - PWM0->AQCTLB_bit.CAU = PWM0->AQCTLA_bit.CAU; //включаем при сравнении и инкрементиовании - PWM0->AQCTLB_bit.CAD = PWM0->AQCTLA_bit.CAD; //обнуляем при сравнении и декрементровании + //Для PWMB настройка не нужна, так как он при помощи блока мёртвого времени будет инверсией от канала A PWM0->AQSFRC_bit.RLDCSF = 0; //по ТО надо писать 0 - // Setup Deadband + // Настройка блока мёртвого времени // DBRED = DBFED = 150 * Tм_мкс / 4 PWM0->DBRED = _IQ4mpy(_IQ4(150 / 4), p->DeadBand >> 20) >> 4; PWM0->DBFED = PWM0->DBRED; @@ -92,82 +104,60 @@ void PWM_Module_Init(TPWM_Module *p) { // с задержанным задним фронтом инвертируется // OUTMODE:S0 = 1 S1 = 1 на канал PWMA выходит исходный сигнал PWMA, но с задержанным передним фронтом // На канал PWMB выходит сигнал PWMA с задержанным задним фронтом да ещё и с инверсией - PWM0->DBCTL_bit.INMODE = DBA_ALL; - PWM0->DBCTL_bit.POLSEL = DB_ACTV_HIC; - PWM0->DBCTL_bit.OUTMODE = DB_FULL_ENABLE; + //PWM0->DBCTL_bit.INMODE = DBA_ALL; + //PWM0->DBCTL_bit.POLSEL = DB_ACTV_HIC; + //PWM0->DBCTL_bit.OUTMODE = DB_FULL_ENABLE; + PWM0->DBCTL = (DBA_ALL << PWM_DBCTL_INMODE_Pos) | + (DB_ACTV_HIC << PWM_DBCTL_POLSEL_Pos) | + (DB_FULL_ENABLE << PWM_DBCTL_OUTMODE_Pos); - PWM0->ETSEL_bit.INTSEL = ET_DISABLE; // Disable INT (шимовское) - PWM0->ETSEL_bit.INTEN = 0; // Disable INT - - - //разрешаем TZ быть источником аппаратной аварии (one-shot) - // PWM0->TZSEL_bit.OSHT1 = TZ_ENABLE; -// PWM0->TZSEL_bit.OSHT2 = TZ_ENABLE; -// PWM0->TZSEL_bit.OSHT3 = TZ_ENABLE; - - // Trip-Zone - PWM0->TZCTL_bit.TZA = TZ_STATE; // по событию "One-Shot Trip" переводим - PWM0->TZCTL_bit.TZB = TZ_STATE; // ШИМ выходы в нужное состояние - - //Для VectorCARD от ШИМа запускается ADC - //PWM0->ETSEL_bit.SOCAEN = 1; // Разрешить запуск ацп - //PWM0->ETSEL_bit.SOCASEL = 1; // Запускать при CTR == 0 (Underflow) + // Настройка Trip-Zone + //PWM0->TZCTL_bit.TZA = TZ_STATE; // по событию "One-Shot Trip" переводим + //PWM0->TZCTL_bit.TZB = TZ_STATE; // ШИМ выходы в нужное состояние (третье) + PWM0->TZCTL = (TZ_STATE << PWM_TZCTL_TZA_Pos) | + (TZ_STATE << PWM_TZCTL_TZB_Pos); // ------------------------------------------------------------------------ // Настраиваем модуль ePWM1 // ------------------------------------------------------------------------ // Setup TBCLK - PWM1->TBPRD = PWM0->TBPRD; //период такой же - PWM1->TBPHS_bit.TBPHS = 0x0001; // Фаза равна 1 из-за задержки в один такт на синхронизацию - PWM1->TBCTR = 0x0000; // Clear counter + PWM1->TBPRD = PWM0->TBPRD; //период такой же + PWM1->TBPHS_bit.TBPHS = 0x0001; // Фаза равна 1 из-за задержки в один такт на синхронизацию + PWM1->TBCTR = 0x0000; // Clear counter - // Setup counter mode - PWM1->TBCTL_bit.PRDLD = TB_SHADOW; // загрузка TBPRD при TBCTR = 0 - PWM1->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN; // Count up-down - PWM1->TBCTL_bit.PHSEN = TB_ENABLE; // Enable phase loading - PWM1->TBCTL_bit.PHSDIR = TB_UP; // Считать вверх после загрузки фазы - PWM1->TBCTL_bit.HSPCLKDIV = 0; // High Speed Time-base Clock Prescale - PWM1->TBCTL_bit.CLKDIV = 0; // Time-base Clock Prescale - PWM1->TBCTL_bit.SYNCOSEL = TB_SYNC_IN; // пропускаем синхро-сигнал "насквозь" + // Настройка счётчика + //PWM1->TBCTL_bit.PRDLD = TB_SHADOW; // Загрузка TBPRD при TBCTR = 0 + //PWM1->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN; // Счёт вверх-вниз + //PWM1->TBCTL_bit.PHSEN = TB_ENABLE; // Разрешить синхронизацию + //PWM1->TBCTL_bit.PHSDIR = TB_UP; // Считать вверх после загрузки фазы + //PWM1->TBCTL_bit.HSPCLKDIV = 0; // Первый делитель частоты (нет деления) + //PWM1->TBCTL_bit.CLKDIV = 0; // Второй делитель частоты (нет деления) + //PWM1->TBCTL_bit.SYNCOSEL = TB_SYNC_IN; // Пропускаем синхро-сигнал "насквозь" + //PWM1->TBCTL_bit.FREESOFT = 2; // Продолжать счёт при дебажном останове процессора + //PWM1->TBCTL_bit.SHADOWGLOB = 1; // Разрешить нормальную работу теневых регистров + PWM1->TBCTL = (TB_SHADOW << PWM_TBCTL_PRDLD_Pos) | + (TB_COUNT_UPDOWN << PWM_TBCTL_CTRMODE_Pos) | + (TB_ENABLE << PWM_TBCTL_PHSEN_Pos) | + (TB_UP << PWM_TBCTL_PHSDIR_Pos) | + (0 << PWM_TBCTL_HSPCLKDIV_Pos) | + (0 << PWM_TBCTL_CLKDIV_Pos) | + (TB_SYNC_IN << PWM_TBCTL_SYNCOSEL_Pos) | + (2 << PWM_TBCTL_FREESOFT_Pos) | + (1 << PWM_TBCTL_SHDWGLOB_Pos); - // Setup shadowing - PWM1->CMPCTL_bit.SHDWAMODE = CC_SHADOW; //включить SHADOW для сравнения - PWM1->CMPCTL_bit.LOADAMODE = CC_CTR_ZERO; // Load on period and zero - - PWM1->CMPCTL_bit.SHDWBMODE = CC_SHADOW; //включить SHADOW для сравнения - PWM1->CMPCTL_bit.LOADBMODE = CC_CTR_ZERO; // Load on period and zero - - // Set Compare values - PWM1->CMPA_bit.CMPA = 0; // Set compare A value - - // Set actions - PWM1->AQCTLA = AQ_EPWM_DISABLE; // для начала события запрещены - PWM1->AQCTLA_bit.ZRO = 1; //обнуляем при нуле счетчика - PWM1->AQCTLA_bit.CAU = 2; //включаем при сравнении и инкрементиовании - PWM1->AQCTLA_bit.CAD = 1; //обнуляем при сравнении и декрементровании - - //Для PWMB тоже самое, что для PWMА. Без инверсии. Инверсия далее в модуле МВ - PWM1->AQCTLB = PWM0->AQCTLA; // для начала события для PWM1B запрещены - PWM1->AQCTLB_bit.ZRO = PWM0->AQCTLA_bit.ZRO; //обнуляем при нуле счетчика - PWM1->AQCTLB_bit.CAU = PWM0->AQCTLA_bit.CAU; //включаем при сравнении и инкрементиовании - PWM1->AQCTLB_bit.CAD = PWM0->AQCTLA_bit.CAD; //обнуляем при сравнении и декрементровании - - PWM1->AQSFRC_bit.RLDCSF = 0; //по ТО надо писать 0 - - // Active high complementary PWMs - Setup Deadband + // Теневые регистры, изменения выходных сигналов, мёртвое время + // TZ и прерывания настраиваются так же, как у PWM0 + PWM1->CMPCTL = PWM0->CMPCTL; + PWM1->AQCTLA = PWM0->AQCTLA; PWM1->DBRED = PWM0->DBRED; - PWM1->DBFED = PWM1->DBRED; - PWM1->DBCTL_bit.INMODE = PWM0->DBCTL_bit.INMODE; - PWM1->DBCTL_bit.OUTMODE = PWM0->DBCTL_bit.OUTMODE; - PWM1->DBCTL_bit.POLSEL = PWM0->DBCTL_bit.POLSEL; + PWM1->DBFED = PWM0->DBFED; + PWM1->DBCTL = PWM0->DBCTL; + PWM1->TZCTL = PWM0->TZCTL; + PWM1->ETSEL = PWM0->ETSEL; - // Interrupt where we will change the Compare Values - PWM1->ETSEL_bit.INTSEL = ET_DISABLE; // Disable INT - PWM1->ETSEL_bit.INTEN = 0; // Disable INT - - // Trip-Zone - PWM1->TZCTL_bit.TZA = TZ_STATE; // по событию "One-Shot Trip" переводим - PWM1->TZCTL_bit.TZB = TZ_STATE; // ШИМ выходы в нужное состояние + // Обнуление уставок + PWM1->CMPA_bit.CMPA = 0; + PWM1->AQSFRC_bit.RLDCSF = 0; // ------------------------------------------------------------------------ // Настраиваем модуль ePWM2 @@ -177,53 +167,31 @@ void PWM_Module_Init(TPWM_Module *p) { PWM2->TBPHS_bit.TBPHS = 0x0001; // Фаза равна 1 из-за задержки в один такт на синхронизацию PWM2->TBCTR = 0x0000; // Clear counter - // Setup counter mode - PWM2->TBCTL_bit.PRDLD = TB_SHADOW; // загрузка TBPRD при TBCTR = 0 - PWM2->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN; // Count up-down - PWM2->TBCTL_bit.PHSEN = TB_ENABLE; // Enable phase loading - PWM2->TBCTL_bit.PHSDIR = TB_UP; // Считать вверх после загрузки фазы - PWM2->TBCTL_bit.HSPCLKDIV = 0; // High Speed Time-base Clock Prescale - PWM2->TBCTL_bit.CLKDIV = 0; // Time-base Clock Prescale - PWM2->TBCTL_bit.SYNCOSEL = TB_SYNC_IN; // разрешаем выдачу синхро-сигнала + // Настройка счётчика такая же, как у PWM1 + //PWM2->TBCTL_bit.PRDLD = TB_SHADOW; // загрузка TBPRD при TBCTR = 0 + //PWM2->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN; // Count up-down + //PWM2->TBCTL_bit.PHSEN = TB_ENABLE; // Enable phase loading + //PWM2->TBCTL_bit.PHSDIR = TB_UP; // Считать вверх после загрузки фазы + //PWM2->TBCTL_bit.HSPCLKDIV = 0; // High Speed Time-base Clock Prescale + //PWM2->TBCTL_bit.CLKDIV = 0; // Time-base Clock Prescale + //PWM2->TBCTL_bit.SYNCOSEL = TB_SYNC_IN; // разрешаем выдачу синхро-сигнала + //PWM2->TBCTL_bit.FREESOFT = 2; // Продолжать счёт при дебажном останове процессора + //PWM2->TBCTL_bit.SHADOWGLOB = 1; // Разрешить нормальную работу теневых регистров + PWM2->TBCTL = PWM1->TBCTL; - // Setup shadowing - PWM2->CMPCTL_bit.SHDWAMODE = CC_SHADOW; //включить SHADOW для сравнения - PWM2->CMPCTL_bit.LOADAMODE = CC_CTR_ZERO; // Load on period and zero - - PWM2->CMPCTL_bit.SHDWBMODE = CC_SHADOW; //включить SHADOW для сравнения - PWM2->CMPCTL_bit.LOADBMODE = CC_CTR_ZERO; // Load on period and zero - - // Set Compare values - PWM2->CMPA_bit.CMPA = 0; // Set compare A value - - // Set actions - PWM2->AQCTLA = AQ_EPWM_DISABLE; // для начала события запрещены - PWM2->AQCTLA_bit.ZRO = 1; //обнуляем при нуле счетчика - PWM2->AQCTLA_bit.CAU = 2; //включаем при сравнении и инкрементиовании - PWM2->AQCTLA_bit.CAD = 1; //обнуляем при сравнении и декрементровании - - //Для PWMB тоже самое, что для PWMА. Без инверсии. Инверсия далее в модуле МВ - PWM2->AQCTLB = PWM0->AQCTLA; // для начала события для PWM1B запрещены - PWM2->AQCTLB_bit.ZRO = PWM0->AQCTLA_bit.ZRO; //обнуляем при нуле счетчика - PWM2->AQCTLB_bit.CAU = PWM0->AQCTLA_bit.CAU; //включаем при сравнении и инкрементиовании - PWM2->AQCTLB_bit.CAD = PWM0->AQCTLA_bit.CAD; //обнуляем при сравнении и декрементровании - - PWM2->AQSFRC_bit.RLDCSF = 0; //по ТО надо писать 0 - - // Active high complementary PWMs - Setup Deadband + // Теневые регистры, изменения выходных сигналов, мёртвое время + // TZ и прерывания настраиваются так же, как у PWM0 и PWM1 + PWM2->CMPCTL = PWM0->CMPCTL; + PWM2->AQCTLA = PWM0->AQCTLA; PWM2->DBRED = PWM0->DBRED; - PWM2->DBFED = PWM2->DBRED; - PWM2->DBCTL_bit.INMODE = PWM0->DBCTL_bit.INMODE; - PWM2->DBCTL_bit.OUTMODE = PWM0->DBCTL_bit.OUTMODE; - PWM2->DBCTL_bit.POLSEL = PWM0->DBCTL_bit.POLSEL; + PWM2->DBFED = PWM0->DBFED; + PWM2->DBCTL = PWM0->DBCTL; + PWM2->TZCTL = PWM0->TZCTL; + PWM2->ETSEL = PWM0->ETSEL; - // Interrupt where we will change the Compare Values - PWM2->ETSEL_bit.INTSEL = ET_DISABLE; // Disable INT - PWM2->ETSEL_bit.INTEN = 0; // Disable INT - - // Trip-Zone - PWM2->TZCTL_bit.TZA = TZ_STATE; // по событию "One-Shot Trip" переводим - PWM2->TZCTL_bit.TZB = TZ_STATE; // ШИМ выходы в нужное состояние + // Обнуление уставок + PWM2->CMPA_bit.CMPA = 0; + PWM2->AQSFRC_bit.RLDCSF = 0; // Отключаем ключи @@ -231,12 +199,8 @@ void PWM_Module_Init(TPWM_Module *p) { PWM1->TZFRC_bit.OST = 1; PWM2->TZFRC_bit.OST = 1; - - - //PWM0->TBCTL_bit.FREESOFT = 0; //ШИМ 6 выводов GPIOA->ALTFUNCSET = (1 << 8) + (1 << 9) + (1 << 10) + (1 << 11) + (1 << 12) + (1 << 13); - GPIOA->DENSET = (1 << 8) + (1 << 9) + (1 << 10) + (1 << 11) + (1 << 12) + (1 << 13); //Синхронный запуск ШИМ SIU->PWMSYNC_bit.PRESCRST= 0b111; @@ -480,7 +444,8 @@ void PWM_Module_Sin_Update(TPWM_Module *p) { //! \memberof TPWM_Module void PWM_Module_Separate_Update(TPWM_Module *p) { - _iq PhasePtsA; + // Закомментировано для экономии места +/* _iq PhasePtsA; _iq PhasePtsB; _iq PhasePtsC; _iq knorm; @@ -497,7 +462,7 @@ void PWM_Module_Separate_Update(TPWM_Module *p) { p->GammaB = _IQmpy(p->k_pwm, PhasePtsB); p->GammaC = _IQmpy(p->k_pwm, PhasePtsC); - /*насыщения */ + //насыщения if (p->GammaA < 0) p->GammaA = 0; @@ -506,7 +471,7 @@ void PWM_Module_Separate_Update(TPWM_Module *p) { if (p->GammaC < 0) p->GammaC = 0; - if (p->GammaA > p->k_pwm) + if (p->GammaA > p->k_pwm) p->GammaA = p->k_pwm + 1; if (p->GammaB > p->k_pwm) p->GammaB = p->k_pwm + 1; @@ -516,7 +481,7 @@ void PWM_Module_Separate_Update(TPWM_Module *p) { PWM0->CMPA_bit.CMPA = (Uint16) p->GammaB; PWM1->CMPA_bit.CMPA = (Uint16) p->GammaC; PWM2->CMPA_bit.CMPA = (Uint16) p->GammaA; - +*/ } //! Функция ШИМ для начальной зарядки будстрепных конденсаторов инвертора @@ -555,8 +520,10 @@ void PWM_Module_Update(TPWM_Module *p) { PWM_Module_Sin_Update(p); break; } - case PWM_TYPE_SRD: { - PWM_Module_Separate_Update(p); + default: { + // Защита от неправильных типов ШИМ + p->PWM_type = PWM_TYPE_6SECT_NO_SV; + PWM_Module_No_SV_Update(p); break; } } @@ -610,15 +577,6 @@ void PWM_Module_SlowCalc(TPWM_Module *p) { PWM2->TBPRD = p->k_pwm; - //посчитаем длину выборки для усреднения токов, исходя из частоты ШИМ - adc.IASampleLength = (p->Frequency >> 10) / 10; //Частота ШИМ в формате 22.10, приводим к инту и делим на 10 - частоту расчета системы управления - if (adc.IASampleLength > 4) //не более 4 точек - adc.IASampleLength = 4; - if (adc.IASampleLength < 1) //не менее 1 точки - adc.IASampleLength = 1; - adc.IBSampleLength = adc.IASampleLength; - adc.ICSampleLength = adc.IASampleLength; - adc.UdcSampleLength = adc.IASampleLength; p->FreqPrev = p->Frequency; //предыдущая частота EINT; diff --git a/Vsrc/V_QEP.c b/Vsrc/V_QEP.c index 2a8e7d6..d7e193b 100644 --- a/Vsrc/V_QEP.c +++ b/Vsrc/V_QEP.c @@ -80,10 +80,11 @@ void TposspeedEqep_init(TposspeedEqep *p) { p->resol_inv = 1.0 / ((float) p->resol); + p->Index_eventCounter = 0; + //Инициализация портов ввода вывода GPIOB->ALTFUNCSET = (1 << 11) + (1 << 12) + (1 << 13); SIU->REMAPAF_bit.QEPEN = 1; - GPIOB->DENSET = (1 << 11) + (1 << 12) + (1 << 13);//для приема ножки апп. аварии разрешаем работу ножки как цифры } //! Функция расчёта скорости и положения, вызывается с необходимой дискретностью @@ -305,6 +306,7 @@ void TposspeedEqep_Calc(TposspeedEqep *p) { //! \memberof TposspeedEqep void TposspeedEqep_IndexEvent(TposspeedEqep *p) { p->Posspeed_FLG2.bit.pos_ident = 1; + p->Index_eventCounter++; } //! \memberof TposspeedEqep diff --git a/Vsrc/V_RTC_Clock.c b/Vsrc/V_RTC_Clock.c deleted file mode 100644 index 5189ce9..0000000 --- a/Vsrc/V_RTC_Clock.c +++ /dev/null @@ -1,206 +0,0 @@ -/*! - Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - \file V_RTC_Clock.c - \brief Модуль для работы с часами реального времени - \author ООО "НПФ Вектор". http://motorcontrol.ru - \version v 2.0 25/03/2016 - - */ - -/* - - * - * Часы DS1340 работают в режиме слэйва и имеют 10 регимтров данных/контроля (0x0 ... 0x9). - * Время и дата лежат в регистрах 0x0 ... 0x6. - * Регистр контроля часов, регистр заряда акк., и регистр флагов лежат в 0x7 ... 0x9. - * Указатель на текущий регистр можно поменять, отправив в часы соответствующий номер . - * Чтобы прочитать что-то из часов, сначала нужно обратиться к часам в режиме записи и передать номер - * регистра, с которого нужно считать данные. После этого снова нужно обратиться к часам, но уже - * в режиме чтения. Тогда часы начнут слать содержимое всех регистров по очереди, начиная с того - * регистра, адрес которого был передан в предыдущем обращении. При такой "потоковой" передаче - * указатель на текущий регистр будет автоинкрементироваться, причем в такой последовательности - * (предположим, был установлен адрес 0x5) - * 0x5 -> 0x6 -> 0x7 -> 0x0 -> 0x1 -> ... -> 0x7 -> 0x0 - * Чтобы попасть в последние два регистра, нужно передать их адреса явно. - * - * Для того, чтобы записать в часики время, нужно проделать примерно то же самое. - * В режиме записи отправляется сначала номер регистра, в который нужно записать что-то, а затем - * данные, которые нужно туда положить. Указатель на регистры при потоковой передаче инкрементируется - * так же, как и при чтении. - * - * Данные хранятся в двоично-десятичном формате. - */ - -//Закомменченные функции вверху отличаются от нижних регистрами (NT_RTC и RTC_REG). Нужны ли закомменченные - не знаю. -#include -#include -// Включатель постоянного считывания времени с ЧРВ. Если дефайн закоменчен - считывание производится только при запуске, а потом -// время считается программно. Если раскомменчен - каждую секунду время считается с часов (секунда отсчитывается в мс) -//#define USE_RTC - -/* Инициализация RTC */ -void RTC_Clock_Init(TRTCClock *p) { - -} - -/* Функция считывания текущего времени */ -void RTC_Clock_Read_Time(TRTCClock *p) { -// Uint16 tempSec, tempMin, tempHour, tempDOW, tempDay, tempMonth, tempYear; -// -// /* Остановить обновление теневых регисторв */ -// NT_RTC->SHDW = 0x0; -// -// /* Прочитать время */ -// tempSec = NT_RTC->SECOND; -// tempMin = NT_RTC->MINUTE; -// tempHour = NT_RTC->HOUR; -// tempDOW = NT_RTC->WDAY; -// tempDay = NT_RTC->DAY; -// tempMonth = NT_RTC->MONTH; -// tempYear = NT_RTC->YEAR; -// -// /* Запустить обновление теневых регисторв */ -//// NT_RTC->SHDW = 0x80; -// -// // Затем нужно отформатировать пришедшие данные, т.к. они приходят в виде двоично-десятичных чисел (отстой) -// p->second = (tempSec & 0xF) + (((tempSec & 0x70) >> 4) * 10); -// p->minute = (tempMin & 0xF) + (((tempMin & 0x70) >> 4) * 10); -// p->hour = (tempHour & 0xF) + (((tempHour & 0x30) >> 4) * 10); -// p->DOW = (tempDOW & 0x7); -// p->day = (tempDay & 0xF) + (((tempDay & 0x30) >> 4) * 10); -// p->month = (tempMonth & 0xF) + (((tempMonth & 0x10) >> 4) * 10); -// p->year = (tempYear & 0xF) + (((tempYear & 0xF0) >> 4) * 10); -// -// // Наконец, упаковка основных показателей в структурку -// p->packed_time = ((Uint32) p->day << 27) + ((Uint32) p->month << 23) -// + ((Uint32) p->year << 17) + ((Uint32) p->hour << 12) -// + ((Uint32) p->minute << 6) + (Uint32) p->second; - -} - -/* Функция установки времени */ -void RTC_Clock_Set_Time(TRTCClock *p) { -// // Временные переменные (секунды, минуты, часы...) -// unsigned char tempSec, tempMin, tempHour, tempDOW, tempDay, tempMonth, -// tempYear; -// p->tryCounter = 0; -// -// // Сначала нужно распаковать дату -// p->second = p->timeToSet & 0x3F; -// p->minute = (p->timeToSet >> 6) & 0x3F; -// p->hour = (p->timeToSet >> 12) & 0x1F; -// p->year = (p->timeToSet >> 17) & 0x3F; -// p->month = (p->timeToSet >> 23) & 0xF; -// p->day = (p->timeToSet >> 27) & 0x1F; -// -// tempSec = ((p->second / 10) << 4) + ((p->second % 10) & 0xF); -// tempMin = ((p->minute / 10) << 4) + ((p->minute % 10) & 0xF); -// tempHour = ((p->hour / 10) << 4) + ((p->hour % 10) & 0xF); -// tempDOW = p->DOW & 0x3; -// tempDay = ((p->day / 10) << 4) + ((p->day % 10) & 0xF); -// tempMonth = ((p->month / 10) << 4) + ((p->month % 10) & 0xF); -// tempYear = ((p->year / 10) << 4) + ((p->year % 10) & 0xF); -// -// p->msInDay = (Uint32) p->hour * 3600000 + (Uint32) p->minute * 60000 -// + (Uint32) p->second * 1000; -// -// // Расчёт дня недели (пижонство) -// int16 a = (14 - p->month) / 12; -// int16 y = p->year - a; -// int16 m = p->month + 12 * a - 2; -// p->DOW = (7000 + (p->day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) -// % 7; -// -// NT_RTC->YEAR = tempYear; -// NT_RTC->MONTH = tempMonth; -// NT_RTC->DAY = tempDay; -// NT_RTC->WDAY = tempDOW; -// NT_RTC->HOUR = tempHour; -// NT_RTC->MINUTE = tempMin; -// NT_RTC->SECOND = tempSec; -} - -void RTC_Clock_Ms_Calc(TRTCClock *p) { - p->ms++; - p->msInDay++; -#ifdef USE_RTC - if (p->ms > 999) { - p->ms = 0; - p->readTimeFlag = 1; - } - - //проверка работы часов реального времени и установка, в зависимсоти от этого, указателя для банка аварий - if (p->secondPrev == p->second) //секунда не меняется - p->stoppedCounter++; //считаем, как долго - else //сменилась, значит часы работают - p->stoppedCounter = 0; - - if ((p->stoppedCounter < RTC_SECOND_WAITING_TIMEOUT) && (p->year<48)) //часы работают - тикают и год не 2048 (как когда нет батарейки) - p->ClockOk=1; - - else - { - p->ClockOk=0; - p->stoppedCounter = RTC_SECOND_WAITING_TIMEOUT; - } - p->secondPrev = p->second; - - - - - -#else - - if (p->ms == 1000) { - p->ms = 0; - p->second++; - - if (p->second == 60) { - p->second = 0; - p->minute++; - if (p->minute == 60) { - p->minute = 0; - p->hour++; - if (p->hour == 24) { - p->hour = 0; - p->msInDay = 0; - p->day++; - } - } - } - p->packed_time = ((Uint32)p->day << 27) + ((Uint32)p->month << 23) + ((Uint32)p->year << 17) + - ((Uint32)p->hour << 12) + ((Uint32)p->minute << 6) + (Uint32)p->second; - } - -#endif - -} - -void RTC_Clock_Slow_Calc(TRTCClock *p) { - if (p->setTimeFlag == 1) { - p->timeToSet = p->packed_time; - p->set(p); - p->read(p); - p->msInDay = (Uint32) p->hour * 3600000 + (Uint32) p->minute * 60000 - + (Uint32) p->second * 1000; - p->setTimeFlag = 0; - } else if (p->readTimeFlag == 1) { - p->read(p); - p->readTimeFlag = 0; - } -} - - diff --git a/Vsrc/V_SSI_Encoder.c b/Vsrc/V_SSI_Encoder.c index e6f239c..01cbb8a 100644 --- a/Vsrc/V_SSI_Encoder.c +++ b/Vsrc/V_SSI_Encoder.c @@ -32,71 +32,59 @@ //! \memberof TSSI_Encoder void SSI_Encoder_init(TSSI_Encoder *p) { -// volatile long delay; -// volatile Uint32 tempREG; -// -// //SPI-SOMI - на VectorCard нога 88, на проце B15, SPI_RXD2 -// //SPI-SIMO - на VectorCard нога 38, на проце C6, SPI_TXD2 -// //SPI-CLK - на VectorCard нога 39, на проце B14, SPI_CLK2 -// //SPI-STE - на VectorCard нога 89, на проце B13, SPI_FSS2 -// //Плата texas DRV8301-HC-EVM разведена так, что микроконтроллер - это ведомое устройство. -// //Нужно сделать его мастером. Подробнее читайте комментарий в заголовочном файле. -// -// // Настройка ног SPI -// GPIOB->ALTFUNCSET = (1 << 13);//чип-селект -// GPIOB->ALTFUNCSET = (1 << 14) | (1 << 15); -// NT_GPIOC->ALTFUNCSET = (1 << 6);//SIMO -// NT_COMMON_REG->GPIOPCTLB_bit.PIN13 = 2;//чип-селект -// NT_COMMON_REG->GPIOPCTLB_bit.PIN14 = 2; -// NT_COMMON_REG->GPIOPCTLB_bit.PIN15 = 2; -// NT_COMMON_REG->GPIOPCTLC_bit.PIN6 = 2;//SIMO -// -// -// // Настройка тактирования SSP модуля -// // Всего 4 модуля, на каждый модуль по 8 бит из регистра SSP_CLK_CTRL и по два бита из UART_SSP_CLK_SEL -// -// // UART_SSP_CLK_SEL -// // Во втором байте слова на каждый из 4-ёх модулей SSP отводится по два бита для выбора источника тактирования 0x0000XX00 -// // "00" - в качестве иточника тактирования модуля SSP выбирается системная частота 100 МГц, таким образом f_SSP_IN = SysClk = 100 MHz -// -// // SSP_CLK_CTRL -// // Младший бит разрешает тактирование (1 - разрешить) -// // Второй бит разрешает деление частоты f_SSP_IN источника тактового сигнала (0 - не делить, 1 - делить) -// // Старшие шесть выбирают делитель частоты этого исотчника: -// // X - деление по формуле SSPclk = f_SSP_IN /( 2 * (X +1) ) -// // Из документации на блок SSP - минимальная частота для работы модуля в режимах и мастер и слейв, -// // f_SSP_IN > 22.12 MHz, поэтому 25 МГц сделаем -// /* закомменчены, так как тоже самое делается в DRV8301_SPI -// tempREG = NT_COMMON_REG->UART_SPI_CLK_SEL;// Через tempREG, чтобы не задеть другие биты, отвечающие за тактирование UART'a -// tempREG &= 0xFFFF00FF; -// NT_COMMON_REG->UART_SPI_CLK_SEL = tempREG; -// NT_COMMON_REG->SPI_CLK = 0x07070707;// Разрешить тактирование, разрешить деление частоты, делить на 4 - 25 МГц -// */ -// -// -// // Настройка самого модуля SPI -// // Продолжение настройки тактирования. -// // Полученная ранее частота f_SSP_IN проходит ещё через два делителя. -// // SSPCPSR - первый делитель, в диапазоне 2 ... 254, может быть только чётным (младший бит всегда хардварно равен 0) -// // SSPCR0.bit.SCR - второй делитель от 0 до 255. -// // Битрейт в итоге BitRate = f_SSP_IN / ( SSPCPSR * (SCR + 1) ) -// -// SPI2->SPI_CR1 = 0;// Режим - мастер, LoopBack отключён, сам модуль SSP тоже отключён -// SPI2->SPI_IMSC = 0x0; // Запретить все прерывания -// SPI2->SPI_DMACR = 0; // Запретить DMA -// SPI2->SPI_ICR = 0x3; // Очистка прерываний ("переполнение FIFO приёма" и "необслуженное FIFO приёма") -// -// SPI2->SPI_CPSR = 4; // Деление входной частоты на 4 -> 6,25 MHz -// SPI2->SPI_CR0_bit.DSS = 12; // Размер данных - 12 бит -// SPI2->SPI_CR0_bit.SCR = 0x3F; // Второй делитель -// SPI2->SPI_CR0_bit.FRF = 0x0; // Какая-то "фаза" для протокола Motorola SPI -// SPI2->SPI_CR0_bit.SPH = 0x1; // Какая-то "полярность" для протокола Motorola SPI -// SPI2->SPI_CR0_bit.SPO = 0x0; // Выбор формата кадра Motorola/TI/Microwire. "0" - по протоколу Motorola SPI -// SPI2->SPI_CR1_bit.SSE = 1; // Разрешить работу -// -// p->resol_inv = 1.0 / ((float) p->resol); -// -// p->read(p); + volatile long delay; + volatile Uint32 tempREG; + + // Настройка ножек под SPI + GPIOB->ALTFUNCSET = (1 << 5) | (1 << 6); // Тактирование (SPI_SCK) + + // Настройка модуля SPI + // Тактирование модуля SPI в файле "src/system_K1921VK035.c" настроено на fIN = 25 МГц + // Эта частота проходит ещё через два делителя. + // SSPCPSR - первый делитель, в диапазоне 2 ... 254, может быть только чётным (младший бит всегда аппаратно равен 0) + // SSPCR0.bit.SCR - второй делитель от 0 до 255. + // Битрейт в итоге BitRate = fIN / ( CPSR * (SCR + 1) ) + + SPI->IMSC = 0x0; // Запретить все прерывания + SPI->DMACR = 0; // Запретить DMA + SPI->ICR = 0x3; // Сброс прерываний на всякий случай ("переполнение FIFO приёма" и "необслуженное FIFO приёма") + + SPI->CPSR = 4; // Деление входной частоты на 4 + + + + // В CR0 настраивается второй делитель частоты, разрешение и режим работы энкодера. + // + // Второй делитель = 62, итого f_ssp = 25 МГц / (4 * (62 + 1)) = 99,2 кГц + // + // Настройка фазы и полярности для работы в режиме SPI + // По описанию на датчик дела такие: по первому падающему фронту он загружает в свой + // внутренний регистр новые данные, а с каждым растущим фронтов выводит их на линию. + // Стало быть данные на линии меняются на растущем фронте, а значит считывать их надо + // на падающем. Но при этом по самому первому фронту ничего вычитывать не надо, а значит + // старший бит принятых данных надо обнулять. + // Кроме того на ОИ клок инвертируется, и это надо учитывать в настройке. + // + // Размер кадра на 1 больше, чем число в регитсре, стало быть (12 + 1) = 13 бит, из которых первый выкинем + // + // В целях экономии места, запись одной строкой + //SPI->CR0_bit.FRF = 0x0; // SSI работает в режиме SPI, что позволяет задать, по какому фронту читать данные + //SPI->CR0_bit.SPO = 0x0; // В режиме ожидания CLK в нуле (после инверсии получится в единице) + //SPI->CR0_bit.SPH = 0x0; // Выборка данных по растущему фронту синхросигнала (после инверсии получится по падающему) + //SPI->CR0_bit.SCR = 62; // Второй делитель = 62 + 1 = 63 + //SPI->CR0_bit.DSS = SSI_ENC_RESOLUTION; // Размер кадра 12 + 1 = 13 бит + SPI->CR0 = (SSI_ENC_RESOLUTION << SPI_CR0_DSS_Pos) | (62 << SPI_CR0_SCR_Pos); + + // В этих комментариях расписано по каждому полю, что как присваивается, но + // для экономии на инструкциях записывается одним действием + //SPI->CR1_bit.MS = 0; // Режим - мастер + //SPI->CR1_bit.RXIFLSEL = 0; // Глубина FIFO на приём = 0 (FIFO не используется) + //SPI->CR1_bit.TXIFLSEL = 0; // Глубина FIFO на отправку = 0 (FIFO не используется) + //SPI->CR1_bit.SSE = 1; // Разрешить работу SPI + SPI->CR1 = (1 << SPI_CR1_SSE_Pos); + p->resol_inv = 1.0 / ((float) p->resol); + + p->read(p); } @@ -110,51 +98,51 @@ void SSI_Encoder_Calc(TSSI_Encoder *p) { void SSI_Encoder_Read(TSSI_Encoder*p) { -// _iq theta_elec_temp; -// Uint16 Data_read=0; -// _iq theta_mech_temp; -// -// if (SPI2->SPI_SR_bit.BSY == 0){//SPI свободен -// Data_read = SPI2->SPI_DR;//код с датчика (число от 0 до resol) -// SPI2->SPI_DR = 0xff;//отправляем что угодно, главное, чтобы тактирование шло -// -// -// if (p->rotation_dir)//обратное направление вращения -// Data_read=(p->resol-1)-Data_read;//период - текущее -// p->Poscnt_res=Data_read; -// } -// -// //перевод угла в метках на обороте в механический угол -// //Здесь расчет во float - желательно переделать в IQ -// p->theta_mech = _IQ((float )p->Poscnt_res * p->resol_inv); //расчёт механического угла -// p->theta_mech &= 0x00FFFFFF; -// //Фильтр угла -// if (p->theta_mech_filterK!=0){ -// p->theta_mech_filtered=p->theta_mech_filtered+_IQmpy(p->theta_mech_filterK,((p->theta_mech-p->theta_mech_filtered+_IQ(0.5))&0x00FFFFFF)-_IQ(0.5)); -// p->theta_mech_filtered&=0x00FFFFFF; -// }else -// p->theta_mech_filtered=p->theta_mech; -// -// // Подсчёт количества полных оборотов. -// if (p->prevThetaMech - p->theta_mech_filtered > _IQ(0.5)) -// p->RevolutionCounter++; -// if (p->prevThetaMech - p->theta_mech_filtered < _IQ(-0.5)) -// p->RevolutionCounter--; -// p->prevThetaMech=p->theta_mech_filtered; -// -// //угол в метках без обнуления на обороте, абсолютный -// p->Poscnt_resContinouosLong=p->Poscnt_res+(p->resol*p->RevolutionCounter); -// p->Poscnt_resContinouosInt=p->Poscnt_resContinouosLong;//чтобы было уднобно смотреть в 16ти разрядном осциллографе -// p->Poscnt_resContinouosInt8=p->Poscnt_resContinouosLong&0xF;//чтобы видеть метки в крупном масштабе -// -// //перевод угла в метках абсолютных (не обнуляемых наобороте) в механический угол -// //на 127 оборотах всё переполнится, но для демо сгодится -// p->theta_mechContinouos = p->theta_mech_filtered + _IQ(p->RevolutionCounter); //расчёт механического угла -// p->theta_elecContinouos = p->theta_mechContinouos*p->pole_pairs+ p->AngleOffset;//электрический угол абсолютный (не обнуляемый) -// -// //Расчёт электрического положения обнулемого по достижению 360 градусов -// p->theta_el_tmp = p->theta_mech_filtered*p->pole_pairs + p->AngleOffset; -// p->theta_elec = p->theta_el_tmp & 0x00FFFFFF; + _iq theta_elec_temp; + Uint16 Data_read=0; + _iq theta_mech_temp; + + if (SPI->SR_bit.BSY == 0){//SPI свободен + Data_read = SPI->DR & SSI_ENC_DATA_MASK;//код с датчика (число от 0 до resol) с обнулённым старшим разрядом + SPI->DR = 0xff;//отправляем что угодно, главное, чтобы тактирование шло + + + if (p->rotation_dir)//обратное направление вращения + Data_read=(p->resol-1)-Data_read;//период - текущее + p->Poscnt_res=Data_read; + } + + //перевод угла в метках на обороте в механический угол + //Здесь расчет во float - желательно переделать в IQ + p->theta_mech = _IQ((float )p->Poscnt_res * p->resol_inv); //расчёт механического угла + p->theta_mech &= 0x00FFFFFF; + //Фильтр угла + if (p->theta_mech_filterK!=0){ + p->theta_mech_filtered=p->theta_mech_filtered+_IQmpy(p->theta_mech_filterK,((p->theta_mech-p->theta_mech_filtered+_IQ(0.5))&0x00FFFFFF)-_IQ(0.5)); + p->theta_mech_filtered&=0x00FFFFFF; + }else + p->theta_mech_filtered=p->theta_mech; + + // Подсчёт количества полных оборотов. + if (p->prevThetaMech - p->theta_mech_filtered > _IQ(0.5)) + p->RevolutionCounter++; + if (p->prevThetaMech - p->theta_mech_filtered < _IQ(-0.5)) + p->RevolutionCounter--; + p->prevThetaMech=p->theta_mech_filtered; + + //угол в метках без обнуления на обороте, абсолютный + p->Poscnt_resContinouosLong=p->Poscnt_res+(p->resol*p->RevolutionCounter); + p->Poscnt_resContinouosInt=p->Poscnt_resContinouosLong;//чтобы было уднобно смотреть в 16ти разрядном осциллографе + p->Poscnt_resContinouosInt8=p->Poscnt_resContinouosLong&0xF;//чтобы видеть метки в крупном масштабе + + //перевод угла в метках абсолютных (не обнуляемых наобороте) в механический угол + //на 127 оборотах всё переполнится, но для демо сгодится + p->theta_mechContinouos = p->theta_mech_filtered + _IQ(p->RevolutionCounter); //расчёт механического угла + p->theta_elecContinouos = p->theta_mechContinouos*p->pole_pairs+ p->AngleOffset;//электрический угол абсолютный (не обнуляемый) + + //Расчёт электрического положения обнулемого по достижению 360 градусов + p->theta_el_tmp = p->theta_mech_filtered*p->pole_pairs + p->AngleOffset; + p->theta_elec = p->theta_el_tmp & 0x00FFFFFF; } diff --git a/Vsrc/V_UdControl.c b/Vsrc/V_UdControl.c new file mode 100644 index 0000000..85ac4b3 --- /dev/null +++ b/Vsrc/V_UdControl.c @@ -0,0 +1,129 @@ +/*! + Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + \file V_UdControl.c + \brief Модуль плавного заряда ЗПТ + \author ООО "НПФ Вектор". http://motorcontrol.ru + \version v 1.0 25/08/2017 + + \addtogroup + @{*/ + + +#include "main.h" + + +#if defined (HW_MOTORCONTROLBOARD) +#define UD_CONTROL_OFF GPIOB->DATAOUTCLR = (1 << 10); +#define UD_CONTROL_ON GPIOB->DATAOUTSET = (1 << 10); +#else +#define UD_CONTROL_OFF // операция для выключения +#define UD_CONTROL_ON // операция для включения +#endif + +//!Инициализация. +//!Конфигурируем ножку контроллера, управляющую цепью заряда на вывод. + +//! \memberof TUdControl +void UdControl_init(TUdControl *p) { + +#ifdef HW_MOTORCONTROLBOARD + p->Enabled = 1; //Включаем блок заряда ЗПТ + + // Ножка, управляющая цепью заряда + GPIOB->ALTFUNCCLR = (1 << 10); // Обычный GPIO + GPIOB->OUTENSET = (1 << 10); // Работащий на выход + + UD_CONTROL_OFF; //сначала выключим + p->state = UD_CONTROL_STATE_OFF; //и еще в состояние "выключено" + p->StateOn = 0; +#else + p->Enabled = 0; //Выключить блок заряда ЗПТ +#endif +} + +//!Расчет. + +//!Дискретный автомат, управляющий цепью заряда. Вызывать надо в каком-нибудь +//!быстром прерывании (например 10кГц). Может, будет работать и в 1кГц, но +//!не проверялось. Имеет три состояния: выключено, ожидание заряда и включено. +//!все переключения происходят на основе измеряемого напряжения на ЗПТ. + +//! \memberof TUdControl +void UdControl_calc(TUdControl *p) { + if (p->Enabled){//если есть цепь управления зарядом ЗПТ + p->fUdc.input = adc.Udc_meas; //на вход фильтра - напряжение с ЗПТ + p->fUdc.calc(&(p->fUdc)); + //считаем дискретный автомат + + if (p->state_prev != p->state) + p->E = 1; //первое вхождение + else + p->E = 0; + p->state_prev = p->state; + + + switch (p->state) { + case UD_CONTROL_STATE_OFF: //ключ выключен + { + UD_CONTROL_OFF; //выключаем ключ + p->StateOn = 0; //состояние выключено + if (adc.Udc_meas > p->U_on) //напряжение почти высоко + p->state = UD_CONTROL_STATE_WAIT; //переходим в ожидание + break; + } + + case UD_CONTROL_STATE_WAIT: //ключ выключен, готовимся включить + { + if (p->E == 1) //первое вхождение + { + p->StateCounter = 0; + } + p->StateCounter += global_time.relative_time1.delta_millisecond; + UD_CONTROL_OFF; //выключаем ключ + p->StateOn = 0; //состояние выключено + if (adc.Udc_meas < p->U_off) //хотели вроде включать, но напряжение снизилось... + p->state = UD_CONTROL_STATE_OFF; + + if (global_time.relative_time1.delta_millisecond) { //если стоит бит миллисекунды + //производная на миллисекунде + p->deriv_time_ZPT = (labs(p->fUdc.output - p->fUdc_output_prev))<<11; //поднимем значение производной для получения уровня около 1 + p->fUdc_output_prev = p->fUdc.output; + } + //таймаут включения и производная + if ((p->StateCounter >= p->Timeout_on) && (p->deriv_time_ZPT < p->deriv_const) && (adc.Udc_meas > p->U_off)) { //и производная меньше заданного уровня + p->state = UD_CONTROL_STATE_ON; + p->StateCounter = 0; + } + break; + } + + case UD_CONTROL_STATE_ON: { + if ((adc.Udc_meas < p->U_off) && (drv_status.bit.running == 0)) //работали-работали, а тут напряжение снизилось... Если вдруг напряжение снизилось во время работы, то размыкать не даем + p->state = UD_CONTROL_STATE_OFF; + UD_CONTROL_ON; //включем ключ + p->StateOn = 1; //состояние включено + break; + + } + + } + } + + +} + +/*@}*/ + diff --git a/Vsrc/V_adc.c b/Vsrc/V_adc.c index 97bb3a6..ca5a60c 100644 --- a/Vsrc/V_adc.c +++ b/Vsrc/V_adc.c @@ -103,19 +103,18 @@ void AdcDrv_fast_calc(TAdcDrv *p) { p->IA_temp = ADC->SEQ[0].SFIFO; p->IB_temp = ADC->SEQ[0].SFIFO; p->Udc_temp = ADC->SEQ[0].SFIFO; - p->T_temp = ADC->SEQ[0].SFIFO; + p->AI_temp = ADC->SEQ[0].SFIFO; // Очистка FIFO на случай, если почему-то там оказалось больше чем надо значений (бывает после остановки житагом) while (ADC->SEQ[0].SFLOAD) trash = ADC->SEQ[0].SFIFO; - p->Imeas_a = p->IaGainNom * (((p->IA_temp<< 4) + p->Imeas_a_offset)); - p->Imeas_b = p->IbGainNom * (((p->IB_temp<< 4) + p->Imeas_b_offset)); + p->Imeas_a = p->IaGainNom * ((p->IA_temp<< 4) + p->Imeas_a_offset); + p->Imeas_b = p->IbGainNom * ((p->IB_temp<< 4) + p->Imeas_b_offset); p->Udc_meas = p->UdcGainNom * (p->Udc_temp + p->Udc_meas_offset); p->Imeas_c = -p->Imeas_a - p->Imeas_b; - p->T_meas = p->T_temp * p->TGainNom; + p->AI_meas = p->AI_temp * p->AIGainNom; - //ADC->SEQ[0].SCCTL_bit.RAVGEN ^= 1; } //!Медленный расчет. @@ -172,9 +171,8 @@ void AdcDrv_slow_calc(TAdcDrv *p) { p->IaGainNom = _IQ16mpy(p->Imeas_a_gain, drv_params._1_I_nom) << 1; p->IbGainNom = _IQ16mpy(p->Imeas_b_gain, drv_params._1_I_nom) << 1; - p->IcGainNom = _IQ16mpy(p->Imeas_c_gain, drv_params._1_I_nom) << 1; p->UdcGainNom = _IQ16mpy(p->Udc_meas_gain, drv_params._1_Udc_nom) << 4; - p->TGainNom = _IQ16mpy(p->T_meas_gain,_IQ(0.05)) << 4; + p->AIGainNom = _IQ16mpy(p->AI_meas_gain, _IQ(1)) << 4; } //! Миллисекундный расчет diff --git a/Vsrc/V_i2cMem.c b/Vsrc/V_i2cMem.c index f108954..fca28ab 100644 --- a/Vsrc/V_i2cMem.c +++ b/Vsrc/V_i2cMem.c @@ -248,8 +248,7 @@ Uint16 i2c_readArray(Uint16 address, Uint16* readDataPtr_u16, Uint16 length_u8){ // Инит модуля I2C и GPIO, к которым подключена память void I2CMEM_Init(TI2cMem*p){ // Разрешаем работу 0 и 1 ножек порта А и переводим их в периферийный режим - GPIOA->DENSET |= 0x3; - GPIOA->ALTFUNCSET |= 0x3; + GPIOA->ALTFUNCSET = 0x3; // Разрешаем работу I2C модуля и ставим ему скорость // Fi2c = Fcpu / (4 * SCLFRQ), а Fcpu для 035 = 100 МГц diff --git a/Vsrc/V_led.c b/Vsrc/V_led.c deleted file mode 100644 index eaf49b3..0000000 --- a/Vsrc/V_led.c +++ /dev/null @@ -1,78 +0,0 @@ -/*! - Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - \file Vled.c - \brief Управление светодиодами - \author ООО "НПФ Вектор". http://motorcontrol.ru - \version v 2.0 25/03/2016 - - \addtogroup led - */ - -#include "DSP.h" -#include "main.h" - - -void LED_init(Tled *p) { - -} - -void LED_toggle(Tled *p, Uint16 led) { - -} - -void LED_on(Tled *p, Uint16 led) { - -} - -void LED_off(Tled *p, Uint16 led) { - -} - -void LED_clearAll(Tled *p) { - -} - -void LED_mode0(Tled *p) { - -} - -void LED_mode1(Tled *p) { - -} - -void LED_mode2(Tled *p) { - -} - -void LED_mode3(Tled *p) { - -} - -void LED_msCalc(Tled *p) { - -} - - - - - - - - - - - - diff --git a/Vsrc/V_pid_reg3_pos.c b/Vsrc/V_pid_reg3_pos.c deleted file mode 100644 index 64060e0..0000000 --- a/Vsrc/V_pid_reg3_pos.c +++ /dev/null @@ -1,109 +0,0 @@ -/*! - Copyright 2017 АО "НИИЭТ" и ООО "НПФ ВЕКТОР" - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - \file V_pid_reg3.c - \brief ПИД-регулятор (см. TPidReg3) - \author ООО "НПФ Вектор". http://motorcontrol.ru - \version v 2.0 25/03/2016 - - \addtogroup V_pid_reg3 - @{*/ - -#include "V_IQmath.h" // Include header for IQmath library -#include "V_pid_reg3_pos.h" -#include "stdlib.h" -#include "main.h" -//! Функция расчета ПИД регулятора -//! Вообще это чуть доработанная версия тексасовского регулятора -//! Документацию этой магии лучше всего посмотреть, загуглив pid_reg3.pdf - -//! На входе pid_ref_reg3 - задание, pid_fdb_reg3 - обратная связь -//! На выходе pid_out_reg3. - -//! \memberof TPidReg3 -void pid_reg3_calc_pos(TPidReg3_pos *v) { - v->e_reg3 = v->pid_ref_reg3 - v->pid_fdb_reg3;//ошибка - задание минус обратная связь - v->e_reg3Dz=v->e_reg3;//ошибка после коррекции блока мертвой зоны - - if (v->DeadZone!=0){//если есть уставка зоны нечувствительности - if (v->e_reg3Dz>0){//ошибка в плюс - v->e_reg3Dz=v->e_reg3Dz-v->DeadZone;//вычитаем мертвую зону - if (v->e_reg3Dz<0)//но так, чтобы ошибка не стала отрицательной - v->e_reg3Dz=0; - } - if (v->e_reg3Dz<0){ - v->e_reg3Dz=v->e_reg3Dz+v->DeadZone; - if (v->e_reg3Dz>0) - v->e_reg3Dz=0; - } - } - - v->up_reg3 = _IQmpy(v->Kp_reg3, v->e_reg3Dz); - - v->uprsat_reg3 = v->up_reg3 + v->ui_reg3 + v->ud_reg3; - - if (v->uprsat_reg3 > v->pid_out_max) - v->pid_out_reg3 = v->pid_out_max; - else if (v->uprsat_reg3 < v->pid_out_min) - v->pid_out_reg3 = v->pid_out_min; - else - v->pid_out_reg3 = v->uprsat_reg3; - - v->saterr_reg3 = v->pid_out_reg3 - v->uprsat_reg3 + v->saterr_reg3Add; - - //использовать ли фильтр для дифф. части. Если кфильтра ноль, то нет. - if (v->Kf_d == 0){ - v->e_reg3_filterOut = v->e_reg3;//выход фильтра - } - else{//иначе считаем фильтр - v->e_reg3_filterOut = posspeedEqep.speed_elec; - } - - if ((v->DiffCounter++ + 1) >= v->DiffDelim) {//каждые сколько вызовов считать дифф. часть - if (v->KdFilterInitFlag==1){//это первый такт расчета регулятора - v->e_reg3_filterOut = posspeedEqep.speed_elec;//выход фильтра ошибки инициализируем ошибкой - v->KdFilterInitFlag=0;//инициализация завершена - } - //v->ud_reg3 = _IQmpy(v->Kd_reg3, (v->e_reg3_filterOut - v->up1_reg3)<<6);//дифференциальная часть - v->ud_reg3 = _IQmpy(v->Kd_reg3,-posspeedEqep.speed_filter.output); - v->DiffCounter = 0; - } - - if (v->Ki_reg3 != 0)//есть интегральная составляющая - v->ui_reg3 = v->ui_reg3 - + _IQmpy(v->Ki_reg3, - v->up_reg3) + _IQmpy(v->Kc_reg3,v->saterr_reg3); - else - v->ui_reg3 = 0; - - if (v->Kc_reg3 == 0) { - if (v->ui_reg3 > v->pid_out_max) - v->ui_reg3 = v->pid_out_max; - else if (v->ui_reg3 < v->pid_out_min) - v->ui_reg3 = v->pid_out_min; - } - -} - - -//! \memberof TPidReg3 -void pid_reg3_reset_pos(TPidReg3_pos *v) { - v->pid_fdb_reg3=0; - v->pid_ref_reg3=0; - v->ui_reg3=0; - v->KdFilterInitFlag=1; -} - -/*@}*/ diff --git a/Vsrc/cood1.c b/Vsrc/cood1.c index 02caf91..0a2a350 100644 --- a/Vsrc/cood1.c +++ b/Vsrc/cood1.c @@ -1,7 +1,7 @@ // Файл: -// Профиль: D:\GIT\motorcontroldemo_035\cood.xml +// Профиль: W:\ProjectsGit\motorcontroldemo_035\cood.xml // Конфигурация: Базовый профиль -// Дата создания: 24.09.2019 11:31:33 +// Дата создания: 25.12.2020 9:40:25 // Пользователь: default // COODEdit Basic v.7.3.8 #include "DSP.h" @@ -9,655 +9,670 @@ #include "cood1.h" #include "co_ODvars.h" -// всего 119 индексов в словаре -// всего 741 элементов в словаре -Uint16 const co1_numOfInd = 119; +// всего 122 индексов в словаре +// всего 760 элементов в словаре +Uint16 const co1_numOfInd = 122; // Номер перечесления для групп Uint16 const co1_groupEnum = 15; // Хэш-сумма: -Uint32 const co1_odHash[4] = {0x9F1C7C00, 0x93ACC9A0, 0x52405691, 0x7C174CEB}; +Uint32 const co1_odHash[4] = {0x5997F190, 0x22AC056B, 0xB47A12F6, 0xCDE7A7F7}; // Таблица с адресами переменных long const CO1_OD_TBL3[] = { -(long)(&co1_vars.co_deviceType), //[1000h.00h], Название: Тип устройства, ТекстПУ: Device Type, Группа: CAN -(long)(&co1_vars.co_errorRegister), //[1001h.00h], Название: Регистр ошибок, ТекстПУ: ErrReg, Группа: CAN -(long)(&co1_vars.co_deviceState), //[1002h.00h], Название: Manufacturer Status Register, ТекстПУ: DevSta, Группа: CAN -(long)(&co1_vars.co_emcyCOBID), //[1014h.00h], Название: COB-ID Emergency Object, ТекстПУ: eCOBID, Группа: CAN -(long)(&co1_vars.co_CHBT), //[1016h.01h], Название: Время ожидания сообщения Heartbeat, ТекстПУ: CHBT, Группа: CAN -(long)(&co1_vars.co_PHBT), //[1017h.00h], Название: Период генерации сообщения Heartbeat, ТекстПУ: PHBT, Группа: CAN -(long)(&co1_vars.co_vendorID), //[1018h.01h], Название: Код производителя, ТекстПУ: VendID, Группа: CAN -(long)(&co1_vars.co_productCode), //[1018h.02h], Название: Код продукта, ТекстПУ: PrCode, Группа: CAN -(long)(&co1_vars.co_revisionNumber), //[1018h.03h], Название: Номер ревизии, ТекстПУ: RevNum, Группа: CAN -(long)(&co1_vars.co_serialNumber), //[1018h.04h], Название: Серийный номер, ТекстПУ: SerNum, Группа: CAN -(long)(&co1_vars.co_csrxCOBID), //[1200h.01h], Название: COB-ID Client->Server(rx), ТекстПУ: CSRXID, Группа: CAN -(long)(&co1_vars.co_sctxCOBID), //[1200h.02h], Название: COB-ID Server->Client(tx), ТекстПУ: SCTXID, Группа: CAN -(long)(&co1_vars.co_cstxCOBID), //[1280h.01h], Название: COB-ID Client->Server(tx), ТекстПУ: CSTXID, Группа: CAN -(long)(&co1_vars.co_scrxCOBID), //[1280h.02h], Название: COB-ID Server->Client(rx), ТекстПУ: SCRXID, Группа: CAN -(long)(&co1_vars.co_ssNODEID), //[1280h.03h], Название: NODE-ID on SDO server, ТекстПУ: SDOSID, Группа: CAN -(long)(&co1_vars.co_RPDO1COBID), //[1400h.01h], Название: COB-ID for RPDO1, ТекстПУ: IRPDO1, Группа: CAN -(long)(&co1_vars.co_transType), //[1400h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_RPDO2COBID), //[1401h.01h], Название: COB-ID for RPDO2, ТекстПУ: IRPDO2, Группа: CAN -(long)(&co1_vars.co_transType), //[1401h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_RPDO3COBID), //[1402h.01h], Название: COB-ID for RPDO3, ТекстПУ: IRPDO3, Группа: CAN -(long)(&co1_vars.co_transType), //[1402h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_RPDO4COBID), //[1403h.01h], Название: COB-ID for RPDO4, ТекстПУ: IRPDO4, Группа: CAN -(long)(&co1_vars.co_transType), //[1403h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_RPDO5COBID), //[1404h.01h], Название: COB-ID for RPDO5, ТекстПУ: IRPDO5, Группа: CAN -(long)(&co1_vars.co_transType), //[1404h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_RPDO6COBID), //[1405h.01h], Название: COB-ID for RPDO6, ТекстПУ: IRPDO6, Группа: CAN -(long)(&co1_vars.co_transType), //[1405h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_RPDO7COBID), //[1406h.01h], Название: COB-ID for RPDO7, ТекстПУ: IRPDO7, Группа: CAN -(long)(&co1_vars.co_transType), //[1406h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_RPDO8COBID), //[1407h.01h], Название: COB-ID for RPDO8, ТекстПУ: IRPDO8, Группа: CAN -(long)(&co1_vars.co_transType), //[1407h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_RPDO1_1Mapping), //[1600h.01h], Название: RPDO1-1 Mapping, ТекстПУ: RPM11, Группа: CAN -(long)(&co1_vars.co_RPDO1_2Mapping), //[1600h.02h], Название: RPDO1-2 Mapping, ТекстПУ: RPM12, Группа: CAN -(long)(&co1_vars.co_RPDO1_3Mapping), //[1600h.03h], Название: RPDO1-3 Mapping, ТекстПУ: RPM13, Группа: CAN -(long)(&co1_vars.co_RPDO1_4Mapping), //[1600h.04h], Название: RPDO1-4 Mapping, ТекстПУ: RPM14, Группа: CAN -(long)(&co1_vars.co_RPDO2_1Mapping), //[1601h.01h], Название: RPDO2-1 Mapping, ТекстПУ: RPM21, Группа: CAN -(long)(&co1_vars.co_RPDO2_2Mapping), //[1601h.02h], Название: RPDO2-2 Mapping, ТекстПУ: RPM22, Группа: CAN -(long)(&co1_vars.co_RPDO2_3Mapping), //[1601h.03h], Название: RPDO2-3 Mapping, ТекстПУ: RPM23, Группа: CAN -(long)(&co1_vars.co_RPDO2_4Mapping), //[1601h.04h], Название: RPDO2-4 Mapping, ТекстПУ: RPM24, Группа: CAN -(long)(&co1_vars.co_RPDO3_1Mapping), //[1602h.01h], Название: RPDO3-1 Mapping, ТекстПУ: RPM31, Группа: CAN -(long)(&co1_vars.co_RPDO3_2Mapping), //[1602h.02h], Название: RPDO3-2 Mapping, ТекстПУ: RPM32, Группа: CAN -(long)(&co1_vars.co_RPDO3_3Mapping), //[1602h.03h], Название: RPDO3-3 Mapping, ТекстПУ: RPM33, Группа: CAN -(long)(&co1_vars.co_RPDO3_4Mapping), //[1602h.04h], Название: RPDO3-4 Mapping, ТекстПУ: RPM34, Группа: CAN -(long)(&co1_vars.co_RPDO4_1Mapping), //[1603h.01h], Название: RPDO4-1 Mapping, ТекстПУ: RPM41, Группа: CAN -(long)(&co1_vars.co_RPDO4_2Mapping), //[1603h.02h], Название: RPDO4-2 Mapping, ТекстПУ: RPM42, Группа: CAN -(long)(&co1_vars.co_RPDO4_3Mapping), //[1603h.03h], Название: RPDO4-3 Mapping, ТекстПУ: RPM43, Группа: CAN -(long)(&co1_vars.co_RPDO4_4Mapping), //[1603h.04h], Название: RPDO4-4 Mapping, ТекстПУ: RPM44, Группа: CAN -(long)(&co1_vars.co_RPDO5_1Mapping), //[1604h.01h], Название: RPDO5-1 Mapping, ТекстПУ: RPM51, Группа: CAN -(long)(&co1_vars.co_RPDO5_2Mapping), //[1604h.02h], Название: RPDO5-2 Mapping, ТекстПУ: RPM52, Группа: CAN -(long)(&co1_vars.co_RPDO5_3Mapping), //[1604h.03h], Название: RPDO5-3 Mapping, ТекстПУ: RPM53, Группа: CAN -(long)(&co1_vars.co_RPDO5_4Mapping), //[1604h.04h], Название: RPDO5-4 Mapping, ТекстПУ: RPM54, Группа: CAN -(long)(&co1_vars.co_RPDO6_1Mapping), //[1605h.01h], Название: RPDO6-1 Mapping, ТекстПУ: RPM61, Группа: CAN -(long)(&co1_vars.co_RPDO6_2Mapping), //[1605h.02h], Название: RPDO6-2 Mapping, ТекстПУ: RPM62, Группа: CAN -(long)(&co1_vars.co_RPDO6_3Mapping), //[1605h.03h], Название: RPDO6-3 Mapping, ТекстПУ: RPM63, Группа: CAN -(long)(&co1_vars.co_RPDO6_4Mapping), //[1605h.04h], Название: RPDO6-4 Mapping, ТекстПУ: RPM64, Группа: CAN -(long)(&co1_vars.co_RPDO7_1Mapping), //[1606h.01h], Название: RPDO7-1 Mapping, ТекстПУ: RPM71, Группа: CAN -(long)(&co1_vars.co_RPDO7_2Mapping), //[1606h.02h], Название: RPDO7-2 Mapping, ТекстПУ: RPM72, Группа: CAN -(long)(&co1_vars.co_RPDO7_3Mapping), //[1606h.03h], Название: RPDO7-3 Mapping, ТекстПУ: RPM73, Группа: CAN -(long)(&co1_vars.co_RPDO7_4Mapping), //[1606h.04h], Название: RPDO7-4 Mapping, ТекстПУ: RPM74, Группа: CAN -(long)(&co1_vars.co_RPDO8_1Mapping), //[1607h.01h], Название: RPDO8-1 Mapping, ТекстПУ: RPM81, Группа: CAN -(long)(&co1_vars.co_RPDO8_2Mapping), //[1607h.02h], Название: RPDO8-2 Mapping, ТекстПУ: RPM82, Группа: CAN -(long)(&co1_vars.co_RPDO8_3Mapping), //[1607h.03h], Название: RPDO8-3 Mapping, ТекстПУ: RPM83, Группа: CAN -(long)(&co1_vars.co_RPDO8_4Mapping), //[1607h.04h], Название: RPDO8-4 Mapping, ТекстПУ: RPM84, Группа: CAN -(long)(&co1_vars.co_TPDO1COBID), //[1800h.01h], Название: COB-ID for TPDO1, ТекстПУ: ITPDO1, Группа: CAN -(long)(&co1_vars.co_transType), //[1800h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_TPDO1ITime), //[1800h.03h], Название: Inhibit Time 1, ТекстПУ: ITime1, Группа: CAN -(long)(&co1_vars.co_compatEntry), //[1800h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN -(long)(&co1_vars.co_TPDO1EventTimer), //[1800h.05h], Название: Event Timer 1, ТекстПУ: EvTmr1, Группа: CAN -(long)(&co1_vars.co_TPDO2COBID), //[1801h.01h], Название: COB-ID for TPDO2, ТекстПУ: ITPDO2, Группа: CAN -(long)(&co1_vars.co_transType), //[1801h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_TPDO2ITime), //[1801h.03h], Название: Inhibit Time 2, ТекстПУ: ITime2, Группа: CAN -(long)(&co1_vars.co_compatEntry), //[1801h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN -(long)(&co1_vars.co_TPDO2EventTimer), //[1801h.05h], Название: Event Timer 2, ТекстПУ: EvTmr2, Группа: CAN -(long)(&co1_vars.co_TPDO3COBID), //[1802h.01h], Название: COB-ID for TPDO3, ТекстПУ: ITPDO3, Группа: CAN -(long)(&co1_vars.co_transType), //[1802h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_TPDO3ITime), //[1802h.03h], Название: Inhibit Time 3, ТекстПУ: ITime3, Группа: CAN -(long)(&co1_vars.co_compatEntry), //[1802h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN -(long)(&co1_vars.co_TPDO3EventTimer), //[1802h.05h], Название: Event Timer 3, ТекстПУ: EvTmr3, Группа: CAN -(long)(&co1_vars.co_TPDO4COBID), //[1803h.01h], Название: COB-ID for TPDO4, ТекстПУ: ITPDO4, Группа: CAN -(long)(&co1_vars.co_transType), //[1803h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_TPDO4ITime), //[1803h.03h], Название: Inhibit Time 4, ТекстПУ: ITime4, Группа: CAN -(long)(&co1_vars.co_compatEntry), //[1803h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN -(long)(&co1_vars.co_TPDO4EventTimer), //[1803h.05h], Название: Event Timer 4, ТекстПУ: EvTmr4, Группа: CAN -(long)(&co1_vars.co_TPDO5COBID), //[1804h.01h], Название: COB-ID for TPDO5, ТекстПУ: ITPDO5, Группа: CAN -(long)(&co1_vars.co_transType), //[1804h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_TPDO5ITime), //[1804h.03h], Название: Inhibit Time 5, ТекстПУ: ITime5, Группа: CAN -(long)(&co1_vars.co_compatEntry), //[1804h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN -(long)(&co1_vars.co_TPDO5EventTimer), //[1804h.05h], Название: Event Timer 5, ТекстПУ: EvTmr5, Группа: CAN -(long)(&co1_vars.co_TPDO6COBID), //[1805h.01h], Название: COB-ID for TPDO6, ТекстПУ: ITPDO6, Группа: CAN -(long)(&co1_vars.co_transType), //[1805h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_TPDO6ITime), //[1805h.03h], Название: Inhibit Time 6, ТекстПУ: ITime6, Группа: CAN -(long)(&co1_vars.co_compatEntry), //[1805h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN -(long)(&co1_vars.co_TPDO6EventTimer), //[1805h.05h], Название: Event Timer 6, ТекстПУ: EvTmr6, Группа: CAN -(long)(&co1_vars.co_TPDO7COBID), //[1806h.01h], Название: COB-ID for TPDO7, ТекстПУ: ITPDO7, Группа: CAN -(long)(&co1_vars.co_transType), //[1806h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_TPDO7ITime), //[1806h.03h], Название: Inhibit Time 7, ТекстПУ: ITime7, Группа: CAN -(long)(&co1_vars.co_compatEntry), //[1806h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN -(long)(&co1_vars.co_TPDO7EventTimer), //[1806h.05h], Название: Event Timer 7, ТекстПУ: EvTmr7, Группа: CAN -(long)(&co1_vars.co_TPDO8COBID), //[1807h.01h], Название: COB-ID for TPDO8, ТекстПУ: ITPDO8, Группа: CAN -(long)(&co1_vars.co_transType), //[1807h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN -(long)(&co1_vars.co_TPDO8ITime), //[1807h.03h], Название: Inhibit Time 8, ТекстПУ: ITime8, Группа: CAN -(long)(&co1_vars.co_compatEntry), //[1807h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN -(long)(&co1_vars.co_TPDO8EventTimer), //[1807h.05h], Название: Event Timer 8, ТекстПУ: EvTmr8, Группа: CAN -(long)(&co1_vars.co_TPDO1_1Mapping), //[1A00h.01h], Название: TPDO1-1 Mapping, ТекстПУ: TPM11, Группа: CAN -(long)(&co1_vars.co_TPDO1_2Mapping), //[1A00h.02h], Название: TPDO1-2 Mapping, ТекстПУ: TPM12, Группа: CAN -(long)(&co1_vars.co_TPDO1_3Mapping), //[1A00h.03h], Название: TPDO1-3 Mapping, ТекстПУ: TPM13, Группа: CAN -(long)(&co1_vars.co_TPDO1_4Mapping), //[1A00h.04h], Название: TPDO1-4 Mapping, ТекстПУ: TPM14, Группа: CAN -(long)(&co1_vars.co_TPDO2_1Mapping), //[1A01h.01h], Название: TPDO2-1 Mapping, ТекстПУ: TPM21, Группа: CAN -(long)(&co1_vars.co_TPDO2_2Mapping), //[1A01h.02h], Название: TPDO2-2 Mapping, ТекстПУ: TPM22, Группа: CAN -(long)(&co1_vars.co_TPDO2_3Mapping), //[1A01h.03h], Название: TPDO2-3 Mapping, ТекстПУ: TPM23, Группа: CAN -(long)(&co1_vars.co_TPDO2_4Mapping), //[1A01h.04h], Название: TPDO2-4 Mapping, ТекстПУ: TPM24, Группа: CAN -(long)(&co1_vars.co_TPDO3_1Mapping), //[1A02h.01h], Название: TPDO3-1 Mapping, ТекстПУ: TPM31, Группа: CAN -(long)(&co1_vars.co_TPDO3_2Mapping), //[1A02h.02h], Название: TPDO3-2 Mapping, ТекстПУ: TPM32, Группа: CAN -(long)(&co1_vars.co_TPDO3_3Mapping), //[1A02h.03h], Название: TPDO3-3 Mapping, ТекстПУ: TPM33, Группа: CAN -(long)(&co1_vars.co_TPDO3_4Mapping), //[1A02h.04h], Название: TPDO3-4 Mapping, ТекстПУ: TPM34, Группа: CAN -(long)(&co1_vars.co_TPDO4_1Mapping), //[1A03h.01h], Название: TPDO4-1 Mapping, ТекстПУ: TPM41, Группа: CAN -(long)(&co1_vars.co_TPDO4_2Mapping), //[1A03h.02h], Название: TPDO4-2 Mapping, ТекстПУ: TPM42, Группа: CAN -(long)(&co1_vars.co_TPDO4_3Mapping), //[1A03h.03h], Название: TPDO4-3 Mapping, ТекстПУ: TPM43, Группа: CAN -(long)(&co1_vars.co_TPDO4_4Mapping), //[1A03h.04h], Название: TPDO4-4 Mapping, ТекстПУ: TPM44, Группа: CAN -(long)(&co1_vars.co_TPDO5_1Mapping), //[1A04h.01h], Название: TPDO5-1 Mapping, ТекстПУ: TPM51, Группа: CAN -(long)(&co1_vars.co_TPDO5_2Mapping), //[1A04h.02h], Название: TPDO5-2 Mapping, ТекстПУ: TPM52, Группа: CAN -(long)(&co1_vars.co_TPDO5_3Mapping), //[1A04h.03h], Название: TPDO5-3 Mapping, ТекстПУ: TPM53, Группа: CAN -(long)(&co1_vars.co_TPDO5_4Mapping), //[1A04h.04h], Название: TPDO5-4 Mapping, ТекстПУ: TPM54, Группа: CAN -(long)(&co1_vars.co_TPDO6_1Mapping), //[1A05h.01h], Название: TPDO6-1 Mapping, ТекстПУ: TPM61, Группа: CAN -(long)(&co1_vars.co_TPDO6_2Mapping), //[1A05h.02h], Название: TPDO6-2 Mapping, ТекстПУ: TPM62, Группа: CAN -(long)(&co1_vars.co_TPDO6_3Mapping), //[1A05h.03h], Название: TPDO6-3 Mapping, ТекстПУ: TPM63, Группа: CAN -(long)(&co1_vars.co_TPDO6_4Mapping), //[1A05h.04h], Название: TPDO6-4 Mapping, ТекстПУ: TPM64, Группа: CAN -(long)(&co1_vars.co_TPDO7_1Mapping), //[1A06h.01h], Название: TPDO7-1 Mapping, ТекстПУ: TPM71, Группа: CAN -(long)(&co1_vars.co_TPDO7_2Mapping), //[1A06h.02h], Название: TPDO7-2 Mapping, ТекстПУ: TPM72, Группа: CAN -(long)(&co1_vars.co_TPDO7_3Mapping), //[1A06h.03h], Название: TPDO7-3 Mapping, ТекстПУ: TPM73, Группа: CAN -(long)(&co1_vars.co_TPDO7_4Mapping), //[1A06h.04h], Название: TPDO7-4 Mapping, ТекстПУ: TPM74, Группа: CAN -(long)(&co1_vars.co_TPDO8_1Mapping), //[1A07h.01h], Название: TPDO8-1 Mapping, ТекстПУ: TPM81, Группа: CAN -(long)(&co1_vars.co_TPDO8_2Mapping), //[1A07h.02h], Название: TPDO8-2 Mapping, ТекстПУ: TPM82, Группа: CAN -(long)(&co1_vars.co_TPDO8_3Mapping), //[1A07h.03h], Название: TPDO8-3 Mapping, ТекстПУ: TPM83, Группа: CAN -(long)(&co1_vars.co_TPDO8_4Mapping), //[1A07h.04h], Название: TPDO8-4 Mapping, ТекстПУ: TPM84, Группа: CAN -(long)(&co1_vars.co_nodeID), //[2000h.00h], Название: CAN NODE-ID, ТекстПУ: NodeID, Группа: CAN -(long)(&co1_vars.co_bitRate), //[2001h.00h], Название: CAN Bit Rate, ТекстПУ: CANBR, Группа: CAN, биты с 0 по 2: 0000000000000111b -(long)(&co1_vars.co_vendorID), //[2002h.01h], Название: Код производителя, ТекстПУ: VendID, Группа: CAN -(long)(&co1_vars.co_productCode), //[2002h.02h], Название: Код продукта, ТекстПУ: PrCode, Группа: CAN -(long)(&co1_vars.co_revisionNumber), //[2002h.03h], Название: Номер ревизии, ТекстПУ: RevNum, Группа: CAN -(long)(&co1_vars.co_serialNumber), //[2002h.04h], Название: Серийный номер, ТекстПУ: SerNum, Группа: CAN -(long)(&co1_vars.co_specialData1), //[2003h.01h], Название: Special Data 1, ТекстПУ: SpDat1, Группа: CAN -(long)(&co1_vars.co_specialData2), //[2003h.02h], Название: Special Data 2, ТекстПУ: SpDat2, Группа: CAN -(long)(&co1_vars.co_specialData3), //[2003h.03h], Название: Special Data 3, ТекстПУ: SpDat3, Группа: CAN -(long)(&co1_vars.co_specialData4), //[2003h.04h], Название: Special Data 4, ТекстПУ: SpDat4, Группа: CAN -(long)(&co1_vars.co_secretCode), //[2004h.00h], Название: Secret Code, ТекстПУ: Secret, Группа: CAN -(long)(&co1_vars.co_protectBit), //[2005h.00h], Название: Protect Bit, ТекстПУ: ProtBt, Группа: CAN, биты с 0 по 0: 0000000000000001b -(long)(&co1_odHash[0]), //[2007h.01h], Название: md5_hash_0, ТекстПУ: md5_hash_0, Группа: CAN -(long)(&co1_odHash[1]), //[2007h.02h], Название: md5_hash_1, ТекстПУ: md5_hash_1, Группа: CAN -(long)(&co1_odHash[2]), //[2007h.03h], Название: md5_hash_2, ТекстПУ: md5_hash_2, Группа: CAN -(long)(&co1_odHash[3]), //[2007h.04h], Название: md5_hash_3, ТекстПУ: md5_hash_3, Группа: CAN -(long)(&co1_vars.co_heartbeatFlag0), //[2010h.01h], Название: Heartbeat Flag 0-31, ТекстПУ: HFlag0, Группа: CAN -(long)(&co1_vars.co_heartbeatFlag1), //[2010h.02h], Название: Heartbeat Flag 32-63, ТекстПУ: HFlag1, Группа: CAN -(long)(&co1_vars.co_heartbeatFlag2), //[2010h.03h], Название: Heartbeat Flag 64-95, ТекстПУ: HFlag2, Группа: CAN -(long)(&co1_vars.co_heartbeatFlag3), //[2010h.04h], Название: Heartbeat Flag 96-127, ТекстПУ: HFlag3, Группа: CAN -(long)(&co1_vars.co_heartbeatMask0), //[2011h.01h], Название: Heartbeat Mask 0-31, ТекстПУ: HMask0, Группа: CAN -(long)(&co1_vars.co_heartbeatMask1), //[2011h.02h], Название: Heartbeat Mask 32-63, ТекстПУ: HMask1, Группа: CAN -(long)(&co1_vars.co_heartbeatMask2), //[2011h.03h], Название: Heartbeat Mask 64-95, ТекстПУ: HMask2, Группа: CAN -(long)(&co1_vars.co_heartbeatMask3), //[2011h.04h], Название: Heartbeat Mask 96-127, ТекстПУ: HMask3, Группа: CAN -(long)(&co1_vars.co_heartbeatAutoStart), //[2012h.00h], Название: Heartbeat Autostart, ТекстПУ: HBASta, Группа: CAN, биты с 0 по 0: 0000000000000001b -(long)(&co1_vars.co_heartbeatAutoRecovery), //[2014h.00h], Название: Heartbeat Autorecovery, ТекстПУ: HBARec, Группа: CAN, биты с 0 по 0: 0000000000000001b -(long)(&co1_vars.co_nodeState), //[2015h.00h], Название: Состояние драйвера CAN-Open, ТекстПУ: State, Группа: CAN -(long)(&co1_vars.co_emergencyErrorCode), //[2016h.00h], Название: Emergency Error Code, ТекстПУ: EmErCo, Группа: CAN -(long)(&co1_vars.co_deviceErrorState), //[2017h.00h], Название: Device Error State, ТекстПУ: DeErSt, Группа: CAN -(long)(&co1_vars.co_ODCommand), //[2080h.01h], Название: Object Dictionary Command, ТекстПУ: ODComm, Группа: CAN -(long)(&co1_vars.co_currentODIndex), //[2080h.02h], Название: Current OD Index, ТекстПУ: ODCInd, Группа: CAN -(long)(&co1_vars.co_currentODSubIndex), //[2080h.03h], Название: Current OD Sub-Index, ТекстПУ: ODCSub, Группа: CAN -(long)(&co1_vars.co_currentODEText), //[2080h.04h], Название: Current OD Element Text, ТекстПУ: ODCTxt, Группа: CAN -(long)(&co1_vars.co_currentODEFormat), //[2080h.05h], Название: Current OD Element Format, ТекстПУ: ODCFrm, Группа: CAN -(long)(&co1_vars.co_currentODEMin), //[2080h.06h], Название: Current OD Element Min, ТекстПУ: ODCMin, Группа: CAN -(long)(&co1_vars.co_currentODEMax), //[2080h.07h], Название: Current OD Element Max, ТекстПУ: ODCMax, Группа: CAN -(long)(&co1_vars.co_currentODEDefault), //[2080h.08h], Название: Current OD Element Default, ТекстПУ: ODCDef, Группа: CAN -(long)(&co1_vars.co_currentODEMinLow), //[2080h.09h], Название: Current OD Element MinLow, ТекстПУ: ODCMiL, Группа: CAN -(long)(&co1_vars.co_currentODEMaxLow), //[2080h.0Ah], Название: Current OD Element MaxLow, ТекстПУ: ODCMaL, Группа: CAN -(long)(&co1_vars.co_currentODEDefaultLow), //[2080h.0Bh], Название: Current OD Element Default Low, ТекстПУ: ODCDeL, Группа: CAN -(long)(&co1_vars.co_currentODEAddrLow), //[2080h.0Ch], Название: Current OD Element Address, ТекстПУ: ODCAdr, Группа: CAN -(long)(&co1_vars.co_currentODEAddrLow), //[2080h.0Dh], Название: Current OD Element Address, ТекстПУ: ODCAdr, Группа: CAN -(long)(&co1_vars.co_currentODEType), //[2080h.0Eh], Название: Группа параметров, ТекстПУ: Группа, Группа: CAN -(long)(&co1_vars.co_odIndexSize), //[2081h.00h], Название: Количество индексов, ТекстПУ: КолИнд, Группа: CAN -(long)(&co1_vars.co_defaultIndex1), //[2082h.01h], Название: Default Index 1, ТекстПУ: DfInd1, Группа: CAN -(long)(&co1_vars.co_defaultIndex2), //[2082h.02h], Название: Default Index 2, ТекстПУ: DfInd2, Группа: CAN -(long)(&co1_vars.co_maskElement01), //[2083h.01h], Название: Mask Element, ТекстПУ: MskEl0, Группа: CAN, биты с 0 по 7: 0000000011111111b -(long)(&co1_vars.co_maskElement01), //[2083h.02h], Название: Mask Element, ТекстПУ: MskEl1, Группа: CAN, биты с 8 по 15: 1111111100000000b -(long)(&co1_vars.co_maskElement23), //[2083h.03h], Название: Mask Element, ТекстПУ: MskEl2, Группа: CAN, биты с 0 по 7: 0000000011111111b -(long)(&co1_vars.co_maskElement23), //[2083h.04h], Название: Mask Element, ТекстПУ: MskEl3, Группа: CAN, биты с 8 по 15: 1111111100000000b -(long)(&co1_vars.co_maskElement45), //[2083h.05h], Название: Mask Element, ТекстПУ: MskEl4, Группа: CAN, биты с 0 по 7: 0000000011111111b -(long)(&co1_vars.co_maskElement45), //[2083h.06h], Название: Mask Element, ТекстПУ: MskEl5, Группа: CAN, биты с 8 по 15: 1111111100000000b -(long)(&co1_vars.co_maskElement67), //[2083h.07h], Название: Mask Element, ТекстПУ: MskEl6, Группа: CAN, биты с 0 по 7: 0000000011111111b -(long)(&co1_vars.co_maskElement67), //[2083h.08h], Название: Mask Element, ТекстПУ: MskEl7, Группа: CAN, биты с 8 по 15: 1111111100000000b -(long)(&co1_vars.co_maskElement89), //[2083h.09h], Название: Mask Element, ТекстПУ: MskEl8, Группа: CAN, биты с 0 по 7: 0000000011111111b -(long)(&co1_vars.co_maskElement89), //[2083h.0Ah], Название: Mask Element, ТекстПУ: MskEl9, Группа: CAN, биты с 8 по 15: 1111111100000000b -(long)(&co1_vars.co_maskElementAB), //[2083h.0Bh], Название: Mask Element, ТекстПУ: MskElA, Группа: CAN, биты с 0 по 7: 0000000011111111b -(long)(&co1_vars.co_maskElementAB), //[2083h.0Ch], Название: Mask Element, ТекстПУ: MskElB, Группа: CAN, биты с 8 по 15: 1111111100000000b -(long)(&co1_vars.co_maskElementCD), //[2083h.0Dh], Название: Mask Element, ТекстПУ: MskElC, Группа: CAN, биты с 0 по 7: 0000000011111111b -(long)(&co1_vars.co_maskElementCD), //[2083h.0Eh], Название: Mask Element, ТекстПУ: MskElD, Группа: CAN, биты с 8 по 15: 1111111100000000b -(long)(&co1_vars.co_maskElementEF), //[2083h.0Fh], Название: Mask Element, ТекстПУ: MskElE, Группа: CAN, биты с 0 по 7: 0000000011111111b -(long)(&co1_vars.co_maskElementEF), //[2083h.10h], Название: Mask Element, ТекстПУ: MskElF, Группа: CAN, биты с 8 по 15: 1111111100000000b -(long)(&co1_vars.co_scaleNum0), //[2100h.01h], Название: Scale Number 0, ТекстПУ: SN0, Группа: CAN -(long)(&co1_vars.co_scaleNum0Format), //[2100h.02h], Название: Scale Number 0 Format, ТекстПУ: S0Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum0Format), //[2100h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum0Format), //[2100h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum0Format), //[2100h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum0Format), //[2100h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum1), //[2101h.01h], Название: Scale Number 1, ТекстПУ: SN1, Группа: CAN -(long)(&co1_vars.co_scaleNum1Format), //[2101h.02h], Название: Scale Number 1 Format, ТекстПУ: S1Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum1Format), //[2101h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum1Format), //[2101h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum1Format), //[2101h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum1Format), //[2101h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum2), //[2102h.01h], Название: Scale Number 2, ТекстПУ: SN2, Группа: CAN -(long)(&co1_vars.co_scaleNum2Format), //[2102h.02h], Название: Scale Number 2 Format, ТекстПУ: S2Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum2Format), //[2102h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum2Format), //[2102h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum2Format), //[2102h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum2Format), //[2102h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum3), //[2103h.01h], Название: Scale Number 3, ТекстПУ: SN3, Группа: CAN -(long)(&co1_vars.co_scaleNum3Format), //[2103h.02h], Название: Scale Number 3 Format, ТекстПУ: S3Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum3Format), //[2103h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum3Format), //[2103h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum3Format), //[2103h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum3Format), //[2103h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum4), //[2104h.01h], Название: Scale Number 4, ТекстПУ: SN4, Группа: CAN -(long)(&co1_vars.co_scaleNum4Format), //[2104h.02h], Название: Scale Number 4 Format, ТекстПУ: S4Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum4Format), //[2104h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum4Format), //[2104h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum4Format), //[2104h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum4Format), //[2104h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum5), //[2105h.01h], Название: Scale Number 5, ТекстПУ: SN5, Группа: CAN -(long)(&co1_vars.co_scaleNum5Format), //[2105h.02h], Название: Scale Number 5 Format, ТекстПУ: S5Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum5Format), //[2105h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum5Format), //[2105h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum5Format), //[2105h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum5Format), //[2105h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum6), //[2106h.01h], Название: Scale Number 6, ТекстПУ: SN6, Группа: CAN -(long)(&co1_vars.co_scaleNum6Format), //[2106h.02h], Название: Scale Number 6 Format, ТекстПУ: S6Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum6Format), //[2106h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum6Format), //[2106h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum6Format), //[2106h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum6Format), //[2106h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum7), //[2107h.01h], Название: Scale Number 7, ТекстПУ: SN7, Группа: CAN -(long)(&co1_vars.co_scaleNum7Format), //[2107h.02h], Название: Scale Number 7 Format, ТекстПУ: S7Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum7Format), //[2107h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum7Format), //[2107h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum7Format), //[2107h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum7Format), //[2107h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum8), //[2108h.01h], Название: Scale Number 8, ТекстПУ: SN8, Группа: CAN -(long)(&co1_vars.co_scaleNum8Format), //[2108h.02h], Название: Scale Number 8 Format, ТекстПУ: S8Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum8Format), //[2108h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum8Format), //[2108h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum8Format), //[2108h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum8Format), //[2108h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum9), //[2109h.01h], Название: Scale Number 9, ТекстПУ: SN9, Группа: CAN -(long)(&co1_vars.co_scaleNum9Format), //[2109h.02h], Название: Scale Number 9 Format, ТекстПУ: S9Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum9Format), //[2109h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum9Format), //[2109h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum9Format), //[2109h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum9Format), //[2109h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNumA), //[210Ah.01h], Название: Scale Number A, ТекстПУ: SNA, Группа: CAN -(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.02h], Название: Scale Number A Format, ТекстПУ: SAFmt, Группа: CAN -(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNumB), //[210Bh.01h], Название: Scale Number B, ТекстПУ: SNB, Группа: CAN -(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.02h], Название: Scale Number B Format, ТекстПУ: SBFmt, Группа: CAN -(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNumC), //[210Ch.01h], Название: Scale Number C, ТекстПУ: SNC, Группа: CAN -(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.02h], Название: Scale Number C Format, ТекстПУ: SCFmt, Группа: CAN -(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNumD), //[210Dh.01h], Название: Scale Number D, ТекстПУ: SND, Группа: CAN -(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.02h], Название: Scale Number D Format, ТекстПУ: SDFmt, Группа: CAN -(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNumE), //[210Eh.01h], Название: Scale Number E, ТекстПУ: SNE, Группа: CAN -(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.02h], Название: Scale Number E Format, ТекстПУ: SEFmt, Группа: CAN -(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNumF), //[210Fh.01h], Название: Scale Number F, ТекстПУ: SNF, Группа: CAN -(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.02h], Название: Scale Number F Format, ТекстПУ: SFFmt, Группа: CAN -(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum10), //[2110h.01h], Название: Scale Number 10, ТекстПУ: SN10, Группа: CAN -(long)(&co1_vars.co_scaleNum10Format), //[2110h.02h], Название: Scale Number 10 Format, ТекстПУ: S10Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum10Format), //[2110h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum10Format), //[2110h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum10Format), //[2110h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum10Format), //[2110h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum11), //[2111h.01h], Название: Scale Number 11, ТекстПУ: SN11, Группа: CAN -(long)(&co1_vars.co_scaleNum11Format), //[2111h.02h], Название: Scale Number 11 Format, ТекстПУ: S11Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum11Format), //[2111h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum11Format), //[2111h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum11Format), //[2111h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum11Format), //[2111h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum12), //[2112h.01h], Название: Scale Number 12, ТекстПУ: SN12, Группа: CAN -(long)(&co1_vars.co_scaleNum12Format), //[2112h.02h], Название: Scale Number 12 Format, ТекстПУ: S12Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum12Format), //[2112h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum12Format), //[2112h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum12Format), //[2112h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum12Format), //[2112h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum13), //[2113h.01h], Название: Scale Number 13, ТекстПУ: SN13, Группа: CAN -(long)(&co1_vars.co_scaleNum13Format), //[2113h.02h], Название: Scale Number 13 Format, ТекстПУ: S13Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum13Format), //[2113h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum13Format), //[2113h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum13Format), //[2113h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum13Format), //[2113h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum14), //[2114h.01h], Название: Scale Number 14, ТекстПУ: SN14, Группа: CAN -(long)(&co1_vars.co_scaleNum14Format), //[2114h.02h], Название: Scale Number 14 Format, ТекстПУ: S14Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum14Format), //[2114h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum14Format), //[2114h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum14Format), //[2114h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum14Format), //[2114h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum15), //[2115h.01h], Название: Scale Number 15, ТекстПУ: SN15, Группа: CAN -(long)(&co1_vars.co_scaleNum15Format), //[2115h.02h], Название: Scale Number 15Format, ТекстПУ: S15Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum15Format), //[2115h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum15Format), //[2115h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum15Format), //[2115h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum15Format), //[2115h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum16), //[2116h.01h], Название: Scale Number 16, ТекстПУ: SN16, Группа: CAN -(long)(&co1_vars.co_scaleNum16Format), //[2116h.02h], Название: Scale Number 16Format, ТекстПУ: S16Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum16Format), //[2116h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum16Format), //[2116h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum16Format), //[2116h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum16Format), //[2116h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum17), //[2117h.01h], Название: Scale Number 17, ТекстПУ: SN17, Группа: CAN -(long)(&co1_vars.co_scaleNum17Format), //[2117h.02h], Название: Scale Number 17Format, ТекстПУ: S17Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum17Format), //[2117h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum17Format), //[2117h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum17Format), //[2117h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum17Format), //[2117h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum18), //[2118h.01h], Название: Scale Number 18, ТекстПУ: SN18, Группа: CAN -(long)(&co1_vars.co_scaleNum18Format), //[2118h.02h], Название: Scale Number 18Format, ТекстПУ: S18Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum18Format), //[2118h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum18Format), //[2118h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum18Format), //[2118h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum18Format), //[2118h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum19), //[2119h.01h], Название: Scale Number 19, ТекстПУ: SN19, Группа: CAN -(long)(&co1_vars.co_scaleNum19Format), //[2119h.02h], Название: Scale Number 19Format, ТекстПУ: S19Fmt, Группа: CAN -(long)(&co1_vars.co_scaleNum19Format), //[2119h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum19Format), //[2119h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum19Format), //[2119h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum19Format), //[2119h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum1A), //[211Ah.01h], Название: Scale Number 1A, ТекстПУ: SN1A, Группа: CAN -(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.02h], Название: Scale Number 1AFormat, ТекстПУ: S1AFmt, Группа: CAN -(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum1B), //[211Bh.01h], Название: Scale Number 1B, ТекстПУ: SN1B, Группа: CAN -(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.02h], Название: Scale Number 1BFormat, ТекстПУ: S1BFmt, Группа: CAN -(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum1C), //[211Ch.01h], Название: Scale Number 1C, ТекстПУ: SN1C, Группа: CAN -(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.02h], Название: Scale Number 1C Format, ТекстПУ: S1CFmt, Группа: CAN -(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&co1_vars.co_scaleNum1D), //[211Dh.01h], Название: Scale Number 1D, ТекстПУ: SN1D, Группа: CAN -(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.02h], Название: Scale Number 1D Format, ТекстПУ: S1DFmt, Группа: CAN -(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b -(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b -(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b -(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b -(long)(&cmd.all), //[2502h.01h], Название: Пуск, ТекстПУ: Пуск, Группа: Слово управления, биты с 0 по 0: 0000000000000001b -(long)(&cmd.all), //[2502h.02h], Название: Стоп, ТекстПУ: Стоп, Группа: Слово управления, биты с 1 по 1: 0000000000000010b -(long)(&cmd.all), //[2502h.03h], Название: Сбросить состояние Аварии, ТекстПУ: СбрАвр, Группа: Слово управления, биты с 2 по 2: 0000000000000100b -(long)(&cmd.all), //[2502h.04h], Название: Слово управления CAN, ТекстПУ: КмдCAN, Группа: Слово управления -(long)(&drv_interface.req_data), //[2506h.01h], Название: Таймаут потери связи, ТекстПУ: OfflineCounterMax, Группа: ВНЕ ГРУПП -(long)(&drv_interface.ans_data), //[2506h.02h], Название: Счетчик потери связи, ТекстПУ: OfflineCounter, Группа: ВНЕ ГРУПП -(long)(&drv_interface.data_Low), //[2506h.03h], Название: data_Low, ТекстПУ: data_L, Группа: ВНЕ ГРУПП -(long)(&drv_interface.data_High), //[2506h.04h], Название: data_High, ТекстПУ: data_H, Группа: ВНЕ ГРУПП -(long)(&RTCclock.packed_time), //[250Fh.00h], Название: Часы реального времени, ТекстПУ: RTC, Группа: Наблюдаемые -(long)(&sm_prot.Main_ErrorCode), //[2532h.01h], Название: Код аварии ARM, ТекстПУ: Код аварии ARM, Группа: Рег. тока якоря, биты с 0 по 7: 0000000011111111b -(long)(&sm_prot.Main_ErrorCode), //[2532h.02h], Название: Расширение кода аварии, ТекстПУ: Авр+, Группа: Рег. тока якоря, биты с 8 по 15: 1111111100000000b -(long)(&sm_prot.Main_Flags), //[2532h.03h], Название: Системный объект, ТекстПУ: System, Группа: Рег. тока якоря, биты с 0 по 0: 0000000000000001b -(long)(&disp_group_number), //[2534h.01h], Название: Номер груп для пульта управления, ТекстПУ: № гр ПУ, Группа: CAN -(long)(&VendorToken), //[2600h.01h], Название: VendorToken, ТекстПУ: VendorToken, Группа: ВНЕ ГРУПП -(long)(&drv_status.all), //[3000h.00h], Название: Статус преобразователя, ТекстПУ: Статус, Группа: ВНЕ ГРУПП, биты с 0 по 5: 0000000000111111b -(long)(&msCounter), //[3100h.01h], Название: Счётчик прерываний 1 кГц, ТекстПУ: Сч.прерыв.1 кГц, Группа: Счетчики -(long)(&FastCounter), //[3100h.02h], Название: Счётчик прерываний 10 кГц, ТекстПУ: Сч.прерыв.10 кГц, Группа: Счетчики -(long)(&LoopCounter), //[3100h.03h], Название: BackgroundCounter, ТекстПУ: BackgroundCounter, Группа: Счетчики -(long)(&TIsr10), //[3100h.04h], Название: T_10кГц, ТекстПУ: T_10кГц, Группа: Счетчики -(long)(&TIsr1), //[3100h.05h], Название: T_1кГц, ТекстПУ: T_1кГц, Группа: Счетчики -(long)(&rmp.T), //[5000h.01h], Название: T разгона до номинала, ТекстПУ: rmpT, Группа: ЗИ -(long)(&rmp.input), //[5000h.02h], Название: Вход ЗИ, ТекстПУ: ВходЗИ, Группа: ЗИ -(long)(&rmp.output), //[5000h.03h], Название: Выход ЗИ, ТекстПУ: ВыходЗИ, Группа: ЗИ -(long)(&pid_id.pid_ref_reg3), //[5100h.01h], Название: Задание, ТекстПУ: Зад-е, Группа: Рег. тока Id -(long)(&pid_id.pid_fdb_reg3), //[5100h.02h], Название: Обратная связь, ТекстПУ: Обр.Св, Группа: Рег. тока Id -(long)(&pid_id.Kp_reg3), //[5100h.03h], Название: Пропорц. коэфф. Kp, ТекстПУ: Kp, Группа: Рег. тока Id -(long)(&pid_id.pid_out_max), //[5100h.04h], Название: Максимум выхода, ТекстПУ: Max, Группа: Рег. тока Id -(long)(&pid_id.pid_out_min), //[5100h.05h], Название: Минимум выхода, ТекстПУ: Min, Группа: Рег. тока Id -(long)(&pid_id.Ki_reg3), //[5100h.06h], Название: Интегральный коэфф. Ki, ТекстПУ: Ki, Группа: Рег. тока Id -(long)(&pid_id.Kd_reg3), //[5100h.07h], Название: Дифф. коэфф. Kd, ТекстПУ: Kd, Группа: Рег. тока Id -(long)(&pid_id.Kc_reg3), //[5100h.08h], Название: Интегр.корректир.коэффициент, ТекстПУ: Kc, Группа: Рег. тока Id -(long)(&pid_id.e_reg3), //[5100h.09h], Название: Ошибка рассогласования сигналов, ТекстПУ: Ошибка, Группа: Рег. тока Id -(long)(&pid_id.pid_out_reg3), //[5100h.0Ah], Название: Выход регулятора, ТекстПУ: Выход, Группа: Рег. тока Id -(long)(&pid_id.up_reg3), //[5100h.0Bh], Название: Вых.Пропорц., ТекстПУ: Вых.Пропорц., Группа: Рег. тока Id -(long)(&pid_id.ui_reg3), //[5100h.0Ch], Название: Вых.Интегр., ТекстПУ: Вых.Интегр., Группа: Рег. тока Id -(long)(&pid_id.ud_reg3), //[5100h.0Dh], Название: Вых.Диффер., ТекстПУ: Вых.Диффер., Группа: Рег. тока Id -(long)(&pid_spd.pid_ref_reg3), //[5101h.01h], Название: Задание, ТекстПУ: pisref, Группа: Рег. скорости -(long)(&pid_spd.pid_fdb_reg3), //[5101h.02h], Название: Обратная связь, ТекстПУ: pisfbd, Группа: Рег. скорости -(long)(&pid_spd.Kp_reg3), //[5101h.03h], Название: Пропорц. коэфф. Kp, ТекстПУ: Kp, Группа: Рег. скорости -(long)(&pid_spd.pid_out_max), //[5101h.04h], Название: Максимум выхода, ТекстПУ: Max, Группа: Рег. скорости -(long)(&pid_spd.pid_out_min), //[5101h.05h], Название: Минимум выхода, ТекстПУ: Min, Группа: Рег. скорости -(long)(&pid_spd.Ki_reg3), //[5101h.06h], Название: Интегральный коэфф. Ki, ТекстПУ: Ki, Группа: Рег. скорости -(long)(&pid_spd.Kd_reg3), //[5101h.07h], Название: Дифф. коэфф. Kd, ТекстПУ: pisKd, Группа: Рег. скорости -(long)(&pid_spd.Kc_reg3), //[5101h.08h], Название: Интегр.корректир.коэффициент, ТекстПУ: Kc, Группа: Рег. скорости -(long)(&pid_spd.e_reg3), //[5101h.09h], Название: Ошибка рассогласования сигналов, ТекстПУ: Ошибка, Группа: Рег. скорости -(long)(&pid_spd.pid_out_reg3), //[5101h.0Ah], Название: Выход регулятора, ТекстПУ: pisout, Группа: Рег. скорости -(long)(&pid_spd.up_reg3), //[5101h.0Bh], Название: Вых.Пропорц., ТекстПУ: Вых.Пропорц., Группа: Рег. скорости -(long)(&pid_spd.ui_reg3), //[5101h.0Ch], Название: Вых.Интегр., ТекстПУ: Вых.Интегр., Группа: Рег. скорости -(long)(&pid_spd.ud_reg3), //[5101h.0Dh], Название: Вых.Диффер., ТекстПУ: Вых.Диффер., Группа: Рег. скорости -(long)(&pid_spd.saterr_reg3), //[5101h.0Eh], Название: Превышение насыщения, ТекстПУ: Прев. насыщ, Группа: Рег. скорости -(long)(&pid_iq.pid_ref_reg3), //[5102h.01h], Название: Задание, ТекстПУ: Зад-ие, Группа: Рег. тока Iq -(long)(&pid_iq.pid_fdb_reg3), //[5102h.02h], Название: Обратная связь, ТекстПУ: Обр.Св, Группа: Рег. тока Iq -(long)(&pid_iq.Kp_reg3), //[5102h.03h], Название: Пропорц. коэфф. Kp, ТекстПУ: Kp, Группа: Рег. тока Iq -(long)(&pid_iq.pid_out_max), //[5102h.04h], Название: Максимум выхода, ТекстПУ: Max, Группа: Рег. тока Iq -(long)(&pid_iq.pid_out_min), //[5102h.05h], Название: Минимум выхода, ТекстПУ: Min, Группа: Рег. тока Iq -(long)(&pid_iq.Ki_reg3), //[5102h.06h], Название: Интегральный коэфф. Ki, ТекстПУ: Ki, Группа: Рег. тока Iq -(long)(&pid_iq.Kd_reg3), //[5102h.07h], Название: Дифф. коэфф. Kd, ТекстПУ: Kd, Группа: Рег. тока Iq -(long)(&pid_iq.Kc_reg3), //[5102h.08h], Название: Интегр.корректир.коэффициент, ТекстПУ: Kc, Группа: Рег. тока Iq -(long)(&pid_iq.e_reg3), //[5102h.09h], Название: Ошибка рассогласования сигналов, ТекстПУ: Ошибка, Группа: Рег. тока Iq -(long)(&pid_iq.pid_out_reg3), //[5102h.0Ah], Название: Выход регулятора, ТекстПУ: Выход, Группа: Рег. тока Iq -(long)(&pid_iq.up_reg3), //[5102h.0Bh], Название: Вых.Пропорц., ТекстПУ: Вых.Пропорц., Группа: Рег. тока Iq -(long)(&pid_iq.ui_reg3), //[5102h.0Ch], Название: Вых.Интегр., ТекстПУ: Вых.Интегр., Группа: Рег. тока Iq -(long)(&pid_iq.ud_reg3), //[5102h.0Dh], Название: Вых.Диффер., ТекстПУ: Вых.Диффер., Группа: Рег. тока Iq -(long)(&pid_pos.pid_ref_reg3), //[5103h.01h], Название: Задание, ТекстПУ: pisref, Группа: Рег. положения -(long)(&pid_pos.pid_ref_reg3), //[5103h.02h], Название: Задание, ТекстПУ: pisref, Группа: Рег. положения -(long)(&pid_pos.pid_fdb_reg3), //[5103h.03h], Название: Обратная связь, ТекстПУ: pisfbd, Группа: Рег. положения -(long)(&pid_pos.pid_fdb_reg3), //[5103h.04h], Название: Обратная связь, ТекстПУ: pisfbd, Группа: Рег. положения -(long)(&pid_pos.Kp_reg3), //[5103h.05h], Название: Пропорц. коэфф. Kp, ТекстПУ: Kp, Группа: Рег. положения -(long)(&pid_pos.pid_out_max), //[5103h.06h], Название: Максимум выхода, ТекстПУ: Max, Группа: Рег. положения -(long)(&pid_pos.pid_out_min), //[5103h.07h], Название: Минимум выхода, ТекстПУ: Min, Группа: Рег. положения -(long)(&pid_pos.Ki_reg3), //[5103h.08h], Название: Интегральный коэфф. Ki, ТекстПУ: Ki, Группа: Рег. положения -(long)(&pid_pos.Kd_reg3), //[5103h.09h], Название: Дифф. коэфф. Kd, ТекстПУ: pisKd, Группа: Рег. положения -(long)(&pid_pos.DiffDelim), //[5103h.0Ah], Название: Делит. дифф. части, ТекстПУ: Делит. дифф. части, Группа: Рег. положения -(long)(&pid_pos.Kf_d), //[5103h.0Bh], Название: Коэф. фильтра, ТекстПУ: Коэф. фильтра, Группа: Рег. положения -(long)(&pid_pos.Kc_reg3), //[5103h.0Ch], Название: Интегр.корректир.коэффициент, ТекстПУ: Kc, Группа: Рег. положения -(long)(&pid_pos.DeadZone), //[5103h.0Dh], Название: Мертвая зона, ТекстПУ: Мертвая зона, Группа: Рег. положения -(long)(&pid_pos.e_reg3), //[5103h.0Eh], Название: Ошибка рассогласования сигналов, ТекстПУ: Ошибка, Группа: Рег. положения -(long)(&pid_spd.saterr_reg3), //[5103h.0Fh], Название: Превышение насыщения, ТекстПУ: Прев. насыщ, Группа: Рег. положения -(long)(&pid_pos.pid_out_reg3), //[5103h.10h], Название: Выход регулятора, ТекстПУ: pisout, Группа: Рег. положения -(long)(&pid_pos.up_reg3), //[5103h.11h], Название: Вых.Пропорц., ТекстПУ: Вых.Пропорц., Группа: Рег. положения -(long)(&pid_pos.ui_reg3), //[5103h.12h], Название: Вых.Интегр., ТекстПУ: Вых.Интегр., Группа: Рег. положения -(long)(&pid_pos.ud_reg3), //[5103h.13h], Название: Вых.Диффер., ТекстПУ: Вых.Диффер., Группа: Рег. положения -(long)(&pid_pos.e_reg3_filterOut), //[5103h.14h], Название: Фильтр ошибки, ТекстПУ: Фильтр ошибки, Группа: Рег. положения -(long)(&pwm.UalphaRef), //[5105h.01h], Название: UaЗад, ТекстПУ: UaЗад, Группа: ШИМ -(long)(&pwm.UbetaRef), //[5105h.02h], Название: UbЗад, ТекстПУ: UbЗад, Группа: ШИМ -(long)(&pwm.U_lim), //[5105h.03h], Название: U_огр, ТекстПУ: U_огр, Группа: ШИМ -(long)(&pwm.GammaA), //[5105h.04h], Название: GammaA, ТекстПУ: GmA, Группа: ШИМ -(long)(&pwm.GammaB), //[5105h.05h], Название: GammaB, ТекстПУ: GmB, Группа: ШИМ -(long)(&pwm.GammaC), //[5105h.06h], Название: GammaC, ТекстПУ: GmC, Группа: ШИМ -(long)(&pwm.k_pwm), //[5105h.07h], Название: TPWM, ТекстПУ: TPWM, Группа: ШИМ -(long)(&pwm.DeadBand), //[5105h.08h], Название: Мертвое время (мкс), ТекстПУ: Мерт. время, Группа: ШИМ -(long)(&pwm.MinGammaLimit), //[5105h.09h], Название: Ограничение мин. скважн., ТекстПУ: GamLim, Группа: ШИМ -(long)(&pwm.UdCompK), //[5105h.0Ah], Название: Коэф. компенсации Ud, ТекстПУ: UdКомпK, Группа: ШИМ -(long)(&pwm.UdCompEnable), //[5105h.0Bh], Название: Компенсация Ud, ТекстПУ: UdКомп, Группа: ШИМ, биты с 0 по 0: 0000000000000001b -(long)(&pwm.PWM_type), //[5105h.0Ch], Название: Тип ШИМ, ТекстПУ: ТипШИМ, Группа: ШИМ -(long)(&pwm.ULimitation), //[5105h.0Dh], Название: ULimitation, ТекстПУ: ULimitation, Группа: ШИМ -(long)(&pwm.Frequency), //[5105h.0Eh], Название: Частота ШИМ, ТекстПУ: Fшим, Группа: ШИМ -(long)(&pwm.sector), //[5105h.0Fh], Название: Сектор, ТекстПУ: Сектор, Группа: ШИМ -(long)(&pwm.U_mag), //[5105h.10h], Название: U_ампл, ТекстПУ: U_ампл, Группа: ШИМ -(long)(&pwm.PDP_Fault), //[5105h.11h], Название: Флаги аварий, ТекстПУ: F_bits, Группа: ШИМ -(long)(&sm_ctrl.state), //[510Bh.01h], Название: sm_state, ТекстПУ: smstat, Группа: ДА sm_ctrl -(long)(&drv_status_code), //[510Bh.02h], Название: drv_status_code, ТекстПУ: stcode, Группа: ДА sm_ctrl, биты с 0 по 7: 0000000011111111b -(long)(&sm_prot.bit_fault1), //[510Eh.01h], Название: Флаги аварий 1, ТекстПУ: bitF_1, Группа: Защиты -(long)(&sm_prot.bit_fault2), //[510Eh.02h], Название: Флаги аварий 2, ТекстПУ: bitF_2, Группа: Защиты -(long)(&sm_prot.mask_fault1), //[510Eh.03h], Название: Маска аварий 1L, ТекстПУ: mask1L, Группа: Защиты, биты с 0 по 7: 0000000011111111b -(long)(&sm_prot.mask_fault1), //[510Eh.04h], Название: Маска аварий 1H, ТекстПУ: mask1H, Группа: Защиты, биты с 8 по 15: 1111111100000000b -(long)(&sm_prot.mask_fault2), //[510Eh.05h], Название: Маска аварий 2L, ТекстПУ: mask2L, Группа: Защиты, биты с 0 по 7: 0000000011111111b -(long)(&sm_prot.mask_fault2), //[510Eh.06h], Название: Маска аварий 2H, ТекстПУ: mask2H, Группа: Защиты, биты с 8 по 15: 1111111100000000b -(long)(&sm_prot.Imax_protect), //[510Eh.07h], Название: Максимальный ток, ТекстПУ: Макс.Ток, Группа: Защиты -(long)(&sm_prot.Umax_protect), //[510Eh.08h], Название: Максимальное напряжение, ТекстПУ: Ud_max, Группа: Защиты -(long)(&sm_prot.Umin_protect), //[510Eh.09h], Название: Минимальное напряжение, ТекстПУ: Ud_min, Группа: Защиты -(long)(&sm_prot.speed_max), //[510Eh.0Ah], Название: Максимальная скорость, ТекстПУ: speed_max, Группа: Защиты -(long)(&sm_prot.T_max), //[510Eh.0Bh], Название: Максимальная температура, ТекстПУ: t_max, Группа: Защиты -(long)(&refs.speed_ref), //[5112h.01h], Название: Скорость, ТекстПУ: Скор_з, Группа: Задания -(long)(&refs.Iq_ref), //[5112h.02h], Название: Макс. ток ВУ, ТекстПУ: ТокСТз, Группа: Задания -(long)(&refs.i_flux_ref), //[5112h.03h], Название: Ток удержания, ТекстПУ: ТокУПз, Группа: Задания -(long)(&refs.theta_elec), //[5112h.04h], Название: theta_elec, ТекстПУ: элекУг, Группа: Задания -(long)(&refs.uf_ref), //[5112h.05h], Название: Заданное напряжение ОВ, ТекстПУ: Uf_ref, Группа: Задания -(long)(&drv_params.p), //[5113h.01h], Название: Число пар полюсов, ТекстПУ: ПарПол, Группа: Базов. парам -(long)(&drv_params.I_nom), //[5113h.02h], Название: Номинальный ток, ТекстПУ: IпчНом, Группа: Базов. парам -(long)(&drv_params.U_nom), //[5113h.03h], Название: Номинальное напряжение фазн., ТекстПУ: Uф_ном, Группа: Базов. парам -(long)(&drv_params.speed_nom), //[5113h.04h], Название: Номинальная скорость, ТекстПУ: СкоростьНом, Группа: Базов. парам -(long)(&drv_params.Udc_nom), //[5113h.05h], Название: Номинальное напряжение ЗПТ, ТекстПУ: UdcНом, Группа: Базов. парам -(long)(&drv_params.Rs), //[5113h.06h], Название: Rs, ТекстПУ: Rs, Группа: Базов. парам -(long)(&drv_params.Ls), //[5113h.07h], Название: Ls, ТекстПУ: Ls, Группа: Базов. парам -(long)(&drv_params.freq_nom), //[5113h.08h], Название: Номинальная частота, ТекстПУ: Ном.част., Группа: Базов. парам -(long)(&drv_params.sens_type), //[5113h.09h], Название: Тип датчика положения, ТекстПУ: Sens_type, Группа: Базов. парам, биты с 0 по 2: 0000000000000111b -(long)(&sw.HardwareType), //[5114h.01h], Название: Тип аппаратной части, ТекстПУ: HardwareType, Группа: Настройки СУ, биты с 0 по 7: 0000000011111111b -(long)(&sm_ctrl.run_mode), //[5114h.02h], Название: Режим работы, ТекстПУ: РежРаб, Группа: Настройки СУ -(long)(&sw.recuperation_ena), //[5114h.03h], Название: Рекуперация, ТекстПУ: Рекупр, Группа: Настройки СУ -(long)(&sw.AutoOffset), //[5114h.04h], Название: АЦП авто смещ., ТекстПУ: АЦПсмещ, Группа: Настройки СУ -(long)(&sw.Reboot), //[5114h.05h], Название: Перезагрузка, ТекстПУ: Перезагрузка, Группа: Настройки СУ -(long)(&sw.excitation_ena), //[5114h.06h], Название: Возбудитель, ТекстПУ: Возб, Группа: Настройки СУ -(long)(&adc.Imeas_a_gain), //[5116h.01h], Название: Коэффициент тока фазы А, ТекстПУ: IaУсил, Группа: АЦП -(long)(&adc.Imeas_a_offset), //[5116h.02h], Название: Смещение тока фазы А, ТекстПУ: IaСмещ, Группа: АЦП -(long)(&adc.Imeas_a), //[5116h.03h], Название: Ток фазы А, ТекстПУ: Ia_мгн, Группа: АЦП -(long)(&adc.Imeas_b_gain), //[5116h.04h], Название: Коэффициент тока фазы В, ТекстПУ: IbУсил, Группа: АЦП -(long)(&adc.Imeas_b_offset), //[5116h.05h], Название: Смещение тока фазы В, ТекстПУ: IbСмещ, Группа: АЦП -(long)(&adc.Imeas_b), //[5116h.06h], Название: Ток фазы В, ТекстПУ: Ib_мгн, Группа: АЦП -(long)(&adc.Imeas_c_gain), //[5116h.07h], Название: Коэффициент тока фазы C, ТекстПУ: IcУсил, Группа: АЦП -(long)(&adc.Imeas_c_offset), //[5116h.08h], Название: Смещение тока фазы C, ТекстПУ: IcСмещ, Группа: АЦП -(long)(&adc.Imeas_c), //[5116h.09h], Название: Ток фазы С, ТекстПУ: Ic_мгн, Группа: АЦП -(long)(&adc.Udc_meas_gain), //[5116h.0Ah], Название: Коэффициент напряжения ЗПТ, ТекстПУ: UdУсил, Группа: АЦП -(long)(&adc.Udc_meas_offset), //[5116h.0Bh], Название: Смещение напряж. ЗПТ, ТекстПУ: Udсмещ, Группа: АЦП -(long)(&adc.Udc_meas), //[5116h.0Ch], Название: Напряжение ЗПТ, ТекстПУ: Ud, Группа: АЦП -(long)(&adc.T_meas_gain), //[5116h.0Dh], Название: Коэффициент температуры, ТекстПУ: t_gain, Группа: АЦП -(long)(&adc.T_meas), //[5116h.0Eh], Название: Температура, ТекстПУ: t, Группа: АЦП -(long)(&vhz.freq), //[511Ah.01h], Название: Выходная частота, ТекстПУ: F_вых, Группа: Кривая U-f -(long)(&vhz.vout), //[511Ah.02h], Название: Выходное напряжение, ТекстПУ: U_вых, Группа: Кривая U-f -(long)(&vhz.FL), //[511Ah.03h], Название: Нулевая опроная частота, ТекстПУ: f [0], Группа: Кривая U-f -(long)(&vhz.Vmin), //[511Ah.04h], Название: Нулевое опорное напряжение, ТекстПУ: U [0], Группа: Кривая U-f -(long)(&vhz.FH), //[511Ah.05h], Название: Первая опорная частота, ТекстПУ: f [1], Группа: Кривая U-f -(long)(&vhz.Vmax), //[511Ah.06h], Название: Первое опорное напряжение, ТекстПУ: U [1], Группа: Кривая U-f -(long)(&vhz.Fmax), //[511Ah.07h], Название: Максимальная частота, ТекстПУ: f max, Группа: Кривая U-f -(long)(&cur_par.speed), //[5138h.01h], Название: Скорость, ТекстПУ: скор, Группа: Наблюдаемые -(long)(&cur_par.power), //[5138h.02h], Название: Акт. мощность, ТекстПУ: АктМощ, Группа: Наблюдаемые -(long)(&cur_par.Is), //[5138h.03h], Название: Ток статора, ТекстПУ: ТокСт, Группа: Наблюдаемые -(long)(&cur_par.ThetaRefCurr), //[5138h.04h], Название: ЭлУголЗад, ТекстПУ: ЭлУголЗад, Группа: Наблюдаемые -(long)(&cur_par.ThetaCurr), //[5138h.05h], Название: ЭлУгол, ТекстПУ: ЭлУгол, Группа: Наблюдаемые -(long)(&cur_par.IsRef), //[5138h.06h], Название: Ток статора зад, ТекстПУ: ТокСтЗад, Группа: Наблюдаемые -(long)(&global_time.PowerOn_time_min), //[5138h.07h], Название: Время запитанного состояния, мин, ТекстПУ: Power On Time, Группа: Наблюдаемые -(long)(&global_time.operational_time_min), //[5138h.08h], Название: Вреря работы привода, мин, ТекстПУ: Work Time, Группа: Наблюдаемые -(long)(&dlog.mode_reset), //[5150h.01h], Название: dlog.mode_reset, ТекстПУ: mode, Группа: dlog -(long)(&dlog.control), //[5150h.02h], Название: dlog.control, ТекстПУ: dlcont, Группа: dlog -(long)(&dlog.ind_subind1), //[5150h.03h], Название: dlog.ind_subind1, ТекстПУ: dlisi1, Группа: dlog -(long)(&dlog.ind_subind2), //[5150h.04h], Название: dlog.ind_subind2, ТекстПУ: dlisi2, Группа: dlog -(long)(&dlog.ind_subind3), //[5150h.05h], Название: dlog.ind_subind3, ТекстПУ: dlisi3, Группа: dlog -(long)(&dlog.ind_subind4), //[5150h.06h], Название: dlog.ind_subind4, ТекстПУ: dlisi4, Группа: dlog -(long)(&dlog.StartBits), //[5150h.07h], Название: StartBitL, ТекстПУ: StrtBL, Группа: dlog, биты с 0 по 7: 0000000011111111b -(long)(&dlog.StartBits), //[5150h.08h], Название: StartBitH, ТекстПУ: StrtBH, Группа: dlog, биты с 8 по 15: 1111111100000000b -(long)(&dlog.OneShotOperation), //[5150h.09h], Название: OneShotOperation, ТекстПУ: OneShotOp, Группа: dlog, биты с 0 по 0: 0000000000000001b -(long)(&dlog.trig_shift), //[5150h.0Ah], Название: Количество точек предыстории, ТекстПУ: N предыст., Группа: dlog -(long)(&dlog.next_value_var), //[5151h.00h], Название: dlog.next_value_var, ТекстПУ: dlnval, Группа: ВНЕ ГРУПП -(long)(&posspeedEqep.resol), //[5152h.01h], Название: Кол-во периодов, ТекстПУ: Кол-во периодов, Группа: ДПР-Энкодер -(long)(&posspeedEqep.Posspeed_CTL.all), //[5152h.02h], Название: Наличие репера, ТекстПУ: Наличие репера, Группа: ДПР-Энкодер, биты с 2 по 2: 0000000000000100b -(long)(&posspeedEqep.SpeedCalcType), //[5152h.03h], Название: Рассчитывать скорость программно, ТекстПУ: SpeedCalcType, Группа: ДПР-Энкодер -(long)(&posspeedEqep.AngleOffset), //[5152h.04h], Название: СмещУгол, ТекстПУ: СмещУг, Группа: ДПР-Энкодер -(long)(&posspeedEqep.Poscnt_res), //[5152h.05h], Название: Механическ.угол в метках, ТекстПУ: Механическ.угол в ме, Группа: ДПР-Энкодер -(long)(&posspeedEqep.Poscnt_res16), //[5152h.06h], Название: Механическ.угол в метках, ТекстПУ: Механическ.угол в ме, Группа: ДПР-Энкодер -(long)(&posspeedEqep.speed_elec), //[5152h.07h], Название: Скорость , ТекстПУ: Скорость, Группа: ДПР-Энкодер -(long)(&posspeedEqep.theta_elec), //[5152h.08h], Название: Угол. электр., ТекстПУ: Угол. электр., Группа: ДПР-Энкодер -(long)(&posspeedEqep.theta_mech), //[5152h.09h], Название: Угол мех., ТекстПУ: Угол мех., Группа: ДПР-Энкодер -(long)(&posspeedEqep.Posspeed_CTL.all), //[5152h.0Ah], Название: Команда иниц., ТекстПУ: Команда иниц., Группа: ДПР-Энкодер, биты с 4 по 4: 0000000000010000b -(long)(&posspeedEqep.speed_filter.T), //[5152h.0Bh], Название: К быстродействия фильтра скорости, ТекстПУ: Кф. скорости, Группа: ДПР-Энкодер -(long)(&posspeedEqep.Posspeed_FLG1.all), //[5152h.0Ch], Название: Posspeed_FLG1, ТекстПУ: Posspeed_FLG1, Группа: ДПР-Энкодер -(long)(&posspeedEqep.GPIOsValue), //[5152h.0Dh], Название: GPIOsValue, ТекстПУ: GPIOsValue, Группа: ДПР-Энкодер -(long)(&posspeedEqep.UPPS_forWatch), //[5152h.0Eh], Название: UPPS, ТекстПУ: UPPS, Группа: ДПР-Энкодер -(long)(&posspeedEqep.Qcprdlat_tmp), //[5152h.0Fh], Название: QCPRD, ТекстПУ: QCPRD, Группа: ДПР-Энкодер -(long)(&posspeedEqep.Qcprdlat16_tmp), //[5152h.10h], Название: QCPRD, ТекстПУ: QCPRD, Группа: ДПР-Энкодер -(long)(&posspeedEqep.QEPSTS), //[5152h.11h], Название: QEPSTS, ТекстПУ: QEPSTS, Группа: ДПР-Энкодер -(long)(&posspeedEqep.RevolutionCounter), //[5152h.12h], Название: Число оборотов, ТекстПУ: revolCounter, Группа: ДПР-Энкодер -(long)(&posspeedEqep.Poscnt_resContinouosInt8), //[5152h.13h], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-Энкодер -(long)(&posspeedEqep.Poscnt_resContinouosInt), //[5152h.14h], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-Энкодер -(long)(&posspeedEqep.Poscnt_resContinouosLong), //[5152h.15h], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-Энкодер -(long)(&posspeedEqep.theta_mechContinouos), //[5152h.16h], Название: Угол механический не огранич., ТекстПУ: Уг.мех.не_огр, Группа: ДПР-Энкодер -(long)(&posspeedEqep.theta_elecContinouos), //[5152h.17h], Название: Угол электрический не огранич., ТекстПУ: Уг.эл.не_огр, Группа: ДПР-Энкодер -(long)(&DPReCAP.enabled), //[5155h.01h], Название: Включен, ТекстПУ: Вкл, Группа: ДПР-Холл -(long)(&DPReCAP.Angle), //[5155h.02h], Название: ЭлУгол, ТекстПУ: ЭлУгол, Группа: ДПР-Холл -(long)(&DPReCAP.speed), //[5155h.03h], Название: Скорость , ТекстПУ: Скорость, Группа: ДПР-Холл -(long)(&DPReCAP.speedMIN), //[5155h.04h], Название: Уставка Скорости, ТекстПУ: Уставка Скорости, Группа: ДПР-Холл -(long)(&DPReCAP.Angle6), //[5155h.05h], Название: ЭлУгол6, ТекстПУ: ЭлУгол6, Группа: ДПР-Холл -(long)(&DPReCAP.DPReCAP_FLG1.all), //[5155h.06h], Название: Инт-полятор вкл, ТекстПУ: Инт-полятор вкл, Группа: ДПР-Холл, биты с 0 по 0: 0000000000000001b -(long)(&DPReCAP.milsecREF), //[5155h.07h], Название: Уставка обнуления скорости, ТекстПУ: Уставка обнуления ск, Группа: ДПР-Холл -(long)(&DPReCAP.speedMinREF), //[5155h.08h], Название: Скорость Мин., ТекстПУ: Скорость Мин., Группа: ДПР-Холл -(long)(&DPReCAP.CAP_WrongEdgeCnt), //[5155h.09h], Название: Ложные фронты, ТекстПУ: Ложные фронты, Группа: ДПР-Холл -(long)(&DPReCAP.HallCode), //[5155h.0Ah], Название: Дискретные входы, ТекстПУ: Входы, Группа: ДПР-Холл, биты с 0 по 2: 0000000000000111b -(long)(&DPReCAP.AngleOffset), //[5155h.0Bh], Название: СмещУгол, ТекстПУ: СмещУг, Группа: ДПР-Холл -(long)(&DPReCAP.ErrorLevel), //[5155h.0Ch], Название: Уровень помех, ТекстПУ: Уровень помех, Группа: ДПР-Холл -(long)(&DPReCAP.CAP_WrongEdgeCnt1), //[5155h.0Dh], Название: Ошибка 1 канала, ТекстПУ: Ошиб_1_к., Группа: ДПР-Холл -(long)(&DPReCAP.CAP_WrongEdgeCnt2), //[5155h.0Eh], Название: Ошибка 2 канала, ТекстПУ: Ошиб_2_к., Группа: ДПР-Холл -(long)(&DPReCAP.CAP_WrongEdgeCnt3), //[5155h.0Fh], Название: Ошибка 3 канала, ТекстПУ: Ошиб_3_к., Группа: ДПР-Холл -(long)(&DPReCAP.UserDirection), //[5155h.10h], Название: Направление вращения, ТекстПУ: НапрВр, Группа: ДПР-Холл, биты с 2 по 2: 0000000000000100b -(long)(&DPReCAP.WrongCodeCounterLimitPerSec), //[5155h.11h], Название: Макс.число ошибок ДПР, ТекстПУ: Макс.ош.ДПР, Группа: ДПР-Холл -(long)(&DPReCAP.WrongCodeCounter), //[5155h.12h], Название: Кол-во ошибок неверной последовательности , ТекстПУ: Ошибки последоват., Группа: ДПР-Холл -(long)(&CounterCAP_isr), //[5155h.13h], Название: Счётчик прерываний по приему, ТекстПУ: Счёт.Rx.Int., Группа: ДПР-Холл -(long)(&cap0_counter), //[5155h.14h], Название: Счётчик прерываний CAP1, ТекстПУ: Сч.прерыв.CAP1, Группа: ДПР-Холл -(long)(&cap1_counter), //[5155h.15h], Название: Счётчик прерываний CAP2, ТекстПУ: Сч.прерыв.CAP2, Группа: ДПР-Холл -(long)(&cap2_counter), //[5155h.16h], Название: Счётчик прерываний CAP3, ТекстПУ: Сч.прерыв.CAP3, Группа: ДПР-Холл -(long)(&SSI_Encoder.resol), //[5157h.01h], Название: Количество импульсов на оборот, ТекстПУ: qepTik, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.AngleOffset), //[5157h.02h], Название: СмещУгол, ТекстПУ: СмещУг, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.Poscnt_res), //[5157h.03h], Название: Механическ.угол в метках, ТекстПУ: Механическ.угол в ме, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.speed_elec), //[5157h.04h], Название: Скорость , ТекстПУ: Скорость, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.theta_elec), //[5157h.05h], Название: Угол. электр., ТекстПУ: Угол. электр., Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.theta_mech), //[5157h.06h], Название: Угол мех., ТекстПУ: Угол мех., Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.theta_mech_filtered), //[5157h.07h], Название: Угол мех. фильтрованный, ТекстПУ: theta_mech_filtered, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.theta_mech_filterK), //[5157h.08h], Название: К быстродействия фильтра угла, ТекстПУ: Кф. угла, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.RevolutionCounter), //[5157h.09h], Название: Число оборотов, ТекстПУ: revolCounter, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.Poscnt_resContinouosLong), //[5157h.0Ah], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.Poscnt_resContinouosInt8), //[5157h.0Bh], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.Poscnt_resContinouosInt), //[5157h.0Ch], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.theta_mechContinouos), //[5157h.0Dh], Название: Угол механический не огранич., ТекстПУ: Уг.мех.не_огр, Группа: ДПР-SSI энкодер -(long)(&SSI_Encoder.theta_elecContinouos), //[5157h.0Eh], Название: Угол электрический не огранич., ТекстПУ: Уг.эл.не_огр, Группа: ДПР-SSI энкодер -(long)(&Debug1), //[5174h.01h], Название: DebugL1, ТекстПУ: DebugL1, Группа: Для отладки -(long)(&Debug1), //[5174h.02h], Название: DebugL1, ТекстПУ: DebugL1, Группа: Для отладки -(long)(&Debug2), //[5174h.03h], Название: DebugL2, ТекстПУ: DebugL2, Группа: Для отладки -(long)(&Debug2), //[5174h.04h], Название: DebugL2, ТекстПУ: DebugL2, Группа: Для отладки -(long)(&Debug3), //[5174h.05h], Название: DebugI3, ТекстПУ: DebugI3, Группа: Для отладки -(long)(&Debug3), //[5174h.06h], Название: DebugI3, ТекстПУ: DebugI3, Группа: Для отладки -(long)(&Debug4), //[5174h.07h], Название: DebugI4, ТекстПУ: DebugI4, Группа: Для отладки -(long)(&Debug4), //[5174h.08h], Название: DebugI4, ТекстПУ: DebugI4, Группа: Для отладки -(long)(&DebugW1), //[5174h.09h], Название: DebugW1, ТекстПУ: DebugW1, Группа: Для отладки -(long)(&DebugW1), //[5174h.0Ah], Название: DebugW1, ТекстПУ: DebugW1, Группа: Для отладки -(long)(&DebugW2), //[5174h.0Bh], Название: DebugW2, ТекстПУ: DebugW2, Группа: Для отладки -(long)(&DebugW2), //[5174h.0Ch], Название: DebugW2, ТекстПУ: DebugW2, Группа: Для отладки -(long)(&DebugW3), //[5174h.0Dh], Название: DebugW3, ТекстПУ: DebugW3, Группа: Для отладки -(long)(&DebugW3), //[5174h.0Eh], Название: DebugW3, ТекстПУ: DebugW3, Группа: Для отладки -(long)(&DebugW4), //[5174h.0Fh], Название: DebugW4, ТекстПУ: DebugW4, Группа: Для отладки -(long)(&DebugW4), //[5174h.10h], Название: DebugW4, ТекстПУ: DebugW4, Группа: Для отладки -(long)(&DebugF1), //[5174h.11h], Название: DebugF1, ТекстПУ: DebugF1, Группа: Для отладки -(long)(&DebugF2), //[5174h.12h], Название: DebugF2, ТекстПУ: DebugF2, Группа: Для отладки -(long)(&DebugF3), //[5174h.13h], Название: DebugF3, ТекстПУ: DebugF3, Группа: Для отладки -(long)(&DebugF4), //[5174h.14h], Название: DebugF4, ТекстПУ: DebugF4, Группа: Для отладки -(long)(&refs.DCMspeed_ref), //[5185h.01h], Название: Задание скорости (Подч. Рег.), ТекстПУ: Зад. Скор., Группа: ДПТ Сист. Упр. -(long)(&refs.ua_ref), //[5185h.02h], Название: Заданное напряжение якоря, ТекстПУ: Ua_ref, Группа: ДПТ Сист. Упр. -(long)(&refs.uf_ref), //[5185h.03h], Название: Заданное напряжение ОВ, ТекстПУ: Uf_ref, Группа: ДПТ Сист. Упр. -(long)(&RotorObserver.Tr), //[5B04h.01h], Название: Пост. времени ротора, ТекстПУ: Tr, Группа: Наблюдатель ротора АД -(long)(&RotorObserver.FluxCurrentRatio), //[5B04h.02h], Название: Соотношение тока возб. X к току Y, ТекстПУ: FluxCurrentRatio, Группа: Наблюдатель ротора АД -(long)(&RotorObserver.FluxCurrentMin), //[5B04h.03h], Название: Минимальный ток возбуждения, ТекстПУ: FluxCurrentMin, Группа: Наблюдатель ротора АД -(long)(&RotorObserver.id), //[5B04h.04h], Название: Ток статора по оси D, ТекстПУ: IsD, Группа: Наблюдатель ротора АД -(long)(&RotorObserver.iq), //[5B04h.05h], Название: Ток статора по оси Q, ТекстПУ: IsQ, Группа: Наблюдатель ротора АД -(long)(&RotorObserver.psi_d), //[5B04h.06h], Название: Поток ротора по оси D, ТекстПУ: PsiRD, Группа: Наблюдатель ротора АД -(long)(&RotorObserver.psi_q), //[5B04h.07h], Название: Поток ротора по оси Q, ТекстПУ: PsiRQ, Группа: Наблюдатель ротора АД -(long)(&RotorObserver.theta_psi_elec), //[5B04h.08h], Название: Угол потока ротора, ТекстПУ: psiRalpha, Группа: Наблюдатель ротора АД +(long)(&co1_vars.co_deviceType), //[1000h.00h], Название: Тип устройства, ТекстПУ: Device Type, Группа: CAN +(long)(&co1_vars.co_errorRegister), //[1001h.00h], Название: Регистр ошибок, ТекстПУ: ErrReg, Группа: CAN +(long)(&co1_vars.co_deviceState), //[1002h.00h], Название: Manufacturer Status Register, ТекстПУ: DevSta, Группа: CAN +(long)(&co1_vars.co_emcyCOBID), //[1014h.00h], Название: COB-ID Emergency Object, ТекстПУ: eCOBID, Группа: CAN +(long)(&co1_vars.co_CHBT), //[1016h.01h], Название: Время ожидания сообщения Heartbeat, ТекстПУ: CHBT, Группа: CAN +(long)(&co1_vars.co_PHBT), //[1017h.00h], Название: Период генерации сообщения Heartbeat, ТекстПУ: PHBT, Группа: CAN +(long)(&co1_vars.co_vendorID), //[1018h.01h], Название: Код производителя, ТекстПУ: VendID, Группа: CAN +(long)(&co1_vars.co_productCode), //[1018h.02h], Название: Код продукта, ТекстПУ: PrCode, Группа: CAN +(long)(&co1_vars.co_revisionNumber), //[1018h.03h], Название: Номер ревизии, ТекстПУ: RevNum, Группа: CAN +(long)(&co1_vars.co_serialNumber), //[1018h.04h], Название: Серийный номер, ТекстПУ: SerNum, Группа: CAN +(long)(&co1_vars.co_csrxCOBID), //[1200h.01h], Название: COB-ID Client->Server(rx), ТекстПУ: CSRXID, Группа: CAN +(long)(&co1_vars.co_sctxCOBID), //[1200h.02h], Название: COB-ID Server->Client(tx), ТекстПУ: SCTXID, Группа: CAN +(long)(&co1_vars.co_cstxCOBID), //[1280h.01h], Название: COB-ID Client->Server(tx), ТекстПУ: CSTXID, Группа: CAN +(long)(&co1_vars.co_scrxCOBID), //[1280h.02h], Название: COB-ID Server->Client(rx), ТекстПУ: SCRXID, Группа: CAN +(long)(&co1_vars.co_ssNODEID), //[1280h.03h], Название: NODE-ID on SDO server, ТекстПУ: SDOSID, Группа: CAN +(long)(&co1_vars.co_RPDO1COBID), //[1400h.01h], Название: COB-ID for RPDO1, ТекстПУ: IRPDO1, Группа: CAN +(long)(&co1_vars.co_transType), //[1400h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_RPDO2COBID), //[1401h.01h], Название: COB-ID for RPDO2, ТекстПУ: IRPDO2, Группа: CAN +(long)(&co1_vars.co_transType), //[1401h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_RPDO3COBID), //[1402h.01h], Название: COB-ID for RPDO3, ТекстПУ: IRPDO3, Группа: CAN +(long)(&co1_vars.co_transType), //[1402h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_RPDO4COBID), //[1403h.01h], Название: COB-ID for RPDO4, ТекстПУ: IRPDO4, Группа: CAN +(long)(&co1_vars.co_transType), //[1403h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_RPDO5COBID), //[1404h.01h], Название: COB-ID for RPDO5, ТекстПУ: IRPDO5, Группа: CAN +(long)(&co1_vars.co_transType), //[1404h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_RPDO6COBID), //[1405h.01h], Название: COB-ID for RPDO6, ТекстПУ: IRPDO6, Группа: CAN +(long)(&co1_vars.co_transType), //[1405h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_RPDO7COBID), //[1406h.01h], Название: COB-ID for RPDO7, ТекстПУ: IRPDO7, Группа: CAN +(long)(&co1_vars.co_transType), //[1406h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_RPDO8COBID), //[1407h.01h], Название: COB-ID for RPDO8, ТекстПУ: IRPDO8, Группа: CAN +(long)(&co1_vars.co_transType), //[1407h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_RPDO1_1Mapping), //[1600h.01h], Название: RPDO1-1 Mapping, ТекстПУ: RPM11, Группа: CAN +(long)(&co1_vars.co_RPDO1_2Mapping), //[1600h.02h], Название: RPDO1-2 Mapping, ТекстПУ: RPM12, Группа: CAN +(long)(&co1_vars.co_RPDO1_3Mapping), //[1600h.03h], Название: RPDO1-3 Mapping, ТекстПУ: RPM13, Группа: CAN +(long)(&co1_vars.co_RPDO1_4Mapping), //[1600h.04h], Название: RPDO1-4 Mapping, ТекстПУ: RPM14, Группа: CAN +(long)(&co1_vars.co_RPDO2_1Mapping), //[1601h.01h], Название: RPDO2-1 Mapping, ТекстПУ: RPM21, Группа: CAN +(long)(&co1_vars.co_RPDO2_2Mapping), //[1601h.02h], Название: RPDO2-2 Mapping, ТекстПУ: RPM22, Группа: CAN +(long)(&co1_vars.co_RPDO2_3Mapping), //[1601h.03h], Название: RPDO2-3 Mapping, ТекстПУ: RPM23, Группа: CAN +(long)(&co1_vars.co_RPDO2_4Mapping), //[1601h.04h], Название: RPDO2-4 Mapping, ТекстПУ: RPM24, Группа: CAN +(long)(&co1_vars.co_RPDO3_1Mapping), //[1602h.01h], Название: RPDO3-1 Mapping, ТекстПУ: RPM31, Группа: CAN +(long)(&co1_vars.co_RPDO3_2Mapping), //[1602h.02h], Название: RPDO3-2 Mapping, ТекстПУ: RPM32, Группа: CAN +(long)(&co1_vars.co_RPDO3_3Mapping), //[1602h.03h], Название: RPDO3-3 Mapping, ТекстПУ: RPM33, Группа: CAN +(long)(&co1_vars.co_RPDO3_4Mapping), //[1602h.04h], Название: RPDO3-4 Mapping, ТекстПУ: RPM34, Группа: CAN +(long)(&co1_vars.co_RPDO4_1Mapping), //[1603h.01h], Название: RPDO4-1 Mapping, ТекстПУ: RPM41, Группа: CAN +(long)(&co1_vars.co_RPDO4_2Mapping), //[1603h.02h], Название: RPDO4-2 Mapping, ТекстПУ: RPM42, Группа: CAN +(long)(&co1_vars.co_RPDO4_3Mapping), //[1603h.03h], Название: RPDO4-3 Mapping, ТекстПУ: RPM43, Группа: CAN +(long)(&co1_vars.co_RPDO4_4Mapping), //[1603h.04h], Название: RPDO4-4 Mapping, ТекстПУ: RPM44, Группа: CAN +(long)(&co1_vars.co_RPDO5_1Mapping), //[1604h.01h], Название: RPDO5-1 Mapping, ТекстПУ: RPM51, Группа: CAN +(long)(&co1_vars.co_RPDO5_2Mapping), //[1604h.02h], Название: RPDO5-2 Mapping, ТекстПУ: RPM52, Группа: CAN +(long)(&co1_vars.co_RPDO5_3Mapping), //[1604h.03h], Название: RPDO5-3 Mapping, ТекстПУ: RPM53, Группа: CAN +(long)(&co1_vars.co_RPDO5_4Mapping), //[1604h.04h], Название: RPDO5-4 Mapping, ТекстПУ: RPM54, Группа: CAN +(long)(&co1_vars.co_RPDO6_1Mapping), //[1605h.01h], Название: RPDO6-1 Mapping, ТекстПУ: RPM61, Группа: CAN +(long)(&co1_vars.co_RPDO6_2Mapping), //[1605h.02h], Название: RPDO6-2 Mapping, ТекстПУ: RPM62, Группа: CAN +(long)(&co1_vars.co_RPDO6_3Mapping), //[1605h.03h], Название: RPDO6-3 Mapping, ТекстПУ: RPM63, Группа: CAN +(long)(&co1_vars.co_RPDO6_4Mapping), //[1605h.04h], Название: RPDO6-4 Mapping, ТекстПУ: RPM64, Группа: CAN +(long)(&co1_vars.co_RPDO7_1Mapping), //[1606h.01h], Название: RPDO7-1 Mapping, ТекстПУ: RPM71, Группа: CAN +(long)(&co1_vars.co_RPDO7_2Mapping), //[1606h.02h], Название: RPDO7-2 Mapping, ТекстПУ: RPM72, Группа: CAN +(long)(&co1_vars.co_RPDO7_3Mapping), //[1606h.03h], Название: RPDO7-3 Mapping, ТекстПУ: RPM73, Группа: CAN +(long)(&co1_vars.co_RPDO7_4Mapping), //[1606h.04h], Название: RPDO7-4 Mapping, ТекстПУ: RPM74, Группа: CAN +(long)(&co1_vars.co_RPDO8_1Mapping), //[1607h.01h], Название: RPDO8-1 Mapping, ТекстПУ: RPM81, Группа: CAN +(long)(&co1_vars.co_RPDO8_2Mapping), //[1607h.02h], Название: RPDO8-2 Mapping, ТекстПУ: RPM82, Группа: CAN +(long)(&co1_vars.co_RPDO8_3Mapping), //[1607h.03h], Название: RPDO8-3 Mapping, ТекстПУ: RPM83, Группа: CAN +(long)(&co1_vars.co_RPDO8_4Mapping), //[1607h.04h], Название: RPDO8-4 Mapping, ТекстПУ: RPM84, Группа: CAN +(long)(&co1_vars.co_TPDO1COBID), //[1800h.01h], Название: COB-ID for TPDO1, ТекстПУ: ITPDO1, Группа: CAN +(long)(&co1_vars.co_transType), //[1800h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_TPDO1ITime), //[1800h.03h], Название: Inhibit Time 1, ТекстПУ: ITime1, Группа: CAN +(long)(&co1_vars.co_compatEntry), //[1800h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN +(long)(&co1_vars.co_TPDO1EventTimer), //[1800h.05h], Название: Event Timer 1, ТекстПУ: EvTmr1, Группа: CAN +(long)(&co1_vars.co_TPDO2COBID), //[1801h.01h], Название: COB-ID for TPDO2, ТекстПУ: ITPDO2, Группа: CAN +(long)(&co1_vars.co_transType), //[1801h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_TPDO2ITime), //[1801h.03h], Название: Inhibit Time 2, ТекстПУ: ITime2, Группа: CAN +(long)(&co1_vars.co_compatEntry), //[1801h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN +(long)(&co1_vars.co_TPDO2EventTimer), //[1801h.05h], Название: Event Timer 2, ТекстПУ: EvTmr2, Группа: CAN +(long)(&co1_vars.co_TPDO3COBID), //[1802h.01h], Название: COB-ID for TPDO3, ТекстПУ: ITPDO3, Группа: CAN +(long)(&co1_vars.co_transType), //[1802h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_TPDO3ITime), //[1802h.03h], Название: Inhibit Time 3, ТекстПУ: ITime3, Группа: CAN +(long)(&co1_vars.co_compatEntry), //[1802h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN +(long)(&co1_vars.co_TPDO3EventTimer), //[1802h.05h], Название: Event Timer 3, ТекстПУ: EvTmr3, Группа: CAN +(long)(&co1_vars.co_TPDO4COBID), //[1803h.01h], Название: COB-ID for TPDO4, ТекстПУ: ITPDO4, Группа: CAN +(long)(&co1_vars.co_transType), //[1803h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_TPDO4ITime), //[1803h.03h], Название: Inhibit Time 4, ТекстПУ: ITime4, Группа: CAN +(long)(&co1_vars.co_compatEntry), //[1803h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN +(long)(&co1_vars.co_TPDO4EventTimer), //[1803h.05h], Название: Event Timer 4, ТекстПУ: EvTmr4, Группа: CAN +(long)(&co1_vars.co_TPDO5COBID), //[1804h.01h], Название: COB-ID for TPDO5, ТекстПУ: ITPDO5, Группа: CAN +(long)(&co1_vars.co_transType), //[1804h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_TPDO5ITime), //[1804h.03h], Название: Inhibit Time 5, ТекстПУ: ITime5, Группа: CAN +(long)(&co1_vars.co_compatEntry), //[1804h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN +(long)(&co1_vars.co_TPDO5EventTimer), //[1804h.05h], Название: Event Timer 5, ТекстПУ: EvTmr5, Группа: CAN +(long)(&co1_vars.co_TPDO6COBID), //[1805h.01h], Название: COB-ID for TPDO6, ТекстПУ: ITPDO6, Группа: CAN +(long)(&co1_vars.co_transType), //[1805h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_TPDO6ITime), //[1805h.03h], Название: Inhibit Time 6, ТекстПУ: ITime6, Группа: CAN +(long)(&co1_vars.co_compatEntry), //[1805h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN +(long)(&co1_vars.co_TPDO6EventTimer), //[1805h.05h], Название: Event Timer 6, ТекстПУ: EvTmr6, Группа: CAN +(long)(&co1_vars.co_TPDO7COBID), //[1806h.01h], Название: COB-ID for TPDO7, ТекстПУ: ITPDO7, Группа: CAN +(long)(&co1_vars.co_transType), //[1806h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_TPDO7ITime), //[1806h.03h], Название: Inhibit Time 7, ТекстПУ: ITime7, Группа: CAN +(long)(&co1_vars.co_compatEntry), //[1806h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN +(long)(&co1_vars.co_TPDO7EventTimer), //[1806h.05h], Название: Event Timer 7, ТекстПУ: EvTmr7, Группа: CAN +(long)(&co1_vars.co_TPDO8COBID), //[1807h.01h], Название: COB-ID for TPDO8, ТекстПУ: ITPDO8, Группа: CAN +(long)(&co1_vars.co_transType), //[1807h.02h], Название: Тип передачи, ТекстПУ: TransT, Группа: CAN +(long)(&co1_vars.co_TPDO8ITime), //[1807h.03h], Название: Inhibit Time 8, ТекстПУ: ITime8, Группа: CAN +(long)(&co1_vars.co_compatEntry), //[1807h.04h], Название: Compatibility Entry, ТекстПУ: CompEn, Группа: CAN +(long)(&co1_vars.co_TPDO8EventTimer), //[1807h.05h], Название: Event Timer 8, ТекстПУ: EvTmr8, Группа: CAN +(long)(&co1_vars.co_TPDO1_1Mapping), //[1A00h.01h], Название: TPDO1-1 Mapping, ТекстПУ: TPM11, Группа: CAN +(long)(&co1_vars.co_TPDO1_2Mapping), //[1A00h.02h], Название: TPDO1-2 Mapping, ТекстПУ: TPM12, Группа: CAN +(long)(&co1_vars.co_TPDO1_3Mapping), //[1A00h.03h], Название: TPDO1-3 Mapping, ТекстПУ: TPM13, Группа: CAN +(long)(&co1_vars.co_TPDO1_4Mapping), //[1A00h.04h], Название: TPDO1-4 Mapping, ТекстПУ: TPM14, Группа: CAN +(long)(&co1_vars.co_TPDO2_1Mapping), //[1A01h.01h], Название: TPDO2-1 Mapping, ТекстПУ: TPM21, Группа: CAN +(long)(&co1_vars.co_TPDO2_2Mapping), //[1A01h.02h], Название: TPDO2-2 Mapping, ТекстПУ: TPM22, Группа: CAN +(long)(&co1_vars.co_TPDO2_3Mapping), //[1A01h.03h], Название: TPDO2-3 Mapping, ТекстПУ: TPM23, Группа: CAN +(long)(&co1_vars.co_TPDO2_4Mapping), //[1A01h.04h], Название: TPDO2-4 Mapping, ТекстПУ: TPM24, Группа: CAN +(long)(&co1_vars.co_TPDO3_1Mapping), //[1A02h.01h], Название: TPDO3-1 Mapping, ТекстПУ: TPM31, Группа: CAN +(long)(&co1_vars.co_TPDO3_2Mapping), //[1A02h.02h], Название: TPDO3-2 Mapping, ТекстПУ: TPM32, Группа: CAN +(long)(&co1_vars.co_TPDO3_3Mapping), //[1A02h.03h], Название: TPDO3-3 Mapping, ТекстПУ: TPM33, Группа: CAN +(long)(&co1_vars.co_TPDO3_4Mapping), //[1A02h.04h], Название: TPDO3-4 Mapping, ТекстПУ: TPM34, Группа: CAN +(long)(&co1_vars.co_TPDO4_1Mapping), //[1A03h.01h], Название: TPDO4-1 Mapping, ТекстПУ: TPM41, Группа: CAN +(long)(&co1_vars.co_TPDO4_2Mapping), //[1A03h.02h], Название: TPDO4-2 Mapping, ТекстПУ: TPM42, Группа: CAN +(long)(&co1_vars.co_TPDO4_3Mapping), //[1A03h.03h], Название: TPDO4-3 Mapping, ТекстПУ: TPM43, Группа: CAN +(long)(&co1_vars.co_TPDO4_4Mapping), //[1A03h.04h], Название: TPDO4-4 Mapping, ТекстПУ: TPM44, Группа: CAN +(long)(&co1_vars.co_TPDO5_1Mapping), //[1A04h.01h], Название: TPDO5-1 Mapping, ТекстПУ: TPM51, Группа: CAN +(long)(&co1_vars.co_TPDO5_2Mapping), //[1A04h.02h], Название: TPDO5-2 Mapping, ТекстПУ: TPM52, Группа: CAN +(long)(&co1_vars.co_TPDO5_3Mapping), //[1A04h.03h], Название: TPDO5-3 Mapping, ТекстПУ: TPM53, Группа: CAN +(long)(&co1_vars.co_TPDO5_4Mapping), //[1A04h.04h], Название: TPDO5-4 Mapping, ТекстПУ: TPM54, Группа: CAN +(long)(&co1_vars.co_TPDO6_1Mapping), //[1A05h.01h], Название: TPDO6-1 Mapping, ТекстПУ: TPM61, Группа: CAN +(long)(&co1_vars.co_TPDO6_2Mapping), //[1A05h.02h], Название: TPDO6-2 Mapping, ТекстПУ: TPM62, Группа: CAN +(long)(&co1_vars.co_TPDO6_3Mapping), //[1A05h.03h], Название: TPDO6-3 Mapping, ТекстПУ: TPM63, Группа: CAN +(long)(&co1_vars.co_TPDO6_4Mapping), //[1A05h.04h], Название: TPDO6-4 Mapping, ТекстПУ: TPM64, Группа: CAN +(long)(&co1_vars.co_TPDO7_1Mapping), //[1A06h.01h], Название: TPDO7-1 Mapping, ТекстПУ: TPM71, Группа: CAN +(long)(&co1_vars.co_TPDO7_2Mapping), //[1A06h.02h], Название: TPDO7-2 Mapping, ТекстПУ: TPM72, Группа: CAN +(long)(&co1_vars.co_TPDO7_3Mapping), //[1A06h.03h], Название: TPDO7-3 Mapping, ТекстПУ: TPM73, Группа: CAN +(long)(&co1_vars.co_TPDO7_4Mapping), //[1A06h.04h], Название: TPDO7-4 Mapping, ТекстПУ: TPM74, Группа: CAN +(long)(&co1_vars.co_TPDO8_1Mapping), //[1A07h.01h], Название: TPDO8-1 Mapping, ТекстПУ: TPM81, Группа: CAN +(long)(&co1_vars.co_TPDO8_2Mapping), //[1A07h.02h], Название: TPDO8-2 Mapping, ТекстПУ: TPM82, Группа: CAN +(long)(&co1_vars.co_TPDO8_3Mapping), //[1A07h.03h], Название: TPDO8-3 Mapping, ТекстПУ: TPM83, Группа: CAN +(long)(&co1_vars.co_TPDO8_4Mapping), //[1A07h.04h], Название: TPDO8-4 Mapping, ТекстПУ: TPM84, Группа: CAN +(long)(&co1_vars.co_nodeID), //[2000h.00h], Название: CAN NODE-ID, ТекстПУ: NodeID, Группа: CAN +(long)(&co1_vars.co_bitRate), //[2001h.00h], Название: CAN Bit Rate, ТекстПУ: CANBR, Группа: CAN, биты с 0 по 2: 0000000000000111b +(long)(&co1_vars.co_vendorID), //[2002h.01h], Название: Код производителя, ТекстПУ: VendID, Группа: CAN +(long)(&co1_vars.co_productCode), //[2002h.02h], Название: Код продукта, ТекстПУ: PrCode, Группа: CAN +(long)(&co1_vars.co_revisionNumber), //[2002h.03h], Название: Номер ревизии, ТекстПУ: RevNum, Группа: CAN +(long)(&co1_vars.co_serialNumber), //[2002h.04h], Название: Серийный номер, ТекстПУ: SerNum, Группа: CAN +(long)(&co1_vars.co_specialData1), //[2003h.01h], Название: Special Data 1, ТекстПУ: SpDat1, Группа: CAN +(long)(&co1_vars.co_specialData2), //[2003h.02h], Название: Special Data 2, ТекстПУ: SpDat2, Группа: CAN +(long)(&co1_vars.co_specialData3), //[2003h.03h], Название: Special Data 3, ТекстПУ: SpDat3, Группа: CAN +(long)(&co1_vars.co_specialData4), //[2003h.04h], Название: Special Data 4, ТекстПУ: SpDat4, Группа: CAN +(long)(&co1_vars.co_secretCode), //[2004h.00h], Название: Secret Code, ТекстПУ: Secret, Группа: CAN +(long)(&co1_vars.co_protectBit), //[2005h.00h], Название: Protect Bit, ТекстПУ: ProtBt, Группа: CAN, биты с 0 по 0: 0000000000000001b +(long)(&co1_odHash[0]), //[2007h.01h], Название: md5_hash_0, ТекстПУ: md5_hash_0, Группа: CAN +(long)(&co1_odHash[1]), //[2007h.02h], Название: md5_hash_1, ТекстПУ: md5_hash_1, Группа: CAN +(long)(&co1_odHash[2]), //[2007h.03h], Название: md5_hash_2, ТекстПУ: md5_hash_2, Группа: CAN +(long)(&co1_odHash[3]), //[2007h.04h], Название: md5_hash_3, ТекстПУ: md5_hash_3, Группа: CAN +(long)(&co1_vars.co_heartbeatFlag0), //[2010h.01h], Название: Heartbeat Flag 0-31, ТекстПУ: HFlag0, Группа: CAN +(long)(&co1_vars.co_heartbeatFlag1), //[2010h.02h], Название: Heartbeat Flag 32-63, ТекстПУ: HFlag1, Группа: CAN +(long)(&co1_vars.co_heartbeatFlag2), //[2010h.03h], Название: Heartbeat Flag 64-95, ТекстПУ: HFlag2, Группа: CAN +(long)(&co1_vars.co_heartbeatFlag3), //[2010h.04h], Название: Heartbeat Flag 96-127, ТекстПУ: HFlag3, Группа: CAN +(long)(&co1_vars.co_heartbeatMask0), //[2011h.01h], Название: Heartbeat Mask 0-31, ТекстПУ: HMask0, Группа: CAN +(long)(&co1_vars.co_heartbeatMask1), //[2011h.02h], Название: Heartbeat Mask 32-63, ТекстПУ: HMask1, Группа: CAN +(long)(&co1_vars.co_heartbeatMask2), //[2011h.03h], Название: Heartbeat Mask 64-95, ТекстПУ: HMask2, Группа: CAN +(long)(&co1_vars.co_heartbeatMask3), //[2011h.04h], Название: Heartbeat Mask 96-127, ТекстПУ: HMask3, Группа: CAN +(long)(&co1_vars.co_heartbeatAutoStart), //[2012h.00h], Название: Heartbeat Autostart, ТекстПУ: HBASta, Группа: CAN, биты с 0 по 0: 0000000000000001b +(long)(&co1_vars.co_heartbeatAutoRecovery), //[2014h.00h], Название: Heartbeat Autorecovery, ТекстПУ: HBARec, Группа: CAN, биты с 0 по 0: 0000000000000001b +(long)(&co1_vars.co_nodeState), //[2015h.00h], Название: Состояние драйвера CAN-Open, ТекстПУ: State, Группа: CAN +(long)(&co1_vars.co_emergencyErrorCode), //[2016h.00h], Название: Emergency Error Code, ТекстПУ: EmErCo, Группа: CAN +(long)(&co1_vars.co_deviceErrorState), //[2017h.00h], Название: Device Error State, ТекстПУ: DeErSt, Группа: CAN +(long)(&co1_vars.co_ODCommand), //[2080h.01h], Название: Object Dictionary Command, ТекстПУ: ODComm, Группа: CAN +(long)(&co1_vars.co_currentODIndex), //[2080h.02h], Название: Current OD Index, ТекстПУ: ODCInd, Группа: CAN +(long)(&co1_vars.co_currentODSubIndex), //[2080h.03h], Название: Current OD Sub-Index, ТекстПУ: ODCSub, Группа: CAN +(long)(&co1_vars.co_currentODEText), //[2080h.04h], Название: Current OD Element Text, ТекстПУ: ODCTxt, Группа: CAN +(long)(&co1_vars.co_currentODEFormat), //[2080h.05h], Название: Current OD Element Format, ТекстПУ: ODCFrm, Группа: CAN +(long)(&co1_vars.co_currentODEMin), //[2080h.06h], Название: Current OD Element Min, ТекстПУ: ODCMin, Группа: CAN +(long)(&co1_vars.co_currentODEMax), //[2080h.07h], Название: Current OD Element Max, ТекстПУ: ODCMax, Группа: CAN +(long)(&co1_vars.co_currentODEDefault), //[2080h.08h], Название: Current OD Element Default, ТекстПУ: ODCDef, Группа: CAN +(long)(&co1_vars.co_currentODEMinLow), //[2080h.09h], Название: Current OD Element MinLow, ТекстПУ: ODCMiL, Группа: CAN +(long)(&co1_vars.co_currentODEMaxLow), //[2080h.0Ah], Название: Current OD Element MaxLow, ТекстПУ: ODCMaL, Группа: CAN +(long)(&co1_vars.co_currentODEDefaultLow), //[2080h.0Bh], Название: Current OD Element Default Low, ТекстПУ: ODCDeL, Группа: CAN +(long)(&co1_vars.co_currentODEAddrLow), //[2080h.0Ch], Название: Current OD Element Address, ТекстПУ: ODCAdr, Группа: CAN +(long)(&co1_vars.co_currentODEAddrLow), //[2080h.0Dh], Название: Current OD Element Address, ТекстПУ: ODCAdr, Группа: CAN +(long)(&co1_vars.co_currentODEType), //[2080h.0Eh], Название: Группа параметров, ТекстПУ: Группа, Группа: CAN +(long)(&co1_vars.co_odIndexSize), //[2081h.00h], Название: Количество индексов, ТекстПУ: КолИнд, Группа: CAN +(long)(&co1_vars.co_defaultIndex1), //[2082h.01h], Название: Default Index 1, ТекстПУ: DfInd1, Группа: CAN +(long)(&co1_vars.co_defaultIndex2), //[2082h.02h], Название: Default Index 2, ТекстПУ: DfInd2, Группа: CAN +(long)(&co1_vars.co_maskElement01), //[2083h.01h], Название: Mask Element, ТекстПУ: MskEl0, Группа: CAN, биты с 0 по 7: 0000000011111111b +(long)(&co1_vars.co_maskElement01), //[2083h.02h], Название: Mask Element, ТекстПУ: MskEl1, Группа: CAN, биты с 8 по 15: 1111111100000000b +(long)(&co1_vars.co_maskElement23), //[2083h.03h], Название: Mask Element, ТекстПУ: MskEl2, Группа: CAN, биты с 0 по 7: 0000000011111111b +(long)(&co1_vars.co_maskElement23), //[2083h.04h], Название: Mask Element, ТекстПУ: MskEl3, Группа: CAN, биты с 8 по 15: 1111111100000000b +(long)(&co1_vars.co_maskElement45), //[2083h.05h], Название: Mask Element, ТекстПУ: MskEl4, Группа: CAN, биты с 0 по 7: 0000000011111111b +(long)(&co1_vars.co_maskElement45), //[2083h.06h], Название: Mask Element, ТекстПУ: MskEl5, Группа: CAN, биты с 8 по 15: 1111111100000000b +(long)(&co1_vars.co_maskElement67), //[2083h.07h], Название: Mask Element, ТекстПУ: MskEl6, Группа: CAN, биты с 0 по 7: 0000000011111111b +(long)(&co1_vars.co_maskElement67), //[2083h.08h], Название: Mask Element, ТекстПУ: MskEl7, Группа: CAN, биты с 8 по 15: 1111111100000000b +(long)(&co1_vars.co_maskElement89), //[2083h.09h], Название: Mask Element, ТекстПУ: MskEl8, Группа: CAN, биты с 0 по 7: 0000000011111111b +(long)(&co1_vars.co_maskElement89), //[2083h.0Ah], Название: Mask Element, ТекстПУ: MskEl9, Группа: CAN, биты с 8 по 15: 1111111100000000b +(long)(&co1_vars.co_maskElementAB), //[2083h.0Bh], Название: Mask Element, ТекстПУ: MskElA, Группа: CAN, биты с 0 по 7: 0000000011111111b +(long)(&co1_vars.co_maskElementAB), //[2083h.0Ch], Название: Mask Element, ТекстПУ: MskElB, Группа: CAN, биты с 8 по 15: 1111111100000000b +(long)(&co1_vars.co_maskElementCD), //[2083h.0Dh], Название: Mask Element, ТекстПУ: MskElC, Группа: CAN, биты с 0 по 7: 0000000011111111b +(long)(&co1_vars.co_maskElementCD), //[2083h.0Eh], Название: Mask Element, ТекстПУ: MskElD, Группа: CAN, биты с 8 по 15: 1111111100000000b +(long)(&co1_vars.co_maskElementEF), //[2083h.0Fh], Название: Mask Element, ТекстПУ: MskElE, Группа: CAN, биты с 0 по 7: 0000000011111111b +(long)(&co1_vars.co_maskElementEF), //[2083h.10h], Название: Mask Element, ТекстПУ: MskElF, Группа: CAN, биты с 8 по 15: 1111111100000000b +(long)(&co1_vars.co_scaleNum0), //[2100h.01h], Название: Scale Number 0, ТекстПУ: SN0, Группа: CAN +(long)(&co1_vars.co_scaleNum0Format), //[2100h.02h], Название: Scale Number 0 Format, ТекстПУ: S0Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum0Format), //[2100h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum0Format), //[2100h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum0Format), //[2100h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum0Format), //[2100h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum1), //[2101h.01h], Название: Scale Number 1, ТекстПУ: SN1, Группа: CAN +(long)(&co1_vars.co_scaleNum1Format), //[2101h.02h], Название: Scale Number 1 Format, ТекстПУ: S1Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum1Format), //[2101h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum1Format), //[2101h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum1Format), //[2101h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum1Format), //[2101h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum2), //[2102h.01h], Название: Scale Number 2, ТекстПУ: SN2, Группа: CAN +(long)(&co1_vars.co_scaleNum2Format), //[2102h.02h], Название: Scale Number 2 Format, ТекстПУ: S2Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum2Format), //[2102h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum2Format), //[2102h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum2Format), //[2102h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum2Format), //[2102h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum3), //[2103h.01h], Название: Scale Number 3, ТекстПУ: SN3, Группа: CAN +(long)(&co1_vars.co_scaleNum3Format), //[2103h.02h], Название: Scale Number 3 Format, ТекстПУ: S3Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum3Format), //[2103h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum3Format), //[2103h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum3Format), //[2103h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum3Format), //[2103h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum4), //[2104h.01h], Название: Scale Number 4, ТекстПУ: SN4, Группа: CAN +(long)(&co1_vars.co_scaleNum4Format), //[2104h.02h], Название: Scale Number 4 Format, ТекстПУ: S4Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum4Format), //[2104h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum4Format), //[2104h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum4Format), //[2104h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum4Format), //[2104h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum5), //[2105h.01h], Название: Scale Number 5, ТекстПУ: SN5, Группа: CAN +(long)(&co1_vars.co_scaleNum5Format), //[2105h.02h], Название: Scale Number 5 Format, ТекстПУ: S5Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum5Format), //[2105h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum5Format), //[2105h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum5Format), //[2105h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum5Format), //[2105h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum6), //[2106h.01h], Название: Scale Number 6, ТекстПУ: SN6, Группа: CAN +(long)(&co1_vars.co_scaleNum6Format), //[2106h.02h], Название: Scale Number 6 Format, ТекстПУ: S6Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum6Format), //[2106h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum6Format), //[2106h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum6Format), //[2106h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum6Format), //[2106h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum7), //[2107h.01h], Название: Scale Number 7, ТекстПУ: SN7, Группа: CAN +(long)(&co1_vars.co_scaleNum7Format), //[2107h.02h], Название: Scale Number 7 Format, ТекстПУ: S7Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum7Format), //[2107h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum7Format), //[2107h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum7Format), //[2107h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum7Format), //[2107h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum8), //[2108h.01h], Название: Scale Number 8, ТекстПУ: SN8, Группа: CAN +(long)(&co1_vars.co_scaleNum8Format), //[2108h.02h], Название: Scale Number 8 Format, ТекстПУ: S8Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum8Format), //[2108h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum8Format), //[2108h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum8Format), //[2108h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum8Format), //[2108h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum9), //[2109h.01h], Название: Scale Number 9, ТекстПУ: SN9, Группа: CAN +(long)(&co1_vars.co_scaleNum9Format), //[2109h.02h], Название: Scale Number 9 Format, ТекстПУ: S9Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum9Format), //[2109h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum9Format), //[2109h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum9Format), //[2109h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum9Format), //[2109h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNumA), //[210Ah.01h], Название: Scale Number A, ТекстПУ: SNA, Группа: CAN +(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.02h], Название: Scale Number A Format, ТекстПУ: SAFmt, Группа: CAN +(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNumAFormat), //[210Ah.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNumB), //[210Bh.01h], Название: Scale Number B, ТекстПУ: SNB, Группа: CAN +(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.02h], Название: Scale Number B Format, ТекстПУ: SBFmt, Группа: CAN +(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNumBFormat), //[210Bh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNumC), //[210Ch.01h], Название: Scale Number C, ТекстПУ: SNC, Группа: CAN +(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.02h], Название: Scale Number C Format, ТекстПУ: SCFmt, Группа: CAN +(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNumCFormat), //[210Ch.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNumD), //[210Dh.01h], Название: Scale Number D, ТекстПУ: SND, Группа: CAN +(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.02h], Название: Scale Number D Format, ТекстПУ: SDFmt, Группа: CAN +(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNumDFormat), //[210Dh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNumE), //[210Eh.01h], Название: Scale Number E, ТекстПУ: SNE, Группа: CAN +(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.02h], Название: Scale Number E Format, ТекстПУ: SEFmt, Группа: CAN +(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNumEFormat), //[210Eh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNumF), //[210Fh.01h], Название: Scale Number F, ТекстПУ: SNF, Группа: CAN +(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.02h], Название: Scale Number F Format, ТекстПУ: SFFmt, Группа: CAN +(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNumFFormat), //[210Fh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum10), //[2110h.01h], Название: Scale Number 10, ТекстПУ: SN10, Группа: CAN +(long)(&co1_vars.co_scaleNum10Format), //[2110h.02h], Название: Scale Number 10 Format, ТекстПУ: S10Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum10Format), //[2110h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum10Format), //[2110h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum10Format), //[2110h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum10Format), //[2110h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum11), //[2111h.01h], Название: Scale Number 11, ТекстПУ: SN11, Группа: CAN +(long)(&co1_vars.co_scaleNum11Format), //[2111h.02h], Название: Scale Number 11 Format, ТекстПУ: S11Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum11Format), //[2111h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum11Format), //[2111h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum11Format), //[2111h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum11Format), //[2111h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum12), //[2112h.01h], Название: Scale Number 12, ТекстПУ: SN12, Группа: CAN +(long)(&co1_vars.co_scaleNum12Format), //[2112h.02h], Название: Scale Number 12 Format, ТекстПУ: S12Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum12Format), //[2112h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum12Format), //[2112h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum12Format), //[2112h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum12Format), //[2112h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum13), //[2113h.01h], Название: Scale Number 13, ТекстПУ: SN13, Группа: CAN +(long)(&co1_vars.co_scaleNum13Format), //[2113h.02h], Название: Scale Number 13 Format, ТекстПУ: S13Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum13Format), //[2113h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum13Format), //[2113h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum13Format), //[2113h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum13Format), //[2113h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum14), //[2114h.01h], Название: Scale Number 14, ТекстПУ: SN14, Группа: CAN +(long)(&co1_vars.co_scaleNum14Format), //[2114h.02h], Название: Scale Number 14 Format, ТекстПУ: S14Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum14Format), //[2114h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum14Format), //[2114h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum14Format), //[2114h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum14Format), //[2114h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum15), //[2115h.01h], Название: Scale Number 15, ТекстПУ: SN15, Группа: CAN +(long)(&co1_vars.co_scaleNum15Format), //[2115h.02h], Название: Scale Number 15Format, ТекстПУ: S15Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum15Format), //[2115h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum15Format), //[2115h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum15Format), //[2115h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum15Format), //[2115h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum16), //[2116h.01h], Название: Scale Number 16, ТекстПУ: SN16, Группа: CAN +(long)(&co1_vars.co_scaleNum16Format), //[2116h.02h], Название: Scale Number 16Format, ТекстПУ: S16Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum16Format), //[2116h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum16Format), //[2116h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum16Format), //[2116h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum16Format), //[2116h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum17), //[2117h.01h], Название: Scale Number 17, ТекстПУ: SN17, Группа: CAN +(long)(&co1_vars.co_scaleNum17Format), //[2117h.02h], Название: Scale Number 17Format, ТекстПУ: S17Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum17Format), //[2117h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum17Format), //[2117h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum17Format), //[2117h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum17Format), //[2117h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum18), //[2118h.01h], Название: Scale Number 18, ТекстПУ: SN18, Группа: CAN +(long)(&co1_vars.co_scaleNum18Format), //[2118h.02h], Название: Scale Number 18Format, ТекстПУ: S18Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum18Format), //[2118h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum18Format), //[2118h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum18Format), //[2118h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum18Format), //[2118h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum19), //[2119h.01h], Название: Scale Number 19, ТекстПУ: SN19, Группа: CAN +(long)(&co1_vars.co_scaleNum19Format), //[2119h.02h], Название: Scale Number 19Format, ТекстПУ: S19Fmt, Группа: CAN +(long)(&co1_vars.co_scaleNum19Format), //[2119h.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum19Format), //[2119h.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum19Format), //[2119h.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum19Format), //[2119h.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum1A), //[211Ah.01h], Название: Scale Number 1A, ТекстПУ: SN1A, Группа: CAN +(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.02h], Название: Scale Number 1AFormat, ТекстПУ: S1AFmt, Группа: CAN +(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum1AFormat), //[211Ah.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum1B), //[211Bh.01h], Название: Scale Number 1B, ТекстПУ: SN1B, Группа: CAN +(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.02h], Название: Scale Number 1BFormat, ТекстПУ: S1BFmt, Группа: CAN +(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum1BFormat), //[211Bh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum1C), //[211Ch.01h], Название: Scale Number 1C, ТекстПУ: SN1C, Группа: CAN +(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.02h], Название: Scale Number 1C Format, ТекстПУ: S1CFmt, Группа: CAN +(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum1CFormat), //[211Ch.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&co1_vars.co_scaleNum1D), //[211Dh.01h], Название: Scale Number 1D, ТекстПУ: SN1D, Группа: CAN +(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.02h], Название: Scale Number 1D Format, ТекстПУ: S1DFmt, Группа: CAN +(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.03h], Название: Scale Number Format Q, ТекстПУ: Q-type, Группа: CAN, биты с 0 по 4: 0000000000011111b +(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.04h], Название: Scale Number Format NumOfFloat, ТекстПУ: NFloat, Группа: CAN, биты с 5 по 6: 0000000001100000b +(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.05h], Название: Scale Number Format Prefix, ТекстПУ: Prefix, Группа: CAN, биты с 7 по 9: 0000001110000000b +(long)(&co1_vars.co_scaleNum1DFormat), //[211Dh.06h], Название: Scale Number Format Units, ТекстПУ: Units, Группа: CAN, биты с 10 по 15: 1111110000000000b +(long)(&cmd.all), //[2502h.01h], Название: Пуск, ТекстПУ: Пуск, Группа: Слово управления, биты с 0 по 0: 0000000000000001b +(long)(&cmd.all), //[2502h.02h], Название: Стоп, ТекстПУ: Стоп, Группа: Слово управления, биты с 1 по 1: 0000000000000010b +(long)(&cmd.all), //[2502h.03h], Название: Сбросить состояние Аварии, ТекстПУ: СбрАвр, Группа: Слово управления, биты с 2 по 2: 0000000000000100b +(long)(&cmd.all), //[2502h.04h], Название: Слово управления CAN, ТекстПУ: КмдCAN, Группа: Слово управления +(long)(&drv_interface.req_data), //[2506h.01h], Название: Таймаут потери связи, ТекстПУ: OfflineCounterMax, Группа: ВНЕ ГРУПП +(long)(&drv_interface.ans_data), //[2506h.02h], Название: Счетчик потери связи, ТекстПУ: OfflineCounter, Группа: ВНЕ ГРУПП +(long)(&drv_interface.data_Low), //[2506h.03h], Название: data_Low, ТекстПУ: data_L, Группа: ВНЕ ГРУПП +(long)(&drv_interface.data_High), //[2506h.04h], Название: data_High, ТекстПУ: data_H, Группа: ВНЕ ГРУПП +(long)(&sm_prot.Main_ErrorCode), //[2532h.01h], Название: Код аварии ARM, ТекстПУ: Код аварии ARM, Группа: Рег. тока якоря, биты с 0 по 7: 0000000011111111b +(long)(&sm_prot.Main_ErrorCode), //[2532h.02h], Название: Расширение кода аварии, ТекстПУ: Авр+, Группа: Рег. тока якоря, биты с 8 по 15: 1111111100000000b +(long)(&sm_prot.Main_Flags), //[2532h.03h], Название: Системный объект, ТекстПУ: System, Группа: Рег. тока якоря, биты с 0 по 0: 0000000000000001b +(long)(&disp_group_number), //[2534h.01h], Название: Номер груп для пульта управления, ТекстПУ: № гр ПУ, Группа: CAN +(long)(&VendorToken), //[2600h.01h], Название: VendorToken, ТекстПУ: VendorToken, Группа: ВНЕ ГРУПП +(long)(&drv_status.all), //[3000h.00h], Название: Статус преобразователя, ТекстПУ: Статус, Группа: ВНЕ ГРУПП, биты с 0 по 5: 0000000000111111b +(long)(&msCounter), //[3100h.01h], Название: Счётчик прерываний 1 кГц, ТекстПУ: Сч.прерыв.1 кГц, Группа: Счетчики +(long)(&FastCounter), //[3100h.02h], Название: Счётчик прерываний 10 кГц, ТекстПУ: Сч.прерыв.10 кГц, Группа: Счетчики +(long)(&LoopCounter), //[3100h.03h], Название: BackgroundCounter, ТекстПУ: BackgroundCounter, Группа: Счетчики +(long)(&TIsr10), //[3100h.04h], Название: T_10кГц, ТекстПУ: T_10кГц, Группа: Счетчики +(long)(&TIsr1), //[3100h.05h], Название: T_1кГц, ТекстПУ: T_1кГц, Группа: Счетчики +(long)(&rmp.T), //[5000h.01h], Название: T разгона до номинала, ТекстПУ: rmpT, Группа: ЗИ +(long)(&rmp.input), //[5000h.02h], Название: Вход ЗИ, ТекстПУ: ВходЗИ, Группа: ЗИ +(long)(&rmp.output), //[5000h.03h], Название: Выход ЗИ, ТекстПУ: ВыходЗИ, Группа: ЗИ +(long)(&pid_id.pid_ref_reg3), //[5100h.01h], Название: Задание, ТекстПУ: Зад-е, Группа: Рег. тока Id +(long)(&pid_id.pid_fdb_reg3), //[5100h.02h], Название: Обратная связь, ТекстПУ: Обр.Св, Группа: Рег. тока Id +(long)(&pid_id.Kp_reg3), //[5100h.03h], Название: Пропорц. коэфф. Kp, ТекстПУ: Kp, Группа: Рег. тока Id +(long)(&pid_id.pid_out_max), //[5100h.04h], Название: Максимум выхода, ТекстПУ: Max, Группа: Рег. тока Id +(long)(&pid_id.pid_out_min), //[5100h.05h], Название: Минимум выхода, ТекстПУ: Min, Группа: Рег. тока Id +(long)(&pid_id.Ki_reg3), //[5100h.06h], Название: Интегральный коэфф. Ki, ТекстПУ: Ki, Группа: Рег. тока Id +(long)(&pid_id.Kd_reg3), //[5100h.07h], Название: Дифф. коэфф. Kd, ТекстПУ: Kd, Группа: Рег. тока Id +(long)(&pid_id.Kc_reg3), //[5100h.08h], Название: Интегр.корректир.коэффициент, ТекстПУ: Kc, Группа: Рег. тока Id +(long)(&pid_id.e_reg3), //[5100h.09h], Название: Ошибка рассогласования сигналов, ТекстПУ: Ошибка, Группа: Рег. тока Id +(long)(&pid_id.pid_out_reg3), //[5100h.0Ah], Название: Выход регулятора, ТекстПУ: Выход, Группа: Рег. тока Id +(long)(&pid_id.up_reg3), //[5100h.0Bh], Название: Вых.Пропорц., ТекстПУ: Вых.Пропорц., Группа: Рег. тока Id +(long)(&pid_id.ui_reg3), //[5100h.0Ch], Название: Вых.Интегр., ТекстПУ: Вых.Интегр., Группа: Рег. тока Id +(long)(&pid_id.ud_reg3), //[5100h.0Dh], Название: Вых.Диффер., ТекстПУ: Вых.Диффер., Группа: Рег. тока Id +(long)(&pid_spd.pid_ref_reg3), //[5101h.01h], Название: Задание, ТекстПУ: pisref, Группа: Рег. скорости +(long)(&pid_spd.pid_fdb_reg3), //[5101h.02h], Название: Обратная связь, ТекстПУ: pisfbd, Группа: Рег. скорости +(long)(&pid_spd.Kp_reg3), //[5101h.03h], Название: Пропорц. коэфф. Kp, ТекстПУ: Kp, Группа: Рег. скорости +(long)(&pid_spd.pid_out_max), //[5101h.04h], Название: Максимум выхода, ТекстПУ: Max, Группа: Рег. скорости +(long)(&pid_spd.pid_out_min), //[5101h.05h], Название: Минимум выхода, ТекстПУ: Min, Группа: Рег. скорости +(long)(&pid_spd.Ki_reg3), //[5101h.06h], Название: Интегральный коэфф. Ki, ТекстПУ: Ki, Группа: Рег. скорости +(long)(&pid_spd.Kd_reg3), //[5101h.07h], Название: Дифф. коэфф. Kd, ТекстПУ: pisKd, Группа: Рег. скорости +(long)(&pid_spd.Kc_reg3), //[5101h.08h], Название: Интегр.корректир.коэффициент, ТекстПУ: Kc, Группа: Рег. скорости +(long)(&pid_spd.e_reg3), //[5101h.09h], Название: Ошибка рассогласования сигналов, ТекстПУ: Ошибка, Группа: Рег. скорости +(long)(&pid_spd.pid_out_reg3), //[5101h.0Ah], Название: Выход регулятора, ТекстПУ: pisout, Группа: Рег. скорости +(long)(&pid_spd.up_reg3), //[5101h.0Bh], Название: Вых.Пропорц., ТекстПУ: Вых.Пропорц., Группа: Рег. скорости +(long)(&pid_spd.ui_reg3), //[5101h.0Ch], Название: Вых.Интегр., ТекстПУ: Вых.Интегр., Группа: Рег. скорости +(long)(&pid_spd.ud_reg3), //[5101h.0Dh], Название: Вых.Диффер., ТекстПУ: Вых.Диффер., Группа: Рег. скорости +(long)(&pid_spd.saterr_reg3), //[5101h.0Eh], Название: Превышение насыщения, ТекстПУ: Прев. насыщ, Группа: Рег. скорости +(long)(&pid_iq.pid_ref_reg3), //[5102h.01h], Название: Задание, ТекстПУ: Зад-ие, Группа: Рег. тока Iq +(long)(&pid_iq.pid_fdb_reg3), //[5102h.02h], Название: Обратная связь, ТекстПУ: Обр.Св, Группа: Рег. тока Iq +(long)(&pid_iq.Kp_reg3), //[5102h.03h], Название: Пропорц. коэфф. Kp, ТекстПУ: Kp, Группа: Рег. тока Iq +(long)(&pid_iq.pid_out_max), //[5102h.04h], Название: Максимум выхода, ТекстПУ: Max, Группа: Рег. тока Iq +(long)(&pid_iq.pid_out_min), //[5102h.05h], Название: Минимум выхода, ТекстПУ: Min, Группа: Рег. тока Iq +(long)(&pid_iq.Ki_reg3), //[5102h.06h], Название: Интегральный коэфф. Ki, ТекстПУ: Ki, Группа: Рег. тока Iq +(long)(&pid_iq.Kd_reg3), //[5102h.07h], Название: Дифф. коэфф. Kd, ТекстПУ: Kd, Группа: Рег. тока Iq +(long)(&pid_iq.Kc_reg3), //[5102h.08h], Название: Интегр.корректир.коэффициент, ТекстПУ: Kc, Группа: Рег. тока Iq +(long)(&pid_iq.e_reg3), //[5102h.09h], Название: Ошибка рассогласования сигналов, ТекстПУ: Ошибка, Группа: Рег. тока Iq +(long)(&pid_iq.pid_out_reg3), //[5102h.0Ah], Название: Выход регулятора, ТекстПУ: Выход, Группа: Рег. тока Iq +(long)(&pid_iq.up_reg3), //[5102h.0Bh], Название: Вых.Пропорц., ТекстПУ: Вых.Пропорц., Группа: Рег. тока Iq +(long)(&pid_iq.ui_reg3), //[5102h.0Ch], Название: Вых.Интегр., ТекстПУ: Вых.Интегр., Группа: Рег. тока Iq +(long)(&pid_iq.ud_reg3), //[5102h.0Dh], Название: Вых.Диффер., ТекстПУ: Вых.Диффер., Группа: Рег. тока Iq +(long)(&pid_pos.pid_ref_reg3), //[5103h.01h], Название: Задание, ТекстПУ: pisref, Группа: Рег. положения +(long)(&pid_pos.pid_ref_reg3), //[5103h.02h], Название: Задание, ТекстПУ: pisref, Группа: Рег. положения +(long)(&pid_pos.pid_fdb_reg3), //[5103h.03h], Название: Обратная связь, ТекстПУ: pisfbd, Группа: Рег. положения +(long)(&pid_pos.pid_fdb_reg3), //[5103h.04h], Название: Обратная связь, ТекстПУ: pisfbd, Группа: Рег. положения +(long)(&pid_pos.Kp_reg3), //[5103h.05h], Название: Пропорц. коэфф. Kp, ТекстПУ: Kp, Группа: Рег. положения +(long)(&pid_pos.pid_out_max), //[5103h.06h], Название: Максимум выхода, ТекстПУ: Max, Группа: Рег. положения +(long)(&pid_pos.pid_out_min), //[5103h.07h], Название: Минимум выхода, ТекстПУ: Min, Группа: Рег. положения +(long)(&pid_pos.Ki_reg3), //[5103h.08h], Название: Интегральный коэфф. Ki, ТекстПУ: Ki, Группа: Рег. положения +(long)(&pid_pos.Kd_reg3), //[5103h.09h], Название: Дифф. коэфф. Kd, ТекстПУ: pisKd, Группа: Рег. положения +(long)(&pid_pos.DiffDelim), //[5103h.0Ah], Название: Делит. дифф. части, ТекстПУ: Делит. дифф. части, Группа: Рег. положения +(long)(&pid_pos.Kf_d), //[5103h.0Bh], Название: Коэф. фильтра, ТекстПУ: Коэф. фильтра, Группа: Рег. положения +(long)(&pid_pos.Kc_reg3), //[5103h.0Ch], Название: Интегр.корректир.коэффициент, ТекстПУ: Kc, Группа: Рег. положения +(long)(&pid_pos.DeadZone), //[5103h.0Dh], Название: Мертвая зона, ТекстПУ: Мертвая зона, Группа: Рег. положения +(long)(&pid_pos.e_reg3), //[5103h.0Eh], Название: Ошибка рассогласования сигналов, ТекстПУ: Ошибка, Группа: Рег. положения +(long)(&pid_spd.saterr_reg3), //[5103h.0Fh], Название: Превышение насыщения, ТекстПУ: Прев. насыщ, Группа: Рег. положения +(long)(&pid_pos.pid_out_reg3), //[5103h.10h], Название: Выход регулятора, ТекстПУ: pisout, Группа: Рег. положения +(long)(&pid_pos.up_reg3), //[5103h.11h], Название: Вых.Пропорц., ТекстПУ: Вых.Пропорц., Группа: Рег. положения +(long)(&pid_pos.ui_reg3), //[5103h.12h], Название: Вых.Интегр., ТекстПУ: Вых.Интегр., Группа: Рег. положения +(long)(&pid_pos.ud_reg3), //[5103h.13h], Название: Вых.Диффер., ТекстПУ: Вых.Диффер., Группа: Рег. положения +(long)(&pid_pos.e_reg3_filterOut), //[5103h.14h], Название: Фильтр ошибки, ТекстПУ: Фильтр ошибки, Группа: Рег. положения +(long)(&pwm.UalphaRef), //[5105h.01h], Название: UaЗад, ТекстПУ: UaЗад, Группа: ШИМ +(long)(&pwm.UbetaRef), //[5105h.02h], Название: UbЗад, ТекстПУ: UbЗад, Группа: ШИМ +(long)(&pwm.U_lim), //[5105h.03h], Название: U_огр, ТекстПУ: U_огр, Группа: ШИМ +(long)(&pwm.GammaA), //[5105h.04h], Название: GammaA, ТекстПУ: GmA, Группа: ШИМ +(long)(&pwm.GammaB), //[5105h.05h], Название: GammaB, ТекстПУ: GmB, Группа: ШИМ +(long)(&pwm.GammaC), //[5105h.06h], Название: GammaC, ТекстПУ: GmC, Группа: ШИМ +(long)(&pwm.k_pwm), //[5105h.07h], Название: TPWM, ТекстПУ: TPWM, Группа: ШИМ +(long)(&pwm.DeadBand), //[5105h.08h], Название: Мертвое время (мкс), ТекстПУ: Мерт. время, Группа: ШИМ +(long)(&pwm.MinGammaLimit), //[5105h.09h], Название: Ограничение мин. скважн., ТекстПУ: GamLim, Группа: ШИМ +(long)(&pwm.UdCompK), //[5105h.0Ah], Название: Коэф. компенсации Ud, ТекстПУ: UdКомпK, Группа: ШИМ +(long)(&pwm.UdCompEnable), //[5105h.0Bh], Название: Компенсация Ud, ТекстПУ: UdКомп, Группа: ШИМ, биты с 0 по 0: 0000000000000001b +(long)(&pwm.PWM_type), //[5105h.0Ch], Название: Тип ШИМ, ТекстПУ: ТипШИМ, Группа: ШИМ +(long)(&pwm.ULimitation), //[5105h.0Dh], Название: ULimitation, ТекстПУ: ULimitation, Группа: ШИМ +(long)(&pwm.Frequency), //[5105h.0Eh], Название: Частота ШИМ, ТекстПУ: Fшим, Группа: ШИМ +(long)(&pwm.sector), //[5105h.0Fh], Название: Сектор, ТекстПУ: Сектор, Группа: ШИМ +(long)(&pwm.U_mag), //[5105h.10h], Название: U_ампл, ТекстПУ: U_ампл, Группа: ШИМ +(long)(&pwm.PDP_Fault), //[5105h.11h], Название: Флаги аварий, ТекстПУ: F_bits, Группа: ШИМ +(long)(&sm_ctrl.state), //[510Bh.01h], Название: sm_state, ТекстПУ: smstat, Группа: ДА sm_ctrl +(long)(&drv_status_code), //[510Bh.02h], Название: drv_status_code, ТекстПУ: stcode, Группа: ДА sm_ctrl, биты с 0 по 7: 0000000011111111b +(long)(&sm_prot.bit_fault1), //[510Eh.01h], Название: Флаги аварий 1, ТекстПУ: bitF_1, Группа: Защиты +(long)(&sm_prot.bit_fault2), //[510Eh.02h], Название: Флаги аварий 2, ТекстПУ: bitF_2, Группа: Защиты +(long)(&sm_prot.mask_fault1), //[510Eh.03h], Название: Маска аварий 1L, ТекстПУ: mask1L, Группа: Защиты, биты с 0 по 7: 0000000011111111b +(long)(&sm_prot.mask_fault1), //[510Eh.04h], Название: Маска аварий 1H, ТекстПУ: mask1H, Группа: Защиты, биты с 8 по 15: 1111111100000000b +(long)(&sm_prot.mask_fault2), //[510Eh.05h], Название: Маска аварий 2L, ТекстПУ: mask2L, Группа: Защиты, биты с 0 по 7: 0000000011111111b +(long)(&sm_prot.mask_fault2), //[510Eh.06h], Название: Маска аварий 2H, ТекстПУ: mask2H, Группа: Защиты, биты с 8 по 15: 1111111100000000b +(long)(&sm_prot.Imax_protect), //[510Eh.07h], Название: Максимальный ток, ТекстПУ: Макс.Ток, Группа: Защиты +(long)(&sm_prot.Umax_protect), //[510Eh.08h], Название: Максимальное напряжение, ТекстПУ: Ud_max, Группа: Защиты +(long)(&sm_prot.Umin_protect), //[510Eh.09h], Название: Минимальное напряжение, ТекстПУ: Ud_min, Группа: Защиты +(long)(&sm_prot.speed_max), //[510Eh.0Ah], Название: Максимальная скорость, ТекстПУ: speed_max, Группа: Защиты +(long)(&sm_prot.T_max), //[510Eh.0Bh], Название: Максимальная температура, ТекстПУ: t_max, Группа: Защиты +(long)(&refs.speed_ref), //[5112h.01h], Название: Скорость, ТекстПУ: Скор_з, Группа: Задания +(long)(&refs.Iq_ref), //[5112h.02h], Название: Макс. ток ВУ, ТекстПУ: ТокСТз, Группа: Задания +(long)(&refs.i_flux_ref), //[5112h.03h], Название: Ток удержания, ТекстПУ: ТокУПз, Группа: Задания +(long)(&refs.theta_elec), //[5112h.04h], Название: theta_elec, ТекстПУ: элекУг, Группа: Задания +(long)(&refs.uf_ref), //[5112h.05h], Название: Заданное напряжение ОВ, ТекстПУ: Uf_ref, Группа: Задания +(long)(&drv_params.p), //[5113h.01h], Название: Число пар полюсов, ТекстПУ: ПарПол, Группа: Базов. парам +(long)(&drv_params.I_nom), //[5113h.02h], Название: Номинальный ток, ТекстПУ: IпчНом, Группа: Базов. парам +(long)(&drv_params.U_nom), //[5113h.03h], Название: Номинальное напряжение фазн., ТекстПУ: Uф_ном, Группа: Базов. парам +(long)(&drv_params.speed_nom), //[5113h.04h], Название: Номинальная скорость, ТекстПУ: СкоростьНом, Группа: Базов. парам +(long)(&drv_params.Udc_nom), //[5113h.05h], Название: Номинальное напряжение ЗПТ, ТекстПУ: UdcНом, Группа: Базов. парам +(long)(&drv_params.Rs), //[5113h.06h], Название: Rs, ТекстПУ: Rs, Группа: Базов. парам +(long)(&drv_params.Ls), //[5113h.07h], Название: Ls, ТекстПУ: Ls, Группа: Базов. парам +(long)(&drv_params.freq_nom), //[5113h.08h], Название: Номинальная частота, ТекстПУ: Ном.част., Группа: Базов. парам +(long)(&drv_params.sens_type), //[5113h.09h], Название: Тип датчика положения, ТекстПУ: Sens_type, Группа: Базов. парам, биты с 0 по 2: 0000000000000111b +(long)(&sm_ctrl.run_mode), //[5114h.01h], Название: Режим работы, ТекстПУ: РежРаб, Группа: Настройки СУ +(long)(&sw.all), //[5114h.02h], Название: Рекуперация, ТекстПУ: Рекупр, Группа: Настройки СУ, биты с 0 по 0: 0000000000000001b +(long)(&sw.all), //[5114h.03h], Название: АЦП авто смещ., ТекстПУ: АЦПсмещ, Группа: Настройки СУ, биты с 2 по 2: 0000000000000100b +(long)(&sw.all), //[5114h.04h], Название: Перезагрузка, ТекстПУ: Перезагрузка, Группа: Настройки СУ, биты с 1 по 1: 0000000000000010b +(long)(&sw.all), //[5114h.05h], Название: Разрешить светодиод вместо JTAG, ТекстПУ: (null), Группа: Настройки СУ, биты с 3 по 3: 0000000000001000b +(long)(&adc.Imeas_a_gain), //[5116h.01h], Название: Коэффициент тока фазы А, ТекстПУ: IaУсил, Группа: АЦП +(long)(&adc.Imeas_a_offset), //[5116h.02h], Название: Смещение тока фазы А, ТекстПУ: IaСмещ, Группа: АЦП +(long)(&adc.Imeas_a), //[5116h.03h], Название: Ток фазы А, ТекстПУ: Ia_мгн, Группа: АЦП +(long)(&adc.Imeas_b_gain), //[5116h.04h], Название: Коэффициент тока фазы В, ТекстПУ: IbУсил, Группа: АЦП +(long)(&adc.Imeas_b_offset), //[5116h.05h], Название: Смещение тока фазы В, ТекстПУ: IbСмещ, Группа: АЦП +(long)(&adc.Imeas_b), //[5116h.06h], Название: Ток фазы В, ТекстПУ: Ib_мгн, Группа: АЦП +(long)(&adc.Imeas_c), //[5116h.07h], Название: Ток фазы С, ТекстПУ: Ic_мгн, Группа: АЦП +(long)(&adc.Udc_meas_gain), //[5116h.08h], Название: Коэффициент напряжения ЗПТ, ТекстПУ: UdУсил, Группа: АЦП +(long)(&adc.Udc_meas_offset), //[5116h.09h], Название: Смещение напряж. ЗПТ, ТекстПУ: Udсмещ, Группа: АЦП +(long)(&adc.Udc_meas), //[5116h.0Ah], Название: Напряжение ЗПТ, ТекстПУ: Ud, Группа: АЦП +(long)(&adc.AI_meas_gain), //[5116h.0Bh], Название: Диапазон аналогового входа, ТекстПУ: (null), Группа: АЦП +(long)(&adc.AI_meas), //[5116h.0Ch], Название: Внешний аналоговый вход 1, ТекстПУ: ADC_ext1, Группа: АЦП +(long)(&vhz.freq), //[511Ah.01h], Название: Выходная частота, ТекстПУ: F_вых, Группа: Кривая U-f +(long)(&vhz.vout), //[511Ah.02h], Название: Выходное напряжение, ТекстПУ: U_вых, Группа: Кривая U-f +(long)(&vhz.FL), //[511Ah.03h], Название: Нулевая опроная частота, ТекстПУ: f [0], Группа: Кривая U-f +(long)(&vhz.Vmin), //[511Ah.04h], Название: Нулевое опорное напряжение, ТекстПУ: U [0], Группа: Кривая U-f +(long)(&vhz.FH), //[511Ah.05h], Название: Первая опорная частота, ТекстПУ: f [1], Группа: Кривая U-f +(long)(&vhz.Vmax), //[511Ah.06h], Название: Первое опорное напряжение, ТекстПУ: U [1], Группа: Кривая U-f +(long)(&vhz.Fmax), //[511Ah.07h], Название: Максимальная частота, ТекстПУ: f max, Группа: Кривая U-f +(long)(&cur_par.speed), //[5138h.01h], Название: Скорость, ТекстПУ: скор, Группа: Наблюдаемые +(long)(&cur_par.power), //[5138h.02h], Название: Акт. мощность, ТекстПУ: АктМощ, Группа: Наблюдаемые +(long)(&cur_par.Is), //[5138h.03h], Название: Ток статора, ТекстПУ: ТокСт, Группа: Наблюдаемые +(long)(&cur_par.ThetaRefCurr), //[5138h.04h], Название: ЭлУголЗад, ТекстПУ: ЭлУголЗад, Группа: Наблюдаемые +(long)(&cur_par.ThetaCurr), //[5138h.05h], Название: ЭлУгол, ТекстПУ: ЭлУгол, Группа: Наблюдаемые +(long)(&cur_par.IsRef), //[5138h.06h], Название: Ток статора зад, ТекстПУ: ТокСтЗад, Группа: Наблюдаемые +(long)(&global_time.PowerOn_time_min), //[5138h.07h], Название: Время запитанного состояния, мин, ТекстПУ: Power On Time, Группа: Наблюдаемые +(long)(&global_time.operational_time_min), //[5138h.08h], Название: Вреря работы привода, мин, ТекстПУ: Work Time, Группа: Наблюдаемые +(long)(&dlog.mode_reset), //[5150h.01h], Название: dlog.mode_reset, ТекстПУ: mode, Группа: dlog +(long)(&dlog.control), //[5150h.02h], Название: dlog.control, ТекстПУ: dlcont, Группа: dlog +(long)(&dlog.ind_subind1), //[5150h.03h], Название: dlog.ind_subind1, ТекстПУ: dlisi1, Группа: dlog +(long)(&dlog.ind_subind2), //[5150h.04h], Название: dlog.ind_subind2, ТекстПУ: dlisi2, Группа: dlog +(long)(&dlog.ind_subind3), //[5150h.05h], Название: dlog.ind_subind3, ТекстПУ: dlisi3, Группа: dlog +(long)(&dlog.ind_subind4), //[5150h.06h], Название: dlog.ind_subind4, ТекстПУ: dlisi4, Группа: dlog +(long)(&dlog.StartBits), //[5150h.07h], Название: StartBitL, ТекстПУ: StrtBL, Группа: dlog, биты с 0 по 7: 0000000011111111b +(long)(&dlog.StartBits), //[5150h.08h], Название: StartBitH, ТекстПУ: StrtBH, Группа: dlog, биты с 8 по 15: 1111111100000000b +(long)(&dlog.OneShotOperation), //[5150h.09h], Название: OneShotOperation, ТекстПУ: OneShotOp, Группа: dlog, биты с 0 по 0: 0000000000000001b +(long)(&dlog.trig_shift), //[5150h.0Ah], Название: Количество точек предыстории, ТекстПУ: N предыст., Группа: dlog +(long)(&dlog.next_value_var), //[5151h.00h], Название: dlog.next_value_var, ТекстПУ: dlnval, Группа: ВНЕ ГРУПП +(long)(&posspeedEqep.resol), //[5152h.01h], Название: Кол-во периодов, ТекстПУ: Кол-во периодов, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Posspeed_CTL.all), //[5152h.02h], Название: Наличие репера, ТекстПУ: Наличие репера, Группа: ДПР-Энкодер, биты с 2 по 2: 0000000000000100b +(long)(&posspeedEqep.SpeedCalcType), //[5152h.03h], Название: Рассчитывать скорость программно, ТекстПУ: SpeedCalcType, Группа: ДПР-Энкодер +(long)(&posspeedEqep.AngleOffset), //[5152h.04h], Название: СмещУгол, ТекстПУ: СмещУг, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Poscnt_res), //[5152h.05h], Название: Механическ.угол в метках, ТекстПУ: Механическ.угол в ме, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Poscnt_res16), //[5152h.06h], Название: Механическ.угол в метках, ТекстПУ: Механическ.угол в ме, Группа: ДПР-Энкодер +(long)(&posspeedEqep.speed_elec), //[5152h.07h], Название: Скорость , ТекстПУ: Скорость, Группа: ДПР-Энкодер +(long)(&posspeedEqep.theta_elec), //[5152h.08h], Название: Угол. электр., ТекстПУ: Угол. электр., Группа: ДПР-Энкодер +(long)(&posspeedEqep.theta_mech), //[5152h.09h], Название: Угол мех., ТекстПУ: Угол мех., Группа: ДПР-Энкодер +(long)(&posspeedEqep.Posspeed_CTL.all), //[5152h.0Ah], Название: Команда иниц., ТекстПУ: Команда иниц., Группа: ДПР-Энкодер, биты с 4 по 4: 0000000000010000b +(long)(&posspeedEqep.speed_filter.T), //[5152h.0Bh], Название: К быстродействия фильтра скорости, ТекстПУ: Кф. скорости, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Posspeed_FLG1.all), //[5152h.0Ch], Название: Posspeed_FLG1, ТекстПУ: Posspeed_FLG1, Группа: ДПР-Энкодер +(long)(&posspeedEqep.GPIOsValue), //[5152h.0Dh], Название: GPIOsValue, ТекстПУ: GPIOsValue, Группа: ДПР-Энкодер +(long)(&posspeedEqep.UPPS_forWatch), //[5152h.0Eh], Название: UPPS, ТекстПУ: UPPS, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Qcprdlat_tmp), //[5152h.0Fh], Название: QCPRD, ТекстПУ: QCPRD, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Qcprdlat16_tmp), //[5152h.10h], Название: QCPRD, ТекстПУ: QCPRD, Группа: ДПР-Энкодер +(long)(&posspeedEqep.QEPSTS), //[5152h.11h], Название: QEPSTS, ТекстПУ: QEPSTS, Группа: ДПР-Энкодер +(long)(&posspeedEqep.RevolutionCounter), //[5152h.12h], Название: Число оборотов, ТекстПУ: revolCounter, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Poscnt_resContinouosInt8), //[5152h.13h], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Poscnt_resContinouosInt), //[5152h.14h], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Poscnt_resContinouosLong), //[5152h.15h], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-Энкодер +(long)(&posspeedEqep.theta_mechContinouos), //[5152h.16h], Название: Угол механический не огранич., ТекстПУ: Уг.мех.не_огр, Группа: ДПР-Энкодер +(long)(&posspeedEqep.theta_elecContinouos), //[5152h.17h], Название: Угол электрический не огранич., ТекстПУ: Уг.эл.не_огр, Группа: ДПР-Энкодер +(long)(&posspeedEqep.Index_eventCounter), //[5152h.18h], Название: Счетчик событий индексной метки, ТекстПУ: (null), Группа: ДПР-Энкодер +(long)(&DPReCAP.enabled), //[5155h.01h], Название: Включен, ТекстПУ: Вкл, Группа: ДПР-Холл +(long)(&DPReCAP.Angle), //[5155h.02h], Название: ЭлУгол, ТекстПУ: ЭлУгол, Группа: ДПР-Холл +(long)(&DPReCAP.speed), //[5155h.03h], Название: Скорость , ТекстПУ: Скорость, Группа: ДПР-Холл +(long)(&DPReCAP.speedMIN), //[5155h.04h], Название: Уставка Скорости, ТекстПУ: Уставка Скорости, Группа: ДПР-Холл +(long)(&DPReCAP.Angle6), //[5155h.05h], Название: ЭлУгол6, ТекстПУ: ЭлУгол6, Группа: ДПР-Холл +(long)(&DPReCAP.DPReCAP_FLG1.all), //[5155h.06h], Название: Инт-полятор вкл, ТекстПУ: Инт-полятор вкл, Группа: ДПР-Холл, биты с 0 по 0: 0000000000000001b +(long)(&DPReCAP.milsecREF), //[5155h.07h], Название: Уставка обнуления скорости, ТекстПУ: Уставка обнуления ск, Группа: ДПР-Холл +(long)(&DPReCAP.speedMinREF), //[5155h.08h], Название: Скорость Мин., ТекстПУ: Скорость Мин., Группа: ДПР-Холл +(long)(&DPReCAP.CAP_WrongEdgeCnt), //[5155h.09h], Название: Ложные фронты, ТекстПУ: Ложные фронты, Группа: ДПР-Холл +(long)(&DPReCAP.HallCode), //[5155h.0Ah], Название: Дискретные входы, ТекстПУ: Входы, Группа: ДПР-Холл, биты с 0 по 2: 0000000000000111b +(long)(&DPReCAP.AngleOffset), //[5155h.0Bh], Название: СмещУгол, ТекстПУ: СмещУг, Группа: ДПР-Холл +(long)(&DPReCAP.ErrorLevel), //[5155h.0Ch], Название: Уровень помех, ТекстПУ: Уровень помех, Группа: ДПР-Холл +(long)(&DPReCAP.CAP_WrongEdgeCnt1), //[5155h.0Dh], Название: Ошибка 1 канала, ТекстПУ: Ошиб_1_к., Группа: ДПР-Холл +(long)(&DPReCAP.CAP_WrongEdgeCnt2), //[5155h.0Eh], Название: Ошибка 2 канала, ТекстПУ: Ошиб_2_к., Группа: ДПР-Холл +(long)(&DPReCAP.CAP_WrongEdgeCnt3), //[5155h.0Fh], Название: Ошибка 3 канала, ТекстПУ: Ошиб_3_к., Группа: ДПР-Холл +(long)(&DPReCAP.UserDirection), //[5155h.10h], Название: Направление вращения, ТекстПУ: НапрВр, Группа: ДПР-Холл, биты с 2 по 2: 0000000000000100b +(long)(&DPReCAP.WrongCodeCounterLimitPerSec), //[5155h.11h], Название: Макс.число ошибок ДПР, ТекстПУ: Макс.ош.ДПР, Группа: ДПР-Холл +(long)(&DPReCAP.WrongCodeCounter), //[5155h.12h], Название: Кол-во ошибок неверной последовательности , ТекстПУ: Ошибки последоват., Группа: ДПР-Холл +(long)(&CounterCAP_isr), //[5155h.13h], Название: Счётчик прерываний по приему, ТекстПУ: Счёт.Rx.Int., Группа: ДПР-Холл +(long)(&cap0_counter), //[5155h.14h], Название: Счётчик прерываний CAP1, ТекстПУ: Сч.прерыв.CAP1, Группа: ДПР-Холл +(long)(&cap1_counter), //[5155h.15h], Название: Счётчик прерываний CAP2, ТекстПУ: Сч.прерыв.CAP2, Группа: ДПР-Холл +(long)(&cap2_counter), //[5155h.16h], Название: Счётчик прерываний CAP3, ТекстПУ: Сч.прерыв.CAP3, Группа: ДПР-Холл +(long)(&SSI_Encoder.resol), //[5157h.01h], Название: Количество импульсов на оборот, ТекстПУ: qepTik, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.AngleOffset), //[5157h.02h], Название: СмещУгол, ТекстПУ: СмещУг, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.Poscnt_res), //[5157h.03h], Название: Механическ.угол в метках, ТекстПУ: Механическ.угол в ме, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.speed_elec), //[5157h.04h], Название: Скорость , ТекстПУ: Скорость, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.theta_elec), //[5157h.05h], Название: Угол. электр., ТекстПУ: Угол. электр., Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.theta_mech), //[5157h.06h], Название: Угол мех., ТекстПУ: Угол мех., Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.theta_mech_filtered), //[5157h.07h], Название: Угол мех. фильтрованный, ТекстПУ: theta_mech_filtered, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.theta_mech_filterK), //[5157h.08h], Название: К быстродействия фильтра угла, ТекстПУ: Кф. угла, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.RevolutionCounter), //[5157h.09h], Название: Число оборотов, ТекстПУ: revolCounter, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.Poscnt_resContinouosLong), //[5157h.0Ah], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.Poscnt_resContinouosInt8), //[5157h.0Bh], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.Poscnt_resContinouosInt), //[5157h.0Ch], Название: Абс. положение в метках, ТекстПУ: qcAbsPos, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.theta_mechContinouos), //[5157h.0Dh], Название: Угол механический не огранич., ТекстПУ: Уг.мех.не_огр, Группа: ДПР-SSI энкодер +(long)(&SSI_Encoder.theta_elecContinouos), //[5157h.0Eh], Название: Угол электрический не огранич., ТекстПУ: Уг.эл.не_огр, Группа: ДПР-SSI энкодер +(long)(&Debug1), //[5174h.01h], Название: DebugL1, ТекстПУ: DebugL1, Группа: Для отладки +(long)(&Debug1), //[5174h.02h], Название: DebugL1, ТекстПУ: DebugL1, Группа: Для отладки +(long)(&Debug2), //[5174h.03h], Название: DebugL2, ТекстПУ: DebugL2, Группа: Для отладки +(long)(&Debug2), //[5174h.04h], Название: DebugL2, ТекстПУ: DebugL2, Группа: Для отладки +(long)(&Debug3), //[5174h.05h], Название: DebugI3, ТекстПУ: DebugI3, Группа: Для отладки +(long)(&Debug3), //[5174h.06h], Название: DebugI3, ТекстПУ: DebugI3, Группа: Для отладки +(long)(&Debug4), //[5174h.07h], Название: DebugI4, ТекстПУ: DebugI4, Группа: Для отладки +(long)(&Debug4), //[5174h.08h], Название: DebugI4, ТекстПУ: DebugI4, Группа: Для отладки +(long)(&DebugW1), //[5174h.09h], Название: DebugW1, ТекстПУ: DebugW1, Группа: Для отладки +(long)(&DebugW1), //[5174h.0Ah], Название: DebugW1, ТекстПУ: DebugW1, Группа: Для отладки +(long)(&DebugW2), //[5174h.0Bh], Название: DebugW2, ТекстПУ: DebugW2, Группа: Для отладки +(long)(&DebugW2), //[5174h.0Ch], Название: DebugW2, ТекстПУ: DebugW2, Группа: Для отладки +(long)(&DebugW3), //[5174h.0Dh], Название: DebugW3, ТекстПУ: DebugW3, Группа: Для отладки +(long)(&DebugW3), //[5174h.0Eh], Название: DebugW3, ТекстПУ: DebugW3, Группа: Для отладки +(long)(&DebugW4), //[5174h.0Fh], Название: DebugW4, ТекстПУ: DebugW4, Группа: Для отладки +(long)(&DebugW4), //[5174h.10h], Название: DebugW4, ТекстПУ: DebugW4, Группа: Для отладки +(long)(&DebugF1), //[5174h.11h], Название: DebugF1, ТекстПУ: DebugF1, Группа: Для отладки +(long)(&DebugF2), //[5174h.12h], Название: DebugF2, ТекстПУ: DebugF2, Группа: Для отладки +(long)(&DebugF3), //[5174h.13h], Название: DebugF3, ТекстПУ: DebugF3, Группа: Для отладки +(long)(&DebugF4), //[5174h.14h], Название: DebugF4, ТекстПУ: DebugF4, Группа: Для отладки +(long)(&refs.DCMspeed_ref), //[5185h.01h], Название: Задание скорости (Подч. Рег.), ТекстПУ: Зад. Скор., Группа: ДПТ Сист. Упр. +(long)(&refs.ua_ref), //[5185h.02h], Название: Заданное напряжение якоря, ТекстПУ: Ua_ref, Группа: ДПТ Сист. Упр. +(long)(&refs.uf_ref), //[5185h.03h], Название: Заданное напряжение ОВ, ТекстПУ: Uf_ref, Группа: ДПТ Сист. Упр. +(long)(&RotorObserver.Tr), //[5B04h.01h], Название: Пост. времени ротора, ТекстПУ: Tr, Группа: Наблюдатель ротора АД +(long)(&RotorObserver.FluxCurrentRatio), //[5B04h.02h], Название: Соотношение тока возб. X к току Y, ТекстПУ: FluxCurrentRatio, Группа: Наблюдатель ротора АД +(long)(&RotorObserver.FluxCurrentMin), //[5B04h.03h], Название: Минимальный ток возбуждения, ТекстПУ: FluxCurrentMin, Группа: Наблюдатель ротора АД +(long)(&RotorObserver.id), //[5B04h.04h], Название: Ток статора по оси D, ТекстПУ: IsD, Группа: Наблюдатель ротора АД +(long)(&RotorObserver.iq), //[5B04h.05h], Название: Ток статора по оси Q, ТекстПУ: IsQ, Группа: Наблюдатель ротора АД +(long)(&RotorObserver.psi_d), //[5B04h.06h], Название: Поток ротора по оси D, ТекстПУ: PsiRD, Группа: Наблюдатель ротора АД +(long)(&RotorObserver.psi_q), //[5B04h.07h], Название: Поток ротора по оси Q, ТекстПУ: PsiRQ, Группа: Наблюдатель ротора АД +(long)(&RotorObserver.theta_psi_elec), //[5B04h.08h], Название: Угол потока ротора, ТекстПУ: psiRalpha, Группа: Наблюдатель ротора АД +(long)(&udControl.StateOn), //[5B05h.01h], Название: Текущее состояние реле, ТекстПУ: Relay_state, Группа: Плавный заряд ЗПТ +(long)(&udControl.Timeout_on), //[5B05h.02h], Название: Задежка включения реле, мс, ТекстПУ: relay on-delay, Группа: Плавный заряд ЗПТ +(long)(&udControl.U_on), //[5B05h.03h], Название: Напряжение включения, В, ТекстПУ: on-voltage, Группа: Плавный заряд ЗПТ +(long)(&udControl.U_off), //[5B05h.04h], Название: Напряжение выключения, В, ТекстПУ: off-voltage, Группа: Плавный заряд ЗПТ +(long)(&udControl.deriv_time_ZPT), //[5B05h.05h], Название: Производная напряжения ЗПТ, ТекстПУ: derivative_voltage, Группа: Плавный заряд ЗПТ +(long)(&udControl.deriv_const), //[5B05h.06h], Название: Уставка по производной ЗПТ, ТекстПУ: derivative_const, Группа: Плавный заряд ЗПТ +(long)(&input_vect), //[5B06h.01h], Название: Дискретные входы, ТекстПУ: Входы, Группа: Дискретные входы и выходы, биты с 0 по 7: 0000000011111111b +(long)(&output_vect), //[5B06h.02h], Название: Дискретные выходы, ТекстПУ: dout, Группа: Дискретные входы и выходы, биты с 0 по 7: 0000000011111111b +(long)(&fanControl.StateOn), //[5B07h.01h], Название: Текущее состояние вентилятора, ТекстПУ: fan_state, Группа: Система охлаждения +(long)(&fanControl.T_on), //[5B07h.02h], Название: Температура включения вентилятора, ТекстПУ: t_on, Группа: Система охлаждения +(long)(&fanControl.T_off), //[5B07h.03h], Название: Температура выключения вентилятора, ТекстПУ: t_off, Группа: Система охлаждения +(long)(&fanControl.T_alarm), //[5B07h.04h], Название: Температура вывода предупреждения о перегреве, ТекстПУ: t_alarm, Группа: Система охлаждения +(long)(&fanControl.temperature), //[5B07h.05h], Название: Температура, ТекстПУ: t, Группа: Система охлаждения +(long)(&fanControl.manualOn), //[5B07h.06h], Название: Включить принудительно, ТекстПУ: (null), Группа: Система охлаждения +(long)(&brakeResistor.enabled), //[5B08h.01h], Название: Включен, ТекстПУ: Вкл, Группа: Тормозной резистор +(long)(&brakeResistor.upperLevel), //[5B08h.02h], Название: Напряжение включения, В, ТекстПУ: on-voltage, Группа: Тормозной резистор +(long)(&brakeResistor.bottomLevel), //[5B08h.03h], Название: Напряжение выключения, В, ТекстПУ: off-voltage, Группа: Тормозной резистор +(long)(&brakeResistor.state), //[5B08h.04h], Название: Состояние, ТекстПУ: Состояние, Группа: Тормозной резистор }; Uint16 const CO1_OD_TBL2[] = { 32045, 1, 0, @@ -1716,57 +1731,55 @@ Uint16 const CO1_OD_TBL2[] = { (Uint16)(0), (((Uint32)0)>>16), 48417, 753, 384, (Uint16)(0), (((Uint32)0)>>16), -48401, 311, 385, -(Uint16)(438392299), (((Uint32)438392299)>>16), 28236, 312, 1, -20169, 313, 386, -18737, 314, 387, -20153, 312, 388, +20169, 313, 385, +18737, 314, 386, +20153, 312, 387, 28238, 315, 2, -45261, 316, 389, +45261, 316, 388, (Uint16)(15), 27822, 577, 3, -45357, 577, 390, +45357, 577, 389, (Uint16)(0x11111111), (((Uint32)0x11111111)>>16), -20749, 317, 391, +20749, 317, 390, 3762, 312, 2, -47917, 318, 392, +47917, 318, 391, (Uint16)(58002), -47917, 319, 393, +47917, 319, 392, (Uint16)(14349), -47917, 320, 394, +47917, 320, 393, (Uint16)(64364), -47917, 321, 395, +47917, 321, 394, (Uint16)(3745), -47917, 322, 396, +47917, 322, 395, (Uint16)(1832), 28848, 323, 7, -58853, 324, 397, +58853, 324, 396, (Uint16)(16777216), (((Uint32)16777216)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(_IQ(120.0)), (((Uint32)_IQ(120.0))>>16), -26437, 325, 398, +26437, 325, 397, 0, 0, 0, 0, 0, 0, -26437, 326, 399, +26437, 326, 398, 0, 0, 0, @@ -1777,67 +1790,67 @@ Uint16 const CO1_OD_TBL2[] = { 20154, 327, 7, -25925, 328, 400, +25925, 328, 399, 0, 0, 0, 0, 0, 0, -25925, 329, 401, +25925, 329, 400, 0, 0, 0, 0, 0, 0, -9381, 330, 402, +9381, 330, 401, (Uint16)(335544), (((Uint32)335544)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9509, 331, 403, +9509, 331, 402, (Uint16)(16777216), (((Uint32)16777216)>>16), (Uint16)(_IQ(-1.0)), (((Uint32)_IQ(-1.0))>>16), (Uint16)(_IQ(1.0)), (((Uint32)_IQ(1.0))>>16), -9509, 332, 404, +9509, 332, 403, (Uint16)(-16777216), (((Uint32)-16777216)>>16), (Uint16)(_IQ(-1.0)), (((Uint32)_IQ(-1.0))>>16), (Uint16)(_IQ(1.0)), (((Uint32)_IQ(1.0))>>16), -9381, 333, 405, +9381, 333, 404, (Uint16)(2684354), (((Uint32)2684354)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9381, 334, 406, +9381, 334, 405, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9381, 335, 407, +9381, 335, 406, (Uint16)(8388608), (((Uint32)8388608)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -25925, 336, 408, +25925, 336, 407, 0, 0, 0, 0, 0, 0, -25893, 337, 409, +25893, 337, 408, 0, 0, 0, 0, 0, 0, -25893, 338, 410, +25893, 338, 409, 0, 0, 0, 0, 0, 0, -25893, 339, 411, +25893, 339, 410, 0, 0, 0, 0, 0, 0, -25893, 340, 412, +25893, 340, 411, 0, 0, 0, @@ -1848,74 +1861,74 @@ Uint16 const CO1_OD_TBL2[] = { 20155, 341, 7, -26437, 342, 413, +26437, 342, 412, 0, 0, 0, 0, 0, 0, -26437, 343, 414, +26437, 343, 413, 0, 0, 0, 0, 0, 0, -9381, 330, 415, +9381, 330, 414, (Uint16)(3355443), (((Uint32)3355443)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9541, 331, 416, +9541, 331, 415, (Uint16)(13421772), (((Uint32)13421772)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9541, 332, 417, +9541, 332, 416, (Uint16)(-13421772), (((Uint32)-13421772)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9381, 333, 418, +9381, 333, 417, (Uint16)(16777), (((Uint32)16777)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9381, 344, 419, +9381, 344, 418, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9381, 335, 420, +9381, 335, 419, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -26437, 336, 421, +26437, 336, 420, 0, 0, 0, 0, 0, 0, -25925, 345, 422, +25925, 345, 421, 0, 0, 0, 0, 0, 0, -25925, 338, 423, +25925, 338, 422, 0, 0, 0, 0, 0, 0, -25925, 339, 424, +25925, 339, 423, 0, 0, 0, 0, 0, 0, -25925, 340, 425, +25925, 340, 424, 0, 0, 0, 0, 0, 0, -25925, 346, 426, +25925, 346, 425, 0, 0, 0, @@ -1926,67 +1939,67 @@ Uint16 const CO1_OD_TBL2[] = { 20154, 347, 7, -25921, 348, 427, +25921, 348, 426, 0, 0, 0, 0, 0, 0, -25921, 349, 428, +25921, 349, 427, 0, 0, 0, 0, 0, 0, -9377, 350, 429, +9377, 350, 428, (Uint16)(335544), (((Uint32)335544)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9505, 351, 430, +9505, 351, 429, (Uint16)(16777216), (((Uint32)16777216)>>16), (Uint16)(_IQ(-1.0)), (((Uint32)_IQ(-1.0))>>16), (Uint16)(_IQ(1.0)), (((Uint32)_IQ(1.0))>>16), -9505, 352, 431, +9505, 352, 430, (Uint16)(-16777216), (((Uint32)-16777216)>>16), (Uint16)(_IQ(-1.0)), (((Uint32)_IQ(-1.0))>>16), (Uint16)(_IQ(1.0)), (((Uint32)_IQ(1.0))>>16), -9377, 353, 432, +9377, 353, 431, (Uint16)(2684354), (((Uint32)2684354)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9377, 354, 433, +9377, 354, 432, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9377, 335, 434, +9377, 335, 433, (Uint16)(8388608), (((Uint32)8388608)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -25921, 336, 435, +25921, 336, 434, 0, 0, 0, 0, 0, 0, -25889, 355, 436, +25889, 355, 435, 0, 0, 0, 0, 0, 0, -25889, 338, 437, +25889, 338, 436, 0, 0, 0, 0, 0, 0, -25889, 339, 438, +25889, 339, 437, 0, 0, 0, 0, 0, 0, -25889, 340, 439, +25889, 340, 438, 0, 0, 0, @@ -1997,102 +2010,102 @@ Uint16 const CO1_OD_TBL2[] = { 20157, 356, 7, -15401, 342, 440, +15401, 342, 439, (Uint16)(0), (((Uint32)0)>>16), 0, 0, 0, 0, -10017, 342, 441, +10017, 342, 440, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -26401, 343, 442, +26401, 343, 441, 0, 0, 0, 0, 0, 0, -31785, 343, 443, +31785, 343, 442, 0, 0, 0, 0, 0, 0, -9377, 330, 444, +9377, 330, 443, (Uint16)(1174405120), (((Uint32)1174405120)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -10049, 331, 445, +10049, 331, 444, (Uint16)(100663296), (((Uint32)100663296)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -10049, 332, 446, +10049, 332, 445, (Uint16)(-100663296), (((Uint32)-100663296)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9377, 333, 447, +9377, 333, 446, (Uint16)(83886), (((Uint32)83886)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9377, 344, 448, +9377, 344, 447, (Uint16)(167772160), (((Uint32)167772160)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -15401, 357, 449, +15401, 357, 448, (Uint16)(0), (((Uint32)0)>>16), 0, 0, 0, 0, -9377, 358, 450, +9377, 358, 449, (Uint16)(8388608), (((Uint32)8388608)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9377, 335, 451, +9377, 335, 450, (Uint16)(8388608), (((Uint32)8388608)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -10017, 359, 452, +10017, 359, 451, (Uint16)(13981), (((Uint32)13981)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -26401, 336, 453, +26401, 336, 452, 0, 0, 0, 0, 0, 0, -25761, 346, 454, +25761, 346, 453, 0, 0, 0, 0, 0, 0, -26433, 345, 455, +26433, 345, 454, 0, 0, 0, 0, 0, 0, -26433, 338, 456, +26433, 338, 455, 0, 0, 0, 0, 0, 0, -26433, 339, 457, +26433, 339, 456, 0, 0, 0, 0, 0, 0, -26433, 340, 458, +26433, 340, 457, 0, 0, 0, 0, 0, 0, -26401, 360, 459, +26401, 360, 458, 0, 0, 0, @@ -2103,99 +2116,99 @@ Uint16 const CO1_OD_TBL2[] = { 20156, 362, 7, -25893, 363, 460, +25893, 363, 459, 0, 0, 0, 0, 0, 0, -25893, 364, 461, +25893, 364, 460, 0, 0, 0, 0, 0, 0, -8901, 365, 462, +8901, 365, 461, (Uint16)(14529069), (((Uint32)14529069)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0x01000000), (((Uint32)0x01000000)>>16), -31533, 366, 463, +31533, 366, 462, 0, 0, 0, 0, 0, 0, -31533, 367, 464, +31533, 367, 463, 0, 0, 0, 0, 0, 0, -31533, 368, 465, +31533, 368, 464, 0, 0, 0, 0, 0, 0, -31533, 369, 466, +31533, 369, 465, 0, 0, 0, 0, 0, 0, -11429, 370, 467, +11429, 370, 466, (Uint16)(33554432), (((Uint32)33554432)>>16), (Uint16)(_IQ(2.0)), (((Uint32)_IQ(2.0))>>16), (Uint16)(_IQ(10.0)), (((Uint32)_IQ(10.0))>>16), -11429, 371, 468, +11429, 371, 467, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(_IQ(10)), (((Uint32)_IQ(10))>>16), -8901, 372, 469, +8901, 372, 468, (Uint16)(16777216), (((Uint32)16777216)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -11965, 373, 470, +11965, 373, 469, (Uint16)(1), 0, 0, 0, 0, 0, -15149, 374, 471, +15149, 374, 470, (Uint16)(1), 0, 0, 0, 0, 0, -31661, 375, 472, +31661, 375, 471, 0, 0, 0, 0, 0, 0, -9367, 376, 473, +9367, 376, 472, (Uint16)(20480), (((Uint32)20480)>>16), (Uint16)(2048), (((Uint32)2048)>>16), (Uint16)(10240), (((Uint32)10240)>>16), -31277, 377, 474, +31277, 377, 473, 0, 0, 0, 0, 0, 0, -25893, 378, 475, +25893, 378, 474, 0, 0, 0, 0, 0, 0, -31533, 379, 476, +31533, 379, 475, 0, 0, 0, @@ -2206,139 +2219,139 @@ Uint16 const CO1_OD_TBL2[] = { 20143, 380, 2, -31273, 381, 477, +31273, 381, 476, 0, -53545, 382, 478, +53545, 382, 477, (Uint16)(1), 20132, 383, 7, -15121, 384, 479, +15121, 384, 478, (Uint16)(0), 0, 0, 0, 0, 0, -15121, 385, 480, +15121, 385, 479, (Uint16)(0), 0, 0, 0, 0, 0, -53265, 386, 481, +53265, 386, 480, (Uint16)(255), 0, 0, 0, 0, 0, -53289, 387, 482, +53289, 387, 481, (Uint16)(255), 0, 0, 0, 0, 0, -53265, 388, 483, +53265, 388, 482, (Uint16)(255), 0, 0, 0, 0, 0, -53289, 389, 484, +53289, 389, 483, (Uint16)(255), 0, 0, 0, 0, 0, -9529, 390, 485, +9529, 390, 484, (Uint16)(16777216), (((Uint32)16777216)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9625, 391, 486, +9625, 391, 485, (Uint16)(18454938), (((Uint32)18454938)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9625, 392, 487, +9625, 392, 486, (Uint16)(6990506), (((Uint32)6990506)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -10041, 393, 488, +10041, 393, 487, (Uint16)(100663296), (((Uint32)100663296)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9721, 639, 489, +9721, 639, 488, (Uint16)(75497472), (((Uint32)75497472)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), 20146, 394, 7, -10017, 395, 490, +10017, 395, 489, (Uint16)(67108), (((Uint32)67108)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9505, 396, 491, +9505, 396, 490, (Uint16)(3355443), (((Uint32)3355443)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9505, 397, 492, +9505, 397, 491, (Uint16)(3355443), (((Uint32)3355443)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9985, 398, 493, +9985, 398, 492, (Uint16)(720992), (((Uint32)720992)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9601, 559, 494, +9601, 559, 493, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), 20144, 399, 7, -15241, 400, 495, +15241, 400, 494, (Uint16)(2), (Uint16)(1), (Uint16)(50), 0, 0, 0, -8265, 401, 496, +8265, 401, 495, (Uint16)(5), (Uint16)(0), (Uint16)(0), 0, 0, 0, -24617, 402, 497, +24617, 402, 496, 0, 0, 0, 0, 0, 0, -9129, 403, 498, +9129, 403, 497, (Uint16)(500), (Uint16)(0), (Uint16)(0), 0, 0, 0, -8233, 404, 499, +8233, 404, 498, (Uint16)(36), (Uint16)(0), (Uint16)(1000), 0, 0, 0, -10113, 405, 500, +10113, 405, 499, (Uint16)(1048576), (((Uint32)1048576)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -10145, 406, 501, +10145, 406, 500, (Uint16)(16777), (((Uint32)16777)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -24713, 407, 502, +24713, 407, 501, 0, 0, 0, 0, 0, 0, -11993, 408, 503, +11993, 408, 502, (Uint16)(1), 0, 0, @@ -2346,80 +2359,61 @@ Uint16 const CO1_OD_TBL2[] = { 0, 0, -20107, +20106, 409, -4, -4365, 410, 504, -0, -0, -0, -15117, 411, 505, +2, +15117, 411, 503, (Uint16)(4), -0, -0, -15117, 412, 506, +53693, 412, 504, (Uint16)(0), -0, -0, -15117, 413, 507, +53695, 413, 505, (Uint16)(1), -0, -0, -14477, 414, 508, -(Uint16)(0), -(Uint16)(0), (Uint16)(1), -15117, 590, 509, -(Uint16)(0), -0, -0, +53694, 414, 506, +(Uint16)(256), +53688, 710, 507, +(Uint16)(256), -20147, +20149, 415, 4, -8257, 416, 510, +8257, 416, 508, (Uint16)(81), (Uint16)(0), (Uint16)(0), -16001, 417, 511, +16001, 417, 509, (Uint16)(-14592), (Uint16)(0), (Uint16)(0), -25913, 418, 512, +25913, 418, 510, 0, 0, 0, -8257, 419, 513, +8257, 419, 511, (Uint16)(81), (Uint16)(0), (Uint16)(0), -16001, 420, 514, +16001, 420, 512, (Uint16)(-14592), (Uint16)(0), (Uint16)(0), -25913, 421, 515, +25913, 421, 513, 0, 0, 0, -8257, 422, 516, -(Uint16)(40), -(Uint16)(0), (Uint16)(0), -16001, 423, 517, -(Uint16)(62836), -(Uint16)(0), (Uint16)(0), -25913, 424, 518, +25913, 424, 514, 0, 0, 0, -8225, 425, 519, +8225, 425, 515, (Uint16)(2050), (Uint16)(0), (Uint16)(0), -16001, 426, 520, +16001, 426, 516, (Uint16)(0), (Uint16)(0), (Uint16)(0), -26009, 427, 521, +26009, 427, 517, 0, 0, 0, -9185, 633, 522, -(Uint16)(1500), +16001, 711, 518, +(Uint16)(15), (Uint16)(0), (Uint16)(0), -26105, 634, 523, +25273, 641, 519, 0, 0, 0, @@ -2427,412 +2421,419 @@ Uint16 const CO1_OD_TBL2[] = { 20096, 428, 7, -26417, 429, 524, +26417, 429, 520, 0, 0, 0, 0, 0, 0, -25873, 430, 525, +25873, 430, 521, 0, 0, 0, 0, 0, 0, -10033, 431, 526, +10033, 431, 522, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9489, 432, 527, +9489, 432, 523, (Uint16)(419430), (((Uint32)419430)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -10033, 433, 528, +10033, 433, 524, (Uint16)(100663296), (((Uint32)100663296)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9489, 434, 529, +9489, 434, 525, (Uint16)(12582912), (((Uint32)12582912)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -10033, 435, 530, +10033, 435, 526, (Uint16)(100663296), (((Uint32)100663296)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), 20037, 436, 1, -26421, 437, 531, -26037, 438, 532, -25909, 439, 533, -25813, 440, 534, -25813, 441, 535, -25909, 442, 536, -28141, 613, 537, -28141, 614, 538, +26421, 437, 527, +26037, 438, 528, +25909, 439, 529, +25813, 440, 530, +25813, 441, 531, +25909, 442, 532, +28141, 613, 533, +28141, 614, 534, 20023, 443, 7, -14477, 444, 539, +14477, 444, 535, (Uint16)(0), 0, 0, 0, 0, 0, -14989, 445, 540, +14989, 445, 536, (Uint16)(192), (((Uint32)192)>>16), 0, 0, 0, 0, -14989, 446, 541, +14989, 446, 537, (Uint16)(1359151123), (((Uint32)1359151123)>>16), 0, 0, 0, 0, -14989, 447, 542, +14989, 447, 538, (Uint16)(1359085569), (((Uint32)1359085569)>>16), 0, 0, 0, 0, -14989, 448, 543, +14989, 448, 539, (Uint16)(1359151122), (((Uint32)1359151122)>>16), 0, 0, 0, 0, -14989, 449, 544, +14989, 449, 540, (Uint16)(1359020033), (((Uint32)1359020033)>>16), 0, 0, 0, 0, -53645, 450, 545, +53645, 450, 541, (Uint16)(0), 0, 0, 0, 0, 0, -53685, 451, 546, +53685, 451, 542, (Uint16)(1), 0, 0, 0, 0, 0, -11837, 452, 547, +11837, 452, 543, (Uint16)(0), 0, 0, 0, 0, 0, -10949, 453, 548, +10949, 453, 544, (Uint16)(6710886), (((Uint32)6710886)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -15757, 454, 549, +15757, 454, 545, (Uint16)(50461787), (((Uint32)50461787)>>16), -20000, +20001, 455, 7, -14985, 456, 550, +14985, 456, 546, (Uint16)(1000), (((Uint32)1000)>>16), 0, 0, 0, 0, -11839, 457, 551, +11839, 457, 547, (Uint16)(2), 0, 0, 0, 0, 0, -14473, 458, 552, +14473, 458, 548, (Uint16)(1), 0, 0, 0, 0, 0, -9345, 459, 553, +9345, 459, 549, (Uint16)(9298387), (((Uint32)9298387)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -31369, 460, 554, +31369, 460, 550, 0, 0, 0, 0, 0, 0, -30857, 460, 555, +30857, 460, 551, 0, 0, 0, 0, 0, 0, -25761, 461, 556, +25761, 461, 552, 0, 0, 0, 0, 0, 0, -25729, 462, 557, +25729, 462, 553, 0, 0, 0, 0, 0, 0, -25729, 463, 558, +25729, 463, 554, 0, 0, 0, 0, 0, 0, -53565, 464, 559, +53565, 464, 555, (Uint16)(0), 0, 0, 0, 0, 0, -9217, 465, 560, +9217, 465, 556, (Uint16)(838860), (((Uint32)838860)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(65535), (((Uint32)65535)>>16), -30857, 466, 561, +30857, 466, 557, 0, 0, 0, 0, 0, 0, -30857, 467, 562, +30857, 467, 558, 0, 0, 0, 0, 0, 0, -30857, 468, 563, +30857, 468, 559, 0, 0, 0, 0, 0, 0, -31369, 469, 564, +31369, 469, 560, 0, 0, 0, 0, 0, 0, -30857, 469, 565, +30857, 469, 561, 0, 0, 0, 0, 0, 0, -30857, 470, 566, +30857, 470, 562, 0, 0, 0, 0, 0, 0, -15241, 471, 567, +15241, 471, 563, (Uint16)(0), 0, 0, 0, 0, 0, -15241, 472, 568, +15241, 472, 564, (Uint16)(7), 0, 0, 0, 0, 0, -15241, 472, 569, +15241, 472, 565, (Uint16)(7335), 0, 0, 0, 0, 0, -15753, 472, 570, +15753, 472, 566, (Uint16)(1973415), (((Uint32)1973415)>>16), 0, 0, 0, 0, -25729, 473, 571, +25729, 473, 567, 0, 0, 0, 0, 0, 0, -25729, 474, 572, +25729, 474, 568, 0, 0, 0, 0, 0, 0, +14473, 714, 569, +(Uint16)(0), +0, +0, +0, +0, +0, 20027, 475, 7, -15245, 589, 573, +15245, 589, 570, (Uint16)(0), 0, 0, 0, 0, 0, -25733, 441, 574, +25733, 441, 571, 0, 0, 0, 0, 0, 0, -25765, 461, 575, +25765, 461, 572, 0, 0, 0, 0, 0, 0, -9381, 476, 576, +9381, 476, 573, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -25733, 477, 577, +25733, 477, 574, 0, 0, 0, 0, 0, 0, -11837, 478, 578, +11837, 478, 575, (Uint16)(81), 0, 0, 0, 0, 0, -14989, 479, 579, +14989, 479, 576, (Uint16)(500), (((Uint32)500)>>16), 0, 0, 0, 0, -25765, 480, 580, +25765, 480, 577, 0, 0, 0, 0, 0, 0, -30861, 481, 581, +30861, 481, 578, 0, 0, 0, 0, 0, 0, -4573, 482, 582, +4573, 482, 579, 0, 0, 0, 0, 0, 0, -9349, 459, 583, +9349, 459, 580, (Uint16)(4869970), (((Uint32)4869970)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -30861, 483, 584, +30861, 483, 581, 0, 0, 0, 0, 0, 0, -30861, 484, 585, +30861, 484, 582, 0, 0, 0, 0, 0, 0, -30861, 485, 586, +30861, 485, 583, 0, 0, 0, 0, 0, 0, -30861, 486, 587, +30861, 486, 584, 0, 0, 0, 0, 0, 0, -53567, 487, 588, +53567, 487, 585, (Uint16)(0), 0, 0, 0, 0, 0, -14477, 488, 589, +14477, 488, 586, (Uint16)(10), 0, 0, 0, 0, 0, -30861, 489, 590, +30861, 489, 587, 0, 0, 0, 0, 0, 0, -30861, 490, 591, +30861, 490, 588, 0, 0, 0, 0, 0, 0, -30861, 491, 592, +30861, 491, 589, 0, 0, 0, 0, 0, 0, -30861, 492, 593, +30861, 492, 590, 0, 0, 0, 0, 0, 0, -30861, 493, 594, +30861, 493, 591, 0, 0, 0, @@ -2843,88 +2844,88 @@ Uint16 const CO1_OD_TBL2[] = { 20019, 455, 7, -14977, 494, 595, +14977, 494, 592, (Uint16)(4096), (((Uint32)4096)>>16), 0, 0, 0, 0, -9369, 459, 596, +9369, 459, 593, (Uint16)(9298387), (((Uint32)9298387)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -30849, 460, 597, +30849, 460, 594, 0, 0, 0, 0, 0, 0, -25785, 461, 598, +25785, 461, 595, 0, 0, 0, 0, 0, 0, -25753, 462, 599, +25753, 462, 596, 0, 0, 0, 0, 0, 0, -25753, 463, 600, +25753, 463, 597, 0, 0, 0, 0, 0, 0, -25753, 495, 601, +25753, 495, 598, 0, 0, 0, 0, 0, 0, -9241, 496, 602, +9241, 496, 599, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -15233, 471, 603, +15233, 471, 600, (Uint16)(0), 0, 0, 0, 0, 0, -15745, 472, 604, +15745, 472, 601, (Uint16)(1973415), (((Uint32)1973415)>>16), 0, 0, 0, 0, -15233, 472, 605, +15233, 472, 602, (Uint16)(7), 0, 0, 0, 0, 0, -15233, 472, 606, +15233, 472, 603, (Uint16)(7335), 0, 0, 0, 0, 0, -25753, 473, 607, +25753, 473, 604, 0, 0, 0, 0, 0, 0, -25753, 474, 608, +25753, 474, 605, 0, 0, 0, @@ -2935,165 +2936,265 @@ Uint16 const CO1_OD_TBL2[] = { 20025, 497, 7, -25669, 498, 609, +25669, 498, 606, 0, 0, 0, 0, 0, 0, -32205, 498, 610, +32205, 498, 607, 0, 0, 0, 0, 0, 0, -25669, 499, 611, +25669, 499, 608, 0, 0, 0, 0, 0, 0, -32205, 499, 612, +32205, 499, 609, 0, 0, 0, 0, 0, 0, -30925, 500, 613, +30925, 500, 610, 0, 0, 0, 0, 0, 0, -31693, 500, 614, +31693, 500, 611, 0, 0, 0, 0, 0, 0, -30925, 501, 615, +30925, 501, 612, 0, 0, 0, 0, 0, 0, -31693, 501, 616, +31693, 501, 613, 0, 0, 0, 0, 0, 0, -9285, 502, 617, +9285, 502, 614, (Uint16)(16777), (((Uint32)16777)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -15821, 502, 618, +15821, 502, 615, (Uint16)(16777), (((Uint32)16777)>>16), 0, 0, 0, 0, -9285, 503, 619, +9285, 503, 616, (Uint16)(-190048), (((Uint32)-190048)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -15821, 503, 620, +15821, 503, 617, (Uint16)(-190048), (((Uint32)-190048)>>16), 0, 0, 0, 0, -9285, 504, 621, +9285, 504, 618, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -15821, 504, 622, +15821, 504, 619, (Uint16)(0), (((Uint32)0)>>16), 0, 0, 0, 0, -9285, 505, 623, +9285, 505, 620, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -15821, 505, 624, +15821, 505, 621, (Uint16)(0), (((Uint32)0)>>16), 0, 0, 0, 0, -50253, 506, 625, +50253, 506, 622, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -50253, 507, 626, +50253, 507, 623, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -50253, 508, 627, +50253, 508, 624, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -50253, 509, 628, +50253, 509, 625, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), 20142, 556, 7, -9285, 557, 629, +9285, 557, 626, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9637, 558, 630, +9637, 558, 627, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -9637, 559, 631, +9637, 559, 628, (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), 20149, 399, 7, -12453, 571, 632, +12453, 571, 629, (Uint16)(16777216), (((Uint32)16777216)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -12453, 572, 633, +12453, 572, 630, (Uint16)(5033165), (((Uint32)5033165)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -12613, 573, 634, +12613, 573, 631, (Uint16)(5033165), (((Uint32)5033165)>>16), (Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), -28997, 574, 635, +28997, 574, 632, 0, 0, 0, 0, 0, 0, -28997, 575, 636, +28997, 575, 633, 0, 0, 0, 0, 0, 0, -28837, 536, 637, +28837, 536, 634, 0, 0, 0, 0, 0, 0, -28837, 537, 638, +28837, 537, 635, 0, 0, 0, 0, 0, 0, -30501, 576, 639, +30501, 576, 636, +0, +0, +0, +0, +0, +0, + +20139, +626, +7, +17709, 631, 637, +0, +0, +0, +0, +0, +0, +15149, 627, 638, +(Uint16)(2000), +0, +0, +0, +0, +0, +10661, 628, 639, +(Uint16)(15099494), (((Uint32)15099494)>>16), +(Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), +10661, 629, 640, +(Uint16)(11744051), (((Uint32)11744051)>>16), +(Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), +28837, 630, 641, +0, +0, +0, +0, +0, +0, +12453, 632, 642, +(Uint16)(16777216), (((Uint32)16777216)>>16), +(Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), + +20143, +482, +2, +27681, 482, 643, +0, +11297, 694, 644, +(Uint16)(0), + +20139, +635, +7, +31521, 636, 645, +0, +0, +0, +0, +0, +0, +12793, 637, 646, +(Uint16)(41943040), (((Uint32)41943040)>>16), +(Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), +12793, 638, 647, +(Uint16)(25165824), (((Uint32)25165824)>>16), +(Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), +12793, 640, 648, +(Uint16)(67108864), (((Uint32)67108864)>>16), +(Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), +29177, 634, 649, +0, +0, +0, +0, +0, +0, +15137, 712, 650, +(Uint16)(0), +0, +0, +0, +0, +0, + +20129, +713, +7, +15149, 589, 651, +(Uint16)(0), +0, +0, +0, +0, +0, +12693, 628, 652, +(Uint16)(0), (((Uint32)0)>>16), +(Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), +12693, 629, 653, +(Uint16)(0), (((Uint32)0)>>16), +(Uint16)(0), (((Uint32)0)>>16), (Uint16)(0), (((Uint32)0)>>16), +31533, 570, 654, 0, 0, 0, @@ -3194,34 +3295,37 @@ int16 const CO1_OD_TBL1[] = { 8477, 1759, 9474, 1786, 9478, 1813, -9487, 1836, -9522, 1841, -9524, 1853, -9728, 1860, -12288, 1868, -12544, 1871, -20480, 1894, -20736, 1924, -20737, 2044, -20738, 2173, -20739, 2293, -20741, 2476, -20747, 2632, -20750, 2643, -20754, 2745, -20755, 2793, -20756, 2877, -20758, 2916, -20762, 3003, -20792, 3069, -20816, 3096, -20817, 3189, -20818, 3194, -20821, 3404, -20823, 3605, -20852, 3734, -20869, 3917, -23300, 3947, +9522, 1836, +9524, 1848, +9728, 1855, +12288, 1863, +12544, 1866, +20480, 1889, +20736, 1919, +20737, 2039, +20738, 2168, +20739, 2288, +20741, 2471, +20747, 2627, +20750, 2638, +20754, 2740, +20755, 2788, +20756, 2872, +20758, 2895, +20762, 2970, +20792, 3036, +20816, 3063, +20817, 3156, +20818, 3161, +20821, 3380, +20823, 3581, +20852, 3710, +20869, 3893, +23300, 3923, +23301, 3998, +23302, 4055, +23303, 4066, +23304, 4123, }; Uint16 const co1_SPIrange1rw = CO1_SPI_START_ADDR+0; Uint16 const co1_SPIrange1rwCRC = CO1_SPI_START_ADDR+8; @@ -3230,34 +3334,34 @@ Uint16 const co1_SPIrange1rwpCRC = CO1_SPI_START_ADDR+336; Uint16 const co1_SPIrange1rwps = CO1_SPI_START_ADDR+338; Uint16 const co1_SPIrange1rwpsCRC = CO1_SPI_START_ADDR+338; Uint16 const co1_SPIrange2rw = CO1_SPI_START_ADDR+340; -Uint16 const co1_SPIrange2rwCRC = CO1_SPI_START_ADDR+581; -Uint16 const co1_SPIrange2rwp = CO1_SPI_START_ADDR+583; -Uint16 const co1_SPIrange2rwpCRC = CO1_SPI_START_ADDR+608; -Uint16 const co1_SPIrange2rwps = CO1_SPI_START_ADDR+610; -Uint16 const co1_SPIrange2rwpsCRC = CO1_SPI_START_ADDR+610; -Uint16 const co1_SPIrange3rw = CO1_SPI_START_ADDR+612; -Uint16 const co1_SPIrange3rwCRC = CO1_SPI_START_ADDR+622; -Uint16 const co1_SPIrange3rwp = CO1_SPI_START_ADDR+624; -Uint16 const co1_SPIrange3rwpCRC = CO1_SPI_START_ADDR+624; -Uint16 const co1_SPIrange3rwps = CO1_SPI_START_ADDR+626; -Uint16 const co1_SPIrange3rwpsCRC = CO1_SPI_START_ADDR+626; -Uint16 const co1_SPIrange4rw = CO1_SPI_START_ADDR+628; -Uint16 const co1_SPIrange4rwCRC = CO1_SPI_START_ADDR+628; -Uint16 const co1_SPIrange4rwp = CO1_SPI_START_ADDR+630; -Uint16 const co1_SPIrange4rwpCRC = CO1_SPI_START_ADDR+630; -Uint16 const co1_SPIrange4rwps = CO1_SPI_START_ADDR+632; -Uint16 const co1_SPIrange4rwpsCRC = CO1_SPI_START_ADDR+632; -Uint16 const co1_SPIrange5rw = CO1_SPI_START_ADDR+634; -Uint16 const co1_SPIrange5rwCRC = CO1_SPI_START_ADDR+1058; -Uint16 const co1_SPIrange5rwp = CO1_SPI_START_ADDR+1060; -Uint16 const co1_SPIrange5rwpCRC = CO1_SPI_START_ADDR+1064; -Uint16 const co1_SPIrange5rwps = CO1_SPI_START_ADDR+1066; -Uint16 const co1_SPIrange5rwpsCRC = CO1_SPI_START_ADDR+1066; +Uint16 const co1_SPIrange2rwCRC = CO1_SPI_START_ADDR+577; +Uint16 const co1_SPIrange2rwp = CO1_SPI_START_ADDR+579; +Uint16 const co1_SPIrange2rwpCRC = CO1_SPI_START_ADDR+604; +Uint16 const co1_SPIrange2rwps = CO1_SPI_START_ADDR+606; +Uint16 const co1_SPIrange2rwpsCRC = CO1_SPI_START_ADDR+606; +Uint16 const co1_SPIrange3rw = CO1_SPI_START_ADDR+608; +Uint16 const co1_SPIrange3rwCRC = CO1_SPI_START_ADDR+618; +Uint16 const co1_SPIrange3rwp = CO1_SPI_START_ADDR+620; +Uint16 const co1_SPIrange3rwpCRC = CO1_SPI_START_ADDR+620; +Uint16 const co1_SPIrange3rwps = CO1_SPI_START_ADDR+622; +Uint16 const co1_SPIrange3rwpsCRC = CO1_SPI_START_ADDR+622; +Uint16 const co1_SPIrange4rw = CO1_SPI_START_ADDR+624; +Uint16 const co1_SPIrange4rwCRC = CO1_SPI_START_ADDR+624; +Uint16 const co1_SPIrange4rwp = CO1_SPI_START_ADDR+626; +Uint16 const co1_SPIrange4rwpCRC = CO1_SPI_START_ADDR+626; +Uint16 const co1_SPIrange4rwps = CO1_SPI_START_ADDR+628; +Uint16 const co1_SPIrange4rwpsCRC = CO1_SPI_START_ADDR+628; +Uint16 const co1_SPIrange5rw = CO1_SPI_START_ADDR+630; +Uint16 const co1_SPIrange5rwCRC = CO1_SPI_START_ADDR+1087; +Uint16 const co1_SPIrange5rwp = CO1_SPI_START_ADDR+1089; +Uint16 const co1_SPIrange5rwpCRC = CO1_SPI_START_ADDR+1093; +Uint16 const co1_SPIrange5rwps = CO1_SPI_START_ADDR+1095; +Uint16 const co1_SPIrange5rwpsCRC = CO1_SPI_START_ADDR+1095; Uint16 const co1_first1000 = 0; Uint16 const co1_first2000 = 82; -Uint16 const co1_first3000 = 190; -Uint16 const co1_first4000 = 194; -Uint16 const co1_first5000 = 194; +Uint16 const co1_first3000 = 188; +Uint16 const co1_first4000 = 192; +Uint16 const co1_first5000 = 192; // Таблица групп Uint16 const CO1_TYPE_DEF_TABLE[] = { (Uint16)4,\ @@ -3351,7 +3455,6 @@ Uint16 const CO1_TYPE_DEF_TABLE[] = { (Uint16)4,\ (Uint16)5,\ (Uint16)0,\ - (Uint16)-1,\ (Uint16)10,\ (Uint16)4,\ (Uint16)0,\ @@ -3379,6 +3482,10 @@ Uint16 const CO1_TYPE_DEF_TABLE[] = { (Uint16)27,\ (Uint16)19,\ (Uint16)20,\ + (Uint16)46,\ + (Uint16)2,\ + (Uint16)45,\ + (Uint16)44,\ }; // Таблица CALLBACK-функций //************************************************************** @@ -3474,7 +3581,6 @@ long const CO1_OD_CALLBACK_TBL[]={ 0, // 211Dh.00h 0, // 2502h.00h 0, // 2506h.00h -(long)((void(*)(long))callback_RTC), // 250Fh.00h 0, // 2532h.00h 0, // 2534h.00h 0, // 2600h.00h @@ -3502,6 +3608,10 @@ long const CO1_OD_CALLBACK_TBL[]={ 0, // 5174h.00h 0, // 5185h.00h 0, // 5B04h.00h +0, // 5B05h.00h +0, // 5B06h.00h +0, // 5B07h.00h +0, // 5B08h.00h }; // Массив ссылок для драйвера CANopen двухядерных процессоров diff --git a/Vsrc/main.c b/Vsrc/main.c index d59a801..8cb1191 100644 --- a/Vsrc/main.c +++ b/Vsrc/main.c @@ -26,52 +26,49 @@ #include //для memcpy -TClarke clarke = CLARKE_DEFAULTS; //!<Фазные преобразования -TPark park = PARK_DEFAULTS; //!<Координатные преобразования -TIPark ipark = IPARK_DEFAULTS; //!<Обратные координатные преобразования -TPidReg3 pid_id = PIDREG3_DEFAULTS; //!<Рег. тока по оси d -TPidReg3 pid_iq = PIDREG3_DEFAULTS; //!<Рег. тока по оси q -TPidReg3 pid_ia = PIDREG3_DEFAULTS; //!<Рег. тока якоря ДПТ -TPidReg3 pid_spd = PIDREG3_DEFAULTS; //!<Рег. скорости -TPidReg3_pos pid_pos = PIDREG3_DEFAULTS_POS; //!<Рег. положения -TVhzProf vhz = VHZPROF_DEFAULTS; //!< закон U/f=const -TSM_Sys sm_sys = SM_Sys_DEFAULTS; //!< Главная оболочка для вызова всех модулей -Uint16 disp_group_number = 0; //!< Необходимо для драйвера CANOpen и Unicon -TDataLog dlog = DATALOG_DEFAULTS; //!< Модуль осциллографирования переменных CANOpen -TSM_Protect sm_prot = SM_PROTECT_DEFAULTS; //!< Модуль защит +TClarke clarke = CLARKE_DEFAULTS; //!<Фазные преобразования +TPark park = PARK_DEFAULTS; //!<Координатные преобразования +TIPark ipark = IPARK_DEFAULTS; //!<Обратные координатные преобразования +TPidReg3 pid_id = PIDREG3_DEFAULTS; //!<Рег. тока по оси d +TPidReg3 pid_iq = PIDREG3_DEFAULTS; //!<Рег. тока по оси q +TPidReg3 pid_ia = PIDREG3_DEFAULTS; //!<Рег. тока якоря ДПТ +TPidReg3 pid_spd = PIDREG3_DEFAULTS; //!<Рег. скорости +TPidReg3 pid_pos = PIDREG3_DEFAULTS; //!<Рег. положения +TVhzProf vhz = VHZPROF_DEFAULTS; //!< закон U/f=const +TSM_Sys sm_sys = SM_Sys_DEFAULTS; //!< Главная оболочка для вызова всех модулей +Uint16 disp_group_number = 0; //!< Необходимо для драйвера CANOpen и Unicon +TDataLog dlog = DATALOG_DEFAULTS; //!< Модуль осциллографирования переменных CANOpen +TSM_Protect sm_prot = SM_PROTECT_DEFAULTS; //!< Модуль защит +TSM_Ctrl sm_ctrl = SM_CTRL_DEFAULTS; //!< Главный дискретный автомат, реализует структуру управления +TSM_CmdLogic sm_cmd_logic = SM_CMD_LOGIC_DEFAULTS; //!< Обработка пользовательских команд управления +TSM_Net sm_net = SM_NET_DEFAULTS; //!< Оболочка для вызова сетевых драйверов +TRMPCtrl rmp = V_RMP_CTRL_DEFAULTS; //!< Задатчик интенсивности +TAdcDrv adc = ADC_DRV_DEFAULTS; //!< Модуль АЦП +TPWM_Module pwm = PWM_Module_DEFAULTS; //!< Модуль ШИМ +TDPReCAP DPReCAP = DPRECAP_DEFAULTS; //!< Модуль ДПР на элементах Холла +TposspeedEqep posspeedEqep = POSSPEED_DEFAULTS; //!< Модуль ДПР типа энкодер +TCurPar cur_par = TCUR_PAR_DEFAULTS; //!< Модуль расчета и хранения текущих показателей привода - мощность, скорость +TUserMemory UserMem = USERMEMORY_DEFAULTS; //!< Модуль работы с энергонезависимой памятью. +TUdControl udControl = UD_CONTROL_DEFAULTS; //!<Плавная зарядка ЗПТ через термисторы +TAutoOffset AutoOffset = AUTO_OFFSET_DEFAULTS; //!<Автоматическая подстройка смещения токов АЦП +TSSI_Encoder SSI_Encoder = SSI_ENCODER_DEFAULTS; //!<Драйвер обработки датчика положения с SSI интерфейсом +TRotorObserver RotorObserver = ROTOR_OBSERVER_DEFAULTS; //!<Датчиковый наблюдатель потокосцепления ротора асинхронного двигателя +TCANtoRS CANtoRS = CAN_TO_RS_DEFAULTS; //!<Модуль для работы с драйвером CANopen через UART (RS). Посылки CAN запаковываются в UART +TDrvInterface drv_interface = DRV_INTERFACE_DEFAULTS; //!<Интерфейс длЯ работы с банками аварий, событий и т.п. +TLogger FaultLog = LOGGER_DEFAULTS; //!<Протоколирование аварий +TGlobalTime global_time = GLOBAL_TIME_DEFAULTS; //!<Работа с часами +TFanControl fanControl = FAN_CONTROL_DEFAULTS; //!< Управление вентилятором +TbrakeResistor brakeResistor = BRAKE_RESISTOR_DEFAULTS; //! Управление сливным резистором TBitsToEnumNums pult_faults_lister = BITS_TO_ENUM_NUMS_DEFAULTS; //!<Листалка аварий для Unicon -TSM_Ctrl sm_ctrl = SM_CTRL_DEFAULTS; //!< Главный дискретный автомат, реализует структуру управления -TSM_CmdLogic sm_cmd_logic = SM_CMD_LOGIC_DEFAULTS; //!< Обработка пользовательских команд управления -TSM_Net sm_net = SM_NET_DEFAULTS; //!< Оболочка для вызова сетевых драйверов -TRMPCtrl rmp = V_RMP_CTRL_DEFAULTS; //!< Задатчик интенсивности -TAdcDrv adc = ADC_DRV_DEFAULTS; //!< Модуль АЦП -TPWM_Module pwm = PWM_Module_DEFAULTS; //!< Модуль ШИМ -TDPReCAP DPReCAP = DPRECAP_DEFAULTS; //!< Модуль ДПР на элементах Холла -TposspeedEqep posspeedEqep = POSSPEED_DEFAULTS; //!< Модуль ДПР типа энкодер -TCurPar cur_par = TCUR_PAR_DEFAULTS; //!< Модуль расчета и хранения текущих показателей привода - мощность, скорость -TUserMemory UserMem = USERMEMORY_DEFAULTS; //!< Модуль работы с энергонезависимой памятью. -Tled leds = LED_DEFAULTS; //!< модуль для красивого мигания светодиодами -//TCanBTInterface Can2BTInterface = T_CANBT_INTERFACE_DEFAULTS;//!<Пакетная передача CANopen -TRTCClock RTCclock = RTC_CLOCK_DEFAULTS; //!< Модуль работы с часами реальноговремени. "spi" - по историческим причинам совместимости -TAutoOffset AutoOffset = AUTO_OFFSET_DEFAULTS; //!<Автоматическая подстройка смещения токов АЦП -TSSI_Encoder SSI_Encoder = SSI_ENCODER_DEFAULTS; //!<Драйвер обработки датчика положения с SSI интерфейсом -//TMotorModel model = MOTOR_MODEL_DEFAULTS; //!< Модели электродвигателей для отладки "на столе" в режиме симулятора -TRotorObserver RotorObserver = ROTOR_OBSERVER_DEFAULTS; //!<Датчиковый наблюдатель потокосцепления ротора асинхронного двигателя -TCANtoRS CANtoRS = CAN_TO_RS_DEFAULTS; //!<Модуль для работы с драйвером CANopen через UART (RS). Посылки CAN запаковываются в UART -//TModBus ModBus = MODBUS_DEFAULTS; //!<Драйвер для работы по протоколу MODBUS -//TMBVarsConv MBVarsConv = MBVARSCONV_DEFAULTS;//!< Модуль преобразования данных из формата 16 разрядов Modbus в формат системы управления (IQ 24) -TDrvInterface drv_interface = DRV_INTERFACE_DEFAULTS; //!<Интерфейс длЯ работы с банками аварий, событий и т.п. -TLogger FaultLog = LOGGER_DEFAULTS; //!<Протоколирование аварий -TGlobalTime global_time = GLOBAL_TIME_DEFAULTS; //!<Работа с часами -TRefs refs; //!< Структура с заданиями (токи, скорости) -TCmd cmd = { 0 }; //!< Структура с командами управления -TDrvStatus drv_status = { 0 }; //!< Текущий статус привода -TDrvParams drv_params; //!< Параметры двигателя -TSysSwitches sw; //!< Различные дискретные настройки системы управления +TRefs refs; //!< Структура с заданиями (токи, скорости) +TCmd cmd = { 0 }; //!< Структура с командами управления +TDrvStatus drv_status = { 0 }; //!< Текущий статус привода +TDrvParams drv_params; //!< Параметры двигателя +TSysSwitches sw; //!< Различные дискретные настройки системы управления -Uint32 VendorToken=0x11111111;//!< Уникальный ключ производителя, нужный для программы UniCON и COODEdit для различных наборов текстов разных произхводителей -int drv_status_code; //!<Статус системы управления в виде константы (ГОТОВ, РАБОТА и т.п.) +Uint32 VendorToken=0x11111111; //!< Уникальный ключ производителя, нужный для программы UniCON и COODEdit для различных наборов текстов разных произхводителей +int drv_status_code; //!<Статус системы управления в виде константы (ГОТОВ, РАБОТА и т.п.) //Переменные для отладки - выведены в словарь CANOpen, //В них можно присваивать любую другую переменную и наблюдать её @@ -216,11 +213,7 @@ void CAP0_IRQHandler(void) //Засекает время между этим импульсом и предыдущими для расчета интерполятора угла и частоты вращения (скорости) DPReCAP.CAP1Calc(&DPReCAP); - //Подтверждение прерываний - ECAP0->ECCLR_bit.CEVT0 = 1; - ECAP0->ECCLR_bit.CEVT1 = 1; - ECAP0->ECCLR_bit.INT = 1; - + //Подтверждение прерываний производится в 10 кГц прерывании } //!Прерывание, возникающее по событиям захвата модуля CAP1 @@ -247,10 +240,7 @@ void CAP1_IRQHandler(void) DPReCAP.Angle6Calc(&DPReCAP); DPReCAP.CAP2Calc(&DPReCAP); - //Подтверждение прерываний - ECAP1->ECCLR_bit.CEVT0 = 1; - ECAP1->ECCLR_bit.CEVT1 = 1; - ECAP1->ECCLR_bit.INT = 1; + //Подтверждение прерываний производится в 10 кГц прерывании } @@ -278,10 +268,7 @@ void CAP2_IRQHandler(void) DPReCAP.Angle6Calc(&DPReCAP); //если убрать, то в момент прихода метки на один период ШИМ косяк, так как прерывание посчиталось, а Angle6Calc нет DPReCAP.CAP3Calc(&DPReCAP); - //Подтверждение прерываний - ECAP2->ECCLR_bit.CEVT0 = 1; - ECAP2->ECCLR_bit.CEVT1 = 1; - ECAP2->ECCLR_bit.INT = 1; + //Подтверждение прерываний производится в 10 кГц прерывании } //!Прерывание, возникающее по событию реперной метки(индекса) модуля QEP diff --git a/cood.xml b/cood.xml index b26b8c7..4b8e890 100644 --- a/cood.xml +++ b/cood.xml @@ -2861,12 +2861,6 @@ - - - - - - @@ -3667,42 +3661,36 @@ - - - - - - - + - - - + + + - - - + + + - - - + + + + + + + + + - - - - - - @@ -3745,54 +3733,42 @@ - - - - - - - - - - - - - + - - + + - - + + - - + + - - - - - + + + + + - - - - + + + + - + @@ -4111,6 +4087,13 @@ + + + + + + @@ -4543,6 +4526,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/system_K1921VK035.c b/src/system_K1921VK035.c index 9175bc2..d5885e9 100644 --- a/src/system_K1921VK035.c +++ b/src/system_K1921VK035.c @@ -162,19 +162,41 @@ void FPUInit() // Разрешение тактирования всей периферии void PeripheralClockEnable(){ - // Разрешение клоков + // Разрешение тактирования периферии RCU->HCLKCFG = 0b00000111; // CAN, GPIOA, GPIOB RCU->PCLKCFG = 0b0000111111111111; // PWM, CAP, QEP, I2C таймеры - RCU->UARTCFG[1].UARTCFG_bit.CLKEN = 1;//включили тактирование UART - RCU->UARTCFG[1].UARTCFG_bit.CLKSEL = 1;//PLL = 100МГц - RCU->UARTCFG[1].UARTCFG_bit.DIVEN = 1;//включить делитель - RCU->UARTCFG[1].UARTCFG_bit.DIVN = 1;//делим на 4 по формуле N = 2*(DIVN+1) - RCU->UARTCFG[1].UARTCFG_bit.RSTDIS = 1; //вывели из резета + // Настройка тактирования UART + //RCU->UARTCFG[1].UARTCFG_bit.CLKEN = 1; // включили тактирование UART + //RCU->UARTCFG[1].UARTCFG_bit.CLKSEL = 1; // Источник тактирования PLL = 100МГц + //RCU->UARTCFG[1].UARTCFG_bit.DIVEN = 1; // включить делитель + //RCU->UARTCFG[1].UARTCFG_bit.DIVN = 1; // делим на 4 по формуле N = 2*(DIVN+1), итого частота тактирования равна 25 МГц + //RCU->UARTCFG[1].UARTCFG_bit.RSTDIS = 1; // вывели из резета + RCU->UARTCFG[1].UARTCFG = (1 << RCU_UARTCFG_UARTCFG_CLKEN_Pos) | + (1 << RCU_UARTCFG_UARTCFG_CLKSEL_Pos) | + (1 << RCU_UARTCFG_UARTCFG_DIVEN_Pos) | + (1 << RCU_UARTCFG_UARTCFG_DIVN_Pos) | + (1 << RCU_UARTCFG_UARTCFG_RSTDIS_Pos); + + // Настройка тактирования SPI + //RCU->SPICFG_bit.CLKEN = 1; // включили тактирование SPI + //RCU->SPICFG_bit.CLKSEL = 1; // Источник тактирования PLL = 100МГц + //RCU->SPICFG_bit.DIVEN = 1; // включить делитель + //RCU->SPICFG_bit.DIVN = 1; // делим на 4 по формуле N = 2*(DIVN+1), итого частота тактирования равна 25 МГц + //RCU->SPICFG_bit.RSTDIS = 1; //вывели из резета + RCU->SPICFG = (1 << RCU_SPICFG_CLKEN_Pos) | + (1 << RCU_SPICFG_CLKSEL_Pos) | + (1 << RCU_SPICFG_DIVEN_Pos) | + (1 << RCU_SPICFG_DIVN_Pos) | + (1 << RCU_SPICFG_RSTDIS_Pos); // Снятие ресета RCU->HRSTCFG = 0b00000111; // CAN, GPIOA, GPIOB RCU->PRSTCFG = 0b0000111111111111; // PWM, CAP, QEP, I2C таймеры + + // Разрешение всех GPIO + GPIOA->DENSET = 0xFFFF; + GPIOB->DENSET = 0xFFFF; } void SystemInit(void)