unit SHIM_N; interface uses gltype, glproc, mathobj, Classes,SysUtils, MVTU_TLB; function TElectro_SHIM_N (at,adt:RealType;var time,dtime:RealType; var AU,AY:TPtrExt;var AX,ADX:array of RealType; var CU,CY : TIntArray;var Prop:TPtrArray;var Vars:Pointer; Action:Integer):Integer;export; //-------------------------------------------------------------// implementation //-------------------------------------------------------------// type PElectro_SHIM_nRec = ^TElectro_SHIM_nRec; TElectro_SHIM_nRec = record T0 : ^realtype; Umax : ^realtype; end; function TElectro_SHIM_NConvert(Action: integer; Vars: Pointer; Prop: TPtrArray; PropStr: TStringList; BlockId: integer; var MVTU: IMVTU_Server):integer; const RecName:PChar = 'ШИМ несимметричный'; var Res: integer; begin case Action of //Возвращаем ссылку на имя записи в базе МВТУ-4 cnv_GetRecName: Result:=integer(RecName); cnv_Convert: try //Присваиваем параметры для блока MVTU.SetBlockProp(BlockId,'T0',PChar(PropStr[0]),Res); MVTU.SetBlockProp(BlockId,'Umax',PChar(PropStr[1]),Res); finally end; end; end; function TElectro_SHIM_N;export; var i : Integer; pila: RealType; begin Result := 0; case Action of //f_EditErr -- проверка на стадии интегрирования f_GetConvertFuncAdr: Result:=integer(@TElectro_SHIM_NConvert); f_EditErr : if (PElectro_SHIM_nRec(Prop.arr)^.T0^ < 0) then Result:=er_RangeMin; f_GetDeriCount: Result := 0; //дифф. переменных нет f_GetInit : Result := 0; //блок не приоритетный? f_GetCount : begin for i:=0 to (CY.Count-1) do CY.arr^[i]:=1; // размер выходов строго определён for i:=0 to (CU.Count-1) do CU.arr^[i]:=1; // и входов тоже ( 1 ) end; f_InitState, f_GoodStep : with PElectro_SHIM_nRec(Prop.arr)^ do begin //считаем значение функции пилы при текущем времени: // и "разнормируем" пилу pila := frac (at / T0^) * Umax^; //сравниваем пилу и сигнал на входе: if (abs(AU.Ptr(0).arr^[0])) >= pila then if AU.Ptr(0).arr^[0] > 0 then AY.Ptr(0).arr^[0] := Umax^ else if AU.Ptr(0).arr^[0] < 0 then AY.Ptr(0).arr^[0] := -Umax^ else AY.Ptr(0).arr^[0] := 0 else AY.Ptr(0).arr^[0] := 0; end; end; // case end; //TElectro_SHIM_N end.