unit GlType; {=================================================================} { Версия файла 3.0.000 } { от 4 декабря 2002 г. } {==========================} interface {==========================} uses Windows, MVTU_TLB; type {------------------------------------------------------------------------- Основные типы скалярных данных --------------------------------------------------------------------------} RealType = Double; TInteger = Integer; TSmallInt = SmallInt; TString = ShortString; TLongInt = LongInt; TByte = Byte; TBool = Boolean; TComplex = packed record Re, Im : Double; end; //Тип - структура с переменными необходимыми для моделирования TModelODEStruct = packed record newstep: realtype; //Новый прогнозный шаг интегрирования fsetstep: boolean; //Флаг - установить новый шаг интегрирования end; PModelODEStruct = ^TModelODEStruct; //Тип - запись с параметрами интегрирования TRunParamRec = packed record Time : RealType;{нет в диалоге} Step : RealType;{нет в диалоге} OutInd : Integer; {нет в диалоге} {Основные параметры интегрирования} MethInd : Integer; FullTime : RealType; MinStep : RealType; MaxStep : RealType; Step_Out : RealType; Tol : RealType; {Установки процесса интегрирования} InitOutVal : RealType; ItInd : Integer; ItCount : Integer; AbsError : RealType; Zero : RealType; FunMax : RealType; TabRez : Boolean; {Скорость моделирования} IsRealTime : Boolean; TimeScale : RealType; {Стационарное состояние} SteadyInd : Integer; IsSteady : Boolean; {Архивирование результатов расчета} IsReadRez : Boolean;{нет в диалоге} FileReadRez : String; {нет в диалоге} IsWriteRez : Boolean; IsAddRez : Boolean; FileRez : String; {Рестарт расчета} IsRstRead : Boolean; IsRstWrite : Boolean; FileReadRst : String; FileWriteRst : String; StepRst : RealType; {Расчет на удаленном сервере} IsRemote : Boolean; RemoteAdres : String; RemotePort : Integer; RemoteName : String; RemotePswd : String; RemTimeStep : RealType; end; PRunParamRec = ^TRunParamRec; //Тип - структура адресов передаваемая в блок при его создании TStartRecord = packed record RunParams: PRunParamRec; ModelVars: PModelODEStruct; end; const {------------------------------------------------------------------------- Сообщения --------------------------------------------------------------------------} wm_First = $0000; { $0000-$7FFF window messages } wm_User = $0400; WM_Tab = WM_USER+2; WM_STOPRUN = WM_USER+3; WM_PAUSERUN = WM_USER+4; WM_SetupBlockInfo = WM_USER+5; WM_STOPOPTRUN = WM_USER+6; WM_GOTOPAGEDOWN = WM_USER+7; WM_RUNPACKAGE = WM_USER+8; WM_SetEnabledMenu = WM_USER+9; WM_CLOSE_MAIN_WINDOW = WM_USER+34; {------------------------------------------------------------------------- Флаги основных типов блоков --------------------------------------------------------------------------} t_none = 0; {Сервисный блок, в расчете не участвует} t_src = 1; {Блок-источник сигнала} t_din = 2; {Динамический блок} t_dis = 3; {Дискретный блок с состояниями} t_fun = 4; {Функциональный блок} t_dst = 5; {Блок-приемник информации} t_del = 6; {Блоки запаздывания} t_ext = 7; {Блоки-экстраполяторы} t_der = 8; {Блоки-производные} t_imp = 9; {Блоки-импортеры данных} t_exp = 10; {Блоки-экспортеры данных} t_nln = 11; {Блоки-решатели нелинейных уравнений} t_tpfn = -1; {Теплогидравлический узел} t_tpfj = -2; {Теплогидравлическая связь} {------------------------------------------------------------------------- Флаги типов портов --------------------------------------------------------------------------} p_none = 0; //Общий p_tpf = 1; //Теплогидравлическая связь p_t = 2; //Температура p_p = 3; //Давление p_g = 4; //Расход p_qv = 5; //Объемное энерговыделение p_T_left = 6; //ГУ 1-го рода по теплу слева p_qf_left = 7; //ГУ 2-го рода по теплу слева p_alf_left = 8; //ГУ 3-го рода по теплу слева p_T_right = 9; //ГУ 1-го рода по теплу справа p_qf_right = 10; //ГУ 2-го рода по теплу справа p_alf_right = 11; //ГУ 3-го рода по теплу справа p_Tarr = 12; //Массив температур p_tavr = 13; //Средняя температура p_qvx = 14; //Форм-функция объемного энерговыделения p_M = 15; // p_qf = 16; //Тепловой поток, Вт p_alf = 17; // p_Parr = 18; //Массив давлений p_dP = 19; //Перепад давления p_PT = 20; //ГУ в узле (Р и Т) p_GH = 21; //Подпитка в узел p_GdH = 22; //Тепловая мощность канала {------------------------------------------------------------------------- Флаги ошибок во время интегрирования --------------------------------------------------------------------------} errFirst = 100; er_IterConv = 1; {Итерационный процесс не сходится} er_AccuracyError = 2; {Точность не обеспечивается } er_MatrTranp = 3; {Попытка обращения вырожденной матрицы} er_DerivsOverflow = 4; {Переполнение по производным} er_hideInPort = 7; {вход блока связан с выключенным из расчета блоком} er_noInOutCount = 8; {невозможно привести в соответствие размерность входов-выходов} er_noInPort = 9; {найден незадействованный входной порт} er_neginp = 10; {недопустимый отрицательный входной сигнал} er_negLog = 11; {отрицательное значение под логарифмом} er_negPow = 12; {возведение в дробную степень отрицательного числа} er_negSqrt = 13; {отрицательный аргумент в функции извлечения корня} er_zerodivide = 14; {деление на ноль} er_overflow_y = 15; {значение переменной больше максимально допустимой величины} er_noEvalProp = 16; {невозможно вычислить параметр в блоке} er_noGlVarFind = 17; {глобальная переменная связана с несуществующим выходом} er_nilGlVar = 18; {в блоке "из памяти" не подсоединена переменная} er_opt_MaxFunEval = 19; {превышено максимальное число вычислений функции} er_opt_InitVal = 20; {начальные значения параметров не удовлетворяют ограничениям} er_opt_Eps = 21; {минимальные приращения по параметрам меньше заданных} er_Count = 22; {Размерность массива не соответствует требуемой} er_RangeMax = 23; {Введенное значение больше максимального} er_RangeMin = 24; {Введенное значение меньше минимального} er_RealConvert = 25; {Введено не число} er_IntConvert = 26; {Введено не целое значение} er_MatrixCol = 27; {Размерность столбцов в матрице неодинакова} er_MaxCount = 28; {Размер массива больше максимально возможного} er_negTime = 29; {Отрицательное время интегрирования} er_empty = 30; {Пустая строка} er_parzero = 31; {Параметр в блоке не может быть равен 0} er_parzeroneg = 32; {Параметр в блоке не может быть отрицателен или равен 0} er_parzerodif = 33; {Разность параметров в блоке не может быть равна 0} er_noFileExist = 34; {Файл не существует} er_WrongIndex = 35; {Индекс элемента массива вне диапазона индексов массива} er_EditFatal = 36; {Неизвестная ошибка в параметрах блока} er_MaxBlocks = 37; {Превышено допустимое число блоков} er_MaxDinamic = 38; {Превышено допустимое число динамических переменных} er_noRunFun = 39; {Не подсоединена Run-функция} er_noEditFun = 40; {Не подсоединена Edit-функция} er_NullDet = 41; {Нулевой определитель матрицы} er_MaxIter = 42; {Итерации не сходятся} er_noRstFun = 43; {Не подсоединена функция для рестарта} er_ReadFile = 44; {Ошибка при чтении файла} er_WriteFile = 45; {Ошибка при записи файла} er_SmallFileSize = 46; {Размер блока данных в файле мал} er_MaxLine = 47; {Превышен допустимый размер линии данных} er_PauseRun = 48; {Пауза по требованию блока} er_noExtDll = 49; {Не подгружена внешняя dll-библиотека} er_noExtRunFun = 50; {Во внешней dll-библиотеке не найдена Run-функция} er_InOutFatal = 51; {Ошибка ввода-вывода} er_noDirExist = 52; {Каталог отсутствует} er_ExtRunFatal = 53; {Ошибка во внешней dll-библиотеке} er_Order = 54; {Порядок числителя больше порядка знаменателя} er_OrderMin = 55; {Порядок меньше минимального} er_FindLoop = -56; {'Найдены алгебраические петли'} er_FileRealConvert= 57; {В файле считано не число} er_FileInvalidOper= 58; {В файле считана неизвестная операция} er_noOptParams = 59; {Не заданы оптимизируемые параметры} er_noOptCryts = 60; {Не заданы критерии оптимизации} er_InvalidBlockIndex=61; {В библиотеке отсутствует блок такого типа} er_ConturLinks =62; //'Ошибка формирования теплогидравлическго контура' er_noFileRstDirExist=63; {Заданный каталог файла рестарта не существует} er_noFileRstExist =64; {Файл рестарта не существует} er_noFileRezDirExist=65; {Заданный каталог файла c результатами расчета не существует} er_noFileRezExist =66; {Файл c результатами расчета не существует} er_UnknownSort = 90; {Неизвестная ошибка при сортировке блоков} er_UnknownInit = 91; {Неизвестная ошибка при инициализации} er_UnknownInitState=92; {Неизвестная ошибка при расчете начального состояния} er_UnknownGlParams= 93; {Неизвестная ошибка в глобальных параметрах главного окна} er_UnknownRun = 94; {Неустановленная ошибка расчета} er_InitGlobals = 95; {Начальные значения внешних данных заданы неправильно} er_AfterStopRun = 96; {Ошибка при останове расчета} er_intoverflow = 97; //'значение целой переменной больше максимально допустимой величины'; er_underflow = 98; //'значение переменной меньше допустимой величины'; er_accessviolation=99; //'ошибка доступа к памяти'; er_VarSys =100; {Начало кодов ошибок в интерпретаторе} erNoError = 0; { Ошибки времени выполнения } ermDivZero = 1; ermOverflo = 2; ermNegPower = 3; ermArgWrong = 4; ermMinStep = 5; { Ошибки интерпретации } ercDuplVar = 6; ercEqualExp = 7; ercUnknVar = 8; ercUnknFun = 9; ercSemiExp = 10; ercCommaExp = 11; ercVarExp = 12; ercRealExp = 13; ercDynCount = 14; ercArrSize = 15; ercMaxVars = 16; ercLastVarSys = 16; er_heap =200; //'ошибка выделения кучи'; er_InvalidOp =201; //'неизвестная операция с плавающей запятой'; er_InvalidPointer =202; //'неизвестная операция с указателями'; er_OutOfMemory =203; //'Ошибка при попытке выделить память'; er_StackOverflow =204; //'Переполнение стека'; er_TCP_Client_noConnect = -301;//'TCP/IP - клиент не может установить связь с сервером'; er_Common_Connect_Common =321;//'Не подключен COMMON-блок'; er_Common_Connect_Aliase =322;//'В COMMON-блоке не подключен список переменных'; er_Common_Connect_Name =323;//'В списке переменных COMMON-блока не найдено имя переменной'; er_StopRun = 1001; {Останов по требованию блока} er_AccuracyWarning= -5; {Заданная точность не обеспечивается} er_InOutWarning = -51; {Ошибка ввода-вывода} {------------------------------------------------------------------------- Флаги типов вызова информациной функции библиотеки --------------------------------------------------------------------------} i_GetBlocksCount = 0; i_GetBlockIndex = 1; i_GetBlockType = 2; i_GetBlockName = 3; i_GetInputCount = 4; i_GetOutPutCount = 5; i_GetParamsCount = 6; i_GetHelpIndex = 7; i_GetHelpName = 8; i_GetBMPName = 10; i_GetChild = 11; i_GetRUNName = 12; i_GetRstName = 13; i_GetEditName = 14; i_GetEditDLLName = 15; i_GetBlockHint = 16; i_GetBlockCaption = 17; i_GetParamCaption = 18; i_GetParamValue = 19; i_GetParamValues = 20; i_GetPageName = 21; i_GetParamMin = 22; i_GetParamMax = 23; i_GetParamType = 24; i_GetParamCount = 25; i_GetParamAct = 26; i_GetInPortSides = 28; i_GetOutPortSides = 29; i_GetInPortTypes = 30; i_GetOutPortTypes = 31; i_GetInPortWTypes = 32; i_GetOutPortWTypes= 33; i_GetFuncsCount = 40; i_GetFuncName = 41; i_GetFuncArgCount = 42; i_GetFuncRUNName = 43; {------------------------------------------------------------------------- Флаги типов вызова главной функции блока --------------------------------------------------------------------------} f_GetCount = 1; f_UpdateOuts = 2; f_GoodStep = 3; f_InitState = 4; f_GetDeri = 5; f_GetDeriCount = 6; f_Stop = 7; f_GetStateCount = 8; f_GetInit = 9; f_GetState = 10; f_InitMem = 11; f_InitObjects = 13; f_SetOuts = 14; f_SetDeriInd = 15; f_TryStep = 16; f_NextStep = 17; f_InitConturObj = 18; f_Picture = 19; f_Create = 20; f_Free = 21; f_EditErr = 22; f_UpdateJacoby = 23; f_JacobyState = 24; f_GetDelayTime = 25; f_GetTime = 26; f_ReadRst = 27; f_WriteRst = 28; f_InitTime = 29; f_RestoreOuts = 30; f_ReadRez = 31; f_WriteRez = 32; f_HaveRst = 33; f_InitPhg = 34; f_InitContur = 35; f_ReadStates = 36; f_WriteStates = 37; f_StatesCount = 38; f_GetInPortTypes= 39; f_GetOutPortTypes= 40; f_GetConvertFuncAdr = 41; //По этому флагу функция блока возвращает адрес функции конверсии {------------------------------------------------------------------------- Флаги типов вызова функции редактирования параметров блока --------------------------------------------------------------------------} e_Add = $0001; e_Free = $0002; e_Change = $0004; e_Edit = $0008; e_Valid = $0010; e_inport = $0020; e_outport = $0040; e_save = $0080; e_load = $0100; e_afteredit = $0200; {------------------------------------------------------------------------- Флаги фаз процессов моделирования, оптимизации --------------------------------------------------------------------------} run_Edit = 0; run_Start = 1; run_Stop = 2; run_Pause = 3; run_Continue = 4; run_Update = 5; run_Init = 6; run_InitState = 7; run_Run = 8; run_OptRun = 9; run_OptStop = 10; run_ReadRst = 11; //Флаги вызова функции конверсии блока cnv_GetRecName = 1; //Получить имя записи в библиотеке МВТУ-4 cnv_Convert = 2; //Собственно конвертация данных в МВТУ-4, указывается BlockId {------------------------------------------------------------------------- Размеры массивов действительных чисел и указателей --------------------------------------------------------------------------} MaxInt = 100000000; ArraySize = MaxInt div SizeOf(RealType)-1; ArrayPtrSize = MaxInt div SizeOf(Pointer)-1; SOfS = SizeOf(Single); SOfR = SizeOf(RealType); SOfI = SizeOf(TInteger); SOfsI = SizeOf(TSmallInt); SOfL = SizeOf(TLongInt); SOfBy = SizeOf(Byte); SOfW = SizeOf(Word); SOfP = SizeOf(Pointer); SOfPt = SizeOf(TPoint); SOfB = SizeOf(Boolean); SOfCplx = SizeOf(TComplex); SOfExt = SizeOf(Extended); type {------------------------------------------------------------------------- Типы данных --------------------------------------------------------------------------} PExtended = ^Extended; PRealType = ^RealType; PDouble = ^Double; PSgl = ^Single; PReal = ^Real; PInteger = ^Integer; PSmallInt = ^TSmallInt; PLongInt = ^TLongInt; PByte = ^Byte; PWord = ^Word; PBoolean = ^Boolean; PPointer = ^Pointer; PSglArr = ^TSglArr; PRealArr = ^TRealArr; PExtArr = ^TExtArr; PComplexArr = ^TComplexArr; PPRealArr = ^TPRealArr; PPntArr = ^TPntArr; PPtrArr = ^TPtrArr; PIntArr = ^TIntArr; PLongIntArr = ^TLongIntArr; PByteArr = ^TByteArr; PSmallIntArr= ^TSmallIntArr; PBoolArr = ^TBoolArr; PComplexArray = ^TComplexArray; PExtendedArray= ^TExtendedArray; PSglPtrArr = ^TSglPtrArr; PExtPtrArr = ^TExtPtrArr; PPtrPtrArr = ^TPtrPtrArr; PIntPtrArr = ^TIntPtrArr; PBoolPtrArr = ^TBoolPtrArr; PSglPtr2Arr = ^TSglPtr2Arr; PExtPtr2Arr = ^TExtPtr2Arr; PIntPtr2Arr = ^TIntPtr2Arr; matrix = PExtPtrArr; imatrix = PIntPtrArr; Complex = TComplex; PPRealType = ^PRealType; PPReal = ^PReal; PPInteger = ^PInteger; ArrayType = array [1..ArraySize ] of RealType; ArrayPtrType = array [1..ArrayPtrSize] of Pointer; TSglArr = array [0..ArraySize ] of Single; TRealArr = array [0..ArraySize ] of Real; TExtArr = array [0..ArraySize ] of RealType; TComplexArr = array [0..ArraySize div 2] of TComplex; TPntArr = array [0..ArrayPtrSize] of TPoint; TPtrArr = array [0..ArrayPtrSize] of Pointer; TPRealArr = array [0..ArrayPtrSize] of PRealType; TIntArr = array [0..MaxInt-1 ] of Integer; TLongIntArr = array [0..ArrayPtrSize] of LongInt; TByteArr = array [0..MaxInt-1 ] of TByte; TSmallIntArr = array [0..MaxInt-1 ] of TSmallInt; TBoolArr = array [0..MaxInt-1 ] of Boolean; TComplexArray= array [0..ArraySize ] of TComplex; TExtendedArray=array [0..ArraySize ] of Extended; TSglPtrArr = array [0..ArrayPtrSize] of PSglArr; TExtPtrArr = array [0..ArrayPtrSize] of PExtArr; TPtrPtrArr = array [0..ArrayPtrSize] of PPtrArr; TIntPtrArr = array [0..ArrayPtrSize] of PIntArr; TBoolPtrArr = array [0..ArrayPtrSize] of PBoolArr; TSglPtr2Arr = array [0..ArrayPtrSize] of PSglPtrArr; TExtPtr2Arr = array [0..ArrayPtrSize] of PExtPtrArr; TIntPtr2Arr = array [0..ArrayPtrSize] of PIntPtrArr; PDirRec = ^TDirRec; TDirRec = record ExeDir:String; CurPrjDir,PrjDir,SearchPath:String; {$IFNDEF Demo} SaveBackup, {$ENDIF} IsCurrentPrjDir:Boolean; end; const nul = #0; var ti,dt,tfinal : PRealType; OutStepOut : PRealType; OutIndex : PInteger; ptime, pdtime, ptimefinal : PPRealType; pCount : PPInteger; pIndex : PPInteger; p_DirRec : PDirRec; FText : TextFile; MachEps : RealType; MachNul : RealType; p_ch : array[0..254] of Char; DirRec : TDirRec; ShowError : Boolean; fDrawRect : Boolean; fDrawMacro : Boolean; ErrOldPrj : Boolean; ErrParamsCnt : Boolean; MainWPalete : Boolean; ShowStartMsg : Boolean; AutoSplain : boolean = True; MaxRecentFile: integer = 5; TextBegin : PChar; ErrorState : Integer; { Код ошибки } ErrorStart : Integer; { Начало ошибки в тексте } ErrorLength : Integer; { Длина ошибки в тексте } ErrorVarName : String; { Имя переменной в которой произошла ошибка } {$IFDEF EDU} {$I Blocks.inc} type TRTArr = array [0..maxDinBlocks+maxLoops] of RealType; {$ENDIF} type TExtnlSpecFunctn = FUNCTION(Args:PExtArr;Err:integer):RealType; TOptStopFun = FUNCTION:Boolean; TVersionType = (old_28, old_27, old_26, old_25, old_24, old_23, old_22, old_21, old_20, old_19, old_18, old_17, old_16, old_15, old_14, old_13, old_12, old_11, old_10, old_9, old_8, old_7, old_6, old_5, old_4, old_3, old_2, old_1, old_0, old_00, old_01, old_02, old_03, old_04, old_05, old_06, old_2002, old_2003, old_2003_1, old_2004_1, old_2006_3, V_Last); const Version : TVersionType = V_Last; {--------------------------------------------------------------------------} IMPLEMENTATION {--------------------------------------------------------------------------} END.