Opened 11 years ago

Last modified 7 years ago

#2685 assigned defect

Connector with record fails with code generation issues

Reported by: Adrian Pop Owned by: Mahder Alemseged Gebremedhin
Priority: critical Milestone: Future
Component: Code Generation Version: trunk
Keywords: Cc: Willi Braun, Lennart Ochel, Volker Waurich, Mahder Alemseged Gebremedhin

Description

Hello everyone,

working on some controller model omc fails to reduce the variables using pantelides.

The error log is:
Error: Too many equations - overconstrained system. The model has 8 equations and 4 variables.
Error: Transformation Module PFPlusExt index Reduction Method Pantelides failed!

Find attached an examplemodel.
Unfortunately it is a bit complex therefore here is a short description.

A Record (with integer for value and enumeration for datatype)is used as connector (input and output).

within a block the value of the input changes to the output using an algorithm (simplification is done here!).

If you need further information with the model, let me know.

Attachments (1)

example.mo (3.3 KB ) - added by anonymous 11 years ago.

Download all attachments as: .zip

Change History (25)

by anonymous, 11 years ago

Attachment: example.mo added

comment:1 by anonymous, 11 years ago

sorry,

i forgot to mention the model not working is testmodel

comment:2 by Per Östlund, 11 years ago

Component: BackendFrontend
Owner: changed from probably noone to Per Östlund
Status: newaccepted

Seems to be some issues with flattening, outputConnector[i].signal turns into outputConnector.signal[i] in the flattened code. Not sure if this is the only issue, but I'll try to fix it.

comment:3 by Per Östlund, 11 years ago

Cc: Willi Braun Lennart Ochel added
Component: FrontendBackend

Ok, I've found the issue with flattening but haven't figured out how to fix it without breaking other things yet. Fixing the flattening issue does not affect the model balance though. The issue seems to be that the algorithm in WriteSomeOutput is counted as 8 equations when it should be 4. So it seems like the main issue is in the Backend.

comment:4 by Per Östlund, 11 years ago

#2688 needs to be fixed before the flattening issues can be fixed. I'm not sure if the flattening issues are an issue in this case though.

comment:5 by Per Östlund, 11 years ago

Cc: Volker Waurich added

comment:6 by Andreas Hofmann, 10 years ago

Hi everyone,

