1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
function structure = cbg2ese(system_name, system_type, system_cr, ...
system_args, full_name, full_name_repetition, ...
repetition,...
structure, structure_file, infofile)
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%% Model Transformation Tools %%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Matlab function cbg2ese.m
% Acausal bond graph to causal bond graph: mfile format
% Structure matrix [states,nonstates,inputs,outputs,zero_outputs]
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.12 1997/04/15 09:17:26 peterg
% %% Added the structure file - contains details of states etc.
% %%
% %% Revision 1.11 1996/12/07 18:20:11 peterg
% %% Replaces null argument by a default and tells user.
% %%
% %% Revision 1.10 1996/12/07 17:37:07 peterg
|
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
function structure = cbg2ese(system_name, system_type, system_cr, ...
system_args, full_name, full_name_repetition, ...
repetition,...
structure, structure_file, infofile)
% Set up globals to count the component inputs and outputs. This relies on
% the named SS (the ports) being in the correct order. Using globals here
% avoids changing the common argument list for all _eqn files for something
% which is only used for named SS components.
global local_u_index
global local_y_index
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%% Model Transformation Tools %%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Matlab function cbg2ese.m
% Acausal bond graph to causal bond graph: mfile format
% Structure matrix [states,nonstates,inputs,outputs,zero_outputs]
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.13 1997/05/19 16:45:56 peterg
% %% Fixed ISW bug -- deleted spurious ISW_eqn.m file
% %%
% %% Revision 1.12 1997/04/15 09:17:26 peterg
% %% Added the structure file - contains details of states etc.
% %%
% %% Revision 1.11 1996/12/07 18:20:11 peterg
% %% Replaces null argument by a default and tells user.
% %%
% %% Revision 1.10 1996/12/07 17:37:07 peterg
|
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
% Find number of components
[n_components,columns] = size(components);
n_components = n_components
% Set up the first dummy bond number - needed for repetative components
next_bond = max(max(abs(components)))+1;
for i = 1:n_components
comp = nozeros(components(i,:));
bond_list = abs(comp);
direction = sign(comp)'*[1 1];
% Convert from arrow orientated to component orientated causality
comp_bonds = bonds(bond_list,:).*direction;
|
>
>
>
>
>
|
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
% Find number of components
[n_components,columns] = size(components);
n_components = n_components
% Set up the first dummy bond number - needed for repetative components
next_bond = max(max(abs(components)))+1;
% Set up the counters for the labelled SS. These are, by definition,
% encountered first and so the counters will not be messed up by subsystems.
local_u_index = 0;
local_y_index = 0;
for i = 1:n_components
comp = nozeros(components(i,:));
bond_list = abs(comp);
direction = sign(comp)'*[1 1];
% Convert from arrow orientated to component orientated causality
comp_bonds = bonds(bond_list,:).*direction;
|
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
% Link up the bonds
fprintf(ese_file, ...
'\n\t%s Equations linking up subsystem %s (%s)\n\n', ...
pc, comp_name, comp_type);
name_comp_name = sprintf('%s_%s_%d', ...
full_name_repetition, comp_name, k);
for port_number=1:length(bond_list)
% Effort
if comp_bonds(port_number,1)==1 % Source
fprintf(ese_file, '%s_MTTu%d := %s;\n', ...
name_comp_name, port_number, varname(name_r, ...
bond_list(port_number),1));
else % sensor
fprintf(ese_file, '%s := %s_MTTy%d;\n', ...
varname(name_r, ...
bond_list(port_number),1), name_comp_name, port_number);
end;
% flow
if comp_bonds(port_number,2)==-1 % Source
fprintf(ese_file, '%s_MTTu%d := %s;\n', ...
name_comp_name, port_number, varname(name_r, ...
bond_list(port_number),-1));
else % sensor
fprintf(ese_file, '%s := %s_MTTy%d;\n', ...
varname(name_r, ...
bond_list(port_number),-1), name_comp_name, port_number);
end;
end;
disp('---POP---');
else % its a simple component
fprintf(ese_file, '\n\t%s Equations for component %s (%s), repetition %d\n\n', ...
pc, comp_name, comp_type,k);
|
>
>
|
|
>
|
|
|
>
|
|
>
|
|
|
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
|
% Link up the bonds
fprintf(ese_file, ...
'\n\t%s Equations linking up subsystem %s (%s)\n\n', ...
pc, comp_name, comp_type);
name_comp_name = sprintf('%s_%s_%d', ...
full_name_repetition, comp_name, k);
u_index = 0; y_index = 0; % Count the inputs and outputs
for port_number=1:length(bond_list)
% Effort
if comp_bonds(port_number,1)==1 % Source
u_index = u_index + 1;
fprintf(ese_file, '%s_MTTu%d := %s;\n', ...
name_comp_name, u_index, varname(name_r, ...
bond_list(port_number),1));
else % Sensor
y_index = y_index + 1;
fprintf(ese_file, '%s := %s_MTTy%d;\n', ...
varname(name_r, ...
bond_list(port_number),1), name_comp_name, y_index);
end;
% Flow
if comp_bonds(port_number,2)==-1 % Source
u_index = u_index + 1;
fprintf(ese_file, '%s_MTTu%d := %s;\n', ...
name_comp_name, u_index, varname(name_r, ...
bond_list(port_number),-1));
else % Sensor
y_index = y_index + 1;
fprintf(ese_file, '%s := %s_MTTy%d;\n', ...
varname(name_r, ...
bond_list(port_number),-1), name_comp_name, y_index);
end;
end;
disp('---POP---');
else % its a simple component
fprintf(ese_file, '\n\t%s Equations for component %s (%s), repetition %d\n\n', ...
pc, comp_name, comp_type,k);
|