def PartialDynamicSystem(self,ieq,variable): """ returns dynamical system blocks associated to output variable """ if ieq==0: # U1=0 if variable==self.physical_nodes[0].variable: v=Step('Ground',0) return[Gain(v,variable,1)]
""" import bms from bms.signals.functions import Step, Sinus from bms.blocks.continuous import Gain, ODE, Sum, Subtraction, Product, WeightedSum from bms.blocks.nonlinear import CoulombVariableValue, Saturation, Coulomb Cmax = 300 # Max clutch torque handling I1 = 1 I2 = 0.25 fv1 = 0.01 fv2 = 0.01 #e=bmsp.Step(1.,'e') cc = Sinus(('Brake command', 'cc'), 0.5, 0.1, 0, 0.5) it = Step(('Input torque', 'it'), 100) rt = Step(('Resistant torque', 'rt'), -80) tc = bms.Variable(('brake Torque capacity', 'Tc')) bt = bms.Variable(('brake torque', 'bt')) w1 = bms.Variable(('Rotational speed shaft 1', 'w1')) #dw12=bms.Variable(('Clutch differential speed','dw12')) st1 = bms.Variable(('Sum torques on 1', 'st1')) et1 = bms.Variable(('Sum of ext torques on 1', 'et1')) b1 = Gain(cc, tc, Cmax) b2 = WeightedSum([it, rt], et1, [1, 1]) b3 = CoulombVariableValue(et1, w1, tc, bt, 0.1) #b3=Coulomb(it,dw12,ct,150) b4 = ODE(st1, w1, [1], [fv1, I1])
#I2=Sinus(('input','i'),100.) #O2=bms.Variable(('Output','O'))# #b=ODE(I2,O2,[0,1],[1]) #ds2=bms.DynamicSystem(15,3000,[b]) #ds2.Simulate() #ds2.PlotVariables() #print(b.Mi,b.Mo) #print() #============================================================================== # Feedback with derivative for stability test #============================================================================== I = Step(('input', 'i'), 100.) AI = bms.Variable(('adapted input', 'ai'), [100.]) dI = bms.Variable(('error', 'dI')) O = bms.Variable(('Output', 'O')) # F = bms.Variable(('Feedback', 'F')) # b1 = Gain(I, AI, Ka) b2 = WeightedSum([AI, dI], F, [1, -1]) b3 = ODE(O, dI, [1, tau], [Kb]) b4 = Gain(F, O, 1 / Kc) # #ds. ds = bms.DynamicSystem(0.1, 20, [b1, b2, b3, b4]) ds.Simulate() ds.PlotVariables([[I, O, dI, F]])
from bms.blocks.continuous import Gain, ODE, Sum, Subtraction, Product from bms.blocks.nonlinear import Coulomb, Saturation R = 0.3 L = 0.2 J = 0.2 k = 0.17 Tr = 3 # Torque requested on motor output Gc = 8 # Gain corrector tau_i = 3 Umax = 48 # Max voltage motor # Imax=10# Max intensity motor # e=bmsp.Step(1.,'e') Wc = Step(('Rotationnal speed command', 'wc'), 100.) dW = bms.Variable(('delta rotationnal speed', 'dW')) Up = bms.Variable(('Voltage corrector proportionnal', 'Ucp')) Ui = bms.Variable(('Voltage corrector integrator', 'Uci')) Uc = bms.Variable(('Voltage command', 'Uc')) Um = bms.Variable(('Voltage Input motor', 'Uim')) e = bms.Variable(('Counter electromotive force', 'Cef')) Uind = bms.Variable(('Voltage Inductor', 'Vi')) Iind = bms.Variable(('Intensity Inductor', 'Ii')) Tm = bms.Variable(('Motor torque', 'Tm')) Text = bms.Variable(('Resistant torque', 'Tr')) T = bms.Variable(('Torque', 'T')) W = bms.Variable(('Rotationnal speed', 'w')) Pe = bms.Variable(('Electrical power', 'Pe')) Pm = bms.Variable(('Mechanical power', 'Pm'))