are there any updates about this ticket (or ticket #2688).
We (Bosch Rexroth) need a model (based on this issue) running with omc for our controller development.

Can anyone give me an update how long this might take?

Best regards,
Andreas

comment:7 by Lennart Ochel, 10 years ago

Cc: Mahder Alemseged Gebremedhin added

comment:8 by Volker Waurich, 10 years ago

Hi,
commit [21524] fixed the backend-issue with the wrong number of solved variables for the algorithm. Now, the frontend issue has to be fixed since I get

"[CodegenC.tpl:7806:28-7806:28:writable] Error: Template error: Indexing non-array writeSomeOutput.outputConnector.signal[i]

and instead there should be: writeSomeOutput.outputConnector[i].signal

Per, Could you please have a look on it? If there is backend stuff breaking, you could commit it as a comment and i will have a look.

comment:9 by Volker Waurich, 10 years ago

Component: BackendFrontend

in reply to:  8 comment:10 by Per Östlund, 10 years ago

Replying to vwaurich:

Per, Could you please have a look on it? If there is backend stuff breaking, you could commit it as a comment and i will have a look.

The issue is still #2688, the backend breaks if we stop converting crefs into ASUBs. Just comment out the call to replaceLoopDependentCrefs in InstSection.instForStatement.

comment:11 by Adrian Pop, 10 years ago

Component: FrontendBackend
Owner: changed from Per Östlund to Willi Braun
Status: acceptedassigned

This seems to have been fixed for the front-end I guess via some commit by mahge930.

"Check of example.testmodel completed successfully.
Class example.testmodel has 12 equation(s) and 12 variable(s).
8 of these are trivial equation(s).
"

However simulation doesn't work as it has issues with the code generation.

comment:12 by Willi Braun, 10 years ago

Status: assignedaccepted

It seems that for some reasons in simVar the entry for Option<DAE.ComponentRef> arrayCref; is missing.

comment:13 by Willi Braun, 10 years ago

Component: BackendCode Generation
Owner: changed from Willi Braun to Mahder Alemseged Gebremedhin
Status: acceptedassigned

No, the underlying problem is fix the code generation to handle arrays of records.

comment:14 by Martin Sjölund, 10 years ago

These errors should really be fixed by someone in the back-end team. There are already tickets for these things as far as I know...

$PwriteSomeOutput$PoutputConnector$lB(modelica_integer)$Pi$rB$Psignal = (modelica_integer)$Pi

in reply to:  14 comment:15 by Mahder Alemseged Gebremedhin, 10 years ago

Replying to sjoelund.se:

These errors should really be fixed by someone in the back-end team.

This is me actually.
The problem with this issue was that it was a combination of multiple issues:

  • Front-end: missing dimension info in qualified names (wrong types created)
  • Back-end: variables were sorted in not so appropriate way, needed better sorting for indexing/offsetting to work
  • CodeGen: We didn't really have support for these cases. We can't do this with macros anymore.

I have fixed the front-end and back-end issues so far and codegen is ready partially. And I think I can actually simulate these models. I have to check again. The problem is missing array elements due to alias elimination and state var selection complicate things. They won't prevent simulation per se but will give you wrong results because you are accessing the wrong array elements.

Anyway I will try to finish up the codegen modifications I have now and commit it. Then we worry about the other stuff later.

I will create a ticket with the issues in more detail.

Last edited 10 years ago by Mahder Alemseged Gebremedhin (previous) (diff)

comment:16 by Martin Sjölund, 10 years ago

Milestone: 1.9.11.9.2

This ticket was not closed for 1.9.1, which has now been released. It was batch modified for milestone 1.9.2 (but maybe an empty milestone was more appropriate; feel free to change it).

comment:17 by Martin Sjölund, 10 years ago

Milestone: 1.9.21.9.3

Milestone changed to 1.9.3 since 1.9.2 was released.

comment:18 by Martin Sjölund, 9 years ago

Milestone: 1.9.31.9.4

Moved to new milestone 1.9.4

comment:19 by Martin Sjölund, 9 years ago

Milestone: 1.9.41.9.5

Milestone pushed to 1.9.5

comment:20 by Martin Sjölund, 9 years ago

Milestone: 1.9.51.10.0

Milestone renamed

comment:21 by Willi Braun, 9 years ago

Summary: Index Reduction (Pantelides) failsConnector with record fails with code generation issues

Error message update:

example.testmodel.c:128:3: warning: implicit declaration of function 'example_OutputConnector_array_create' is invalid in C99 [-Wimplicit-function-declaration]
  example_OutputConnector_array_create(&tmp21, ((modelica_example_OutputConnector*)&($PwriteSomeOutput$PoutputConnector_index(((modelica_integer) 1)))), 1, 2);
  ^
example.testmodel.c:128:50: error: use of undeclared identifier 'modelica_example_OutputConnector'; did you mean 'omc_example_OutputConnector'?
  example_OutputConnector_array_create(&tmp21, ((modelica_example_OutputConnector*)&($PwriteSomeOutput$PoutputConnector_index(((modelica_integer) 1)))), 1, 2);
                                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                                 omc_example_OutputConnector
./example.testmodel_functions.h:26:25: note: 'omc_example_OutputConnector' declared here
example_OutputConnector omc_example_OutputConnector(threadData_t *threadData, modelica_integer omc_signal, modelica_integer omc_signalType); /* record head */
                        ^
example.testmodel.c:128:83: error: expected expression
  example_OutputConnector_array_create(&tmp21, ((modelica_example_OutputConnector*)&($PwriteSomeOutput$PoutputConnector_index(((modelica_integer) 1)))), 1, 2);
                                                                                  ^
example.testmodel.c:128:86: warning: implicit declaration of function '$PwriteSomeOutput$PoutputConnector_index' is invalid in C99 [-Wimplicit-function-declaration]
  example_OutputConnector_array_create(&tmp21, ((modelica_example_OutputConnector*)&($PwriteSomeOutput$PoutputConnector_index(((modelica_integer) 1)))), 1, 2);
                                                                                     ^
example.testmodel.c:129:3: warning: implicit declaration of function 'copy_example_OutputConnector_array_data' is invalid in C99 [-Wimplicit-function-declaration]
  copy_example_OutputConnector_array_data(tmp20, &tmp21);
  ^
3 warnings and 2 errors generated.
make: *** [example.testmodel.o] Error 1
make: *** Waiting for unfinished jobs....
Compilation process failed. Exited with code 2.

comment:22 by Martin Sjölund, 8 years ago

Milestone: 1.10.01.11.0

Ticket retargeted after milestone closed

comment:23 by Martin Sjölund, 8 years ago

Milestone: 1.11.01.12.0

Milestone moved to 1.12.0 due to 1.11.0 already being released.

comment:24 by Francesco Casella, 7 years ago

Milestone: 1.12.0Future

The milestone of this ticket has been reassigned to "Future".

If you think the issue is still valid and relevant for you, please select milestone 1.13.0 for back-end, code generation and run-time issues, or 2.0.0 for front-end issues.

If you are aware that the problem is no longer present, please select the milestone corresponding to the version of OMC you used to check that, and set the status to "worksforme".

In both cases, a short informative comment would be welcome.

Note: See TracTickets for help on using tickets.