Opened 6 years ago
Last modified 3 years ago
#5505 new defect
Avoid file lists to be shown along with error messages
Reported by: | massimo ceraolo | Owned by: | somebody |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | *unknown* | Version: | v1.14.0-dev-nightly |
Keywords: | Cc: |
Description (last modified by )
The attached model TwoLegs is wrong because the nv pin of powerSensor is unconnected.
OM issues an error message whose first line is:
An independent subset of the model has imbalanced number of equations (127) and variables (128).
which is ok.
Then the full list of variables comes, which is already very long here, which can be much longer on larger models (reported below).
I think this list of variables is at least useless. Indeed is also harmful since hides the important part of the error message.
I think this list should not be displayed.
Full error message:
[1] 00:32:07 Symbolic Error An independent subset of the model has imbalanced number of equations (127) and variables (128). variables: meanP.x meanP.y meanP.u powerSensor.product.y powerSensor.product.u2 powerSensor.product.u1 powerSensor.currentSensor.i powerSensor.currentSensor.n.i powerSensor.currentSensor.n.v powerSensor.currentSensor.p.i powerSensor.currentSensor.p.v powerSensor.voltageSensor.v powerSensor.voltageSensor.n.v powerSensor.voltageSensor.p.i powerSensor.voltageSensor.p.v powerSensor.power powerSensor.nv.v powerSensor.pv.i powerSensor.pv.v powerSensor.nc.i powerSensor.nc.v powerSensor.pc.i powerSensor.pc.v nor2.y nor2.u dD1.s dD1.off dD1.LossPower dD1.n.i dD1.n.v dD1.p.i dD1.p.v dD1.i dD1.v dSW1.fire dSW1.s dSW1.off dSW1.LossPower dSW1.n.i dSW1.n.v dSW1.p.i dSW1.p.v dSW1.i dSW1.v uSW1.fire uSW1.s uSW1.off uSW1.LossPower uSW1.n.i uSW1.n.v uSW1.p.i uSW1.p.v uSW1.i uSW1.v uD1.s uD1.off uD1.LossPower uD1.n.i uD1.n.v uD1.p.i uD1.p.v uD1.i uD1.v Load.R_actual Load.T_heatPort Load.LossPower Load.n.i Load.n.v Load.p.i Load.p.v Load.i Load.v inductor.n.i inductor.n.v inductor.p.i inductor.p.v inductor.i inductor.v dD.s dD.off dD.LossPower dD.n.i dD.n.v dD.p.i dD.p.v dD.i dD.v dSW.fire dSW.s dSW.off dSW.LossPower dSW.n.i dSW.n.v dSW.p.i dSW.p.v dSW.i dSW.v uSW.fire uSW.s uSW.off uSW.LossPower uSW.n.i uSW.n.v uSW.p.i uSW.p.v uSW.i uSW.v uD.s uD.off uD.LossPower uD.n.i uD.n.v uD.p.i uD.p.v uD.i uD.v nor1.y nor1.u booleanPulse.pulseStart booleanPulse.y V1.n.i V1.n.v V1.p.i V1.p.v V1.i V1.v ground.p.i ground.p.v equations: 1 : ground.p.v = 0.0 2 : V1.v = V1.V 3 : V1.v = V1.p.v - V1.n.v 4 : 0.0 = V1.p.i + V1.n.i 5 : V1.i = V1.p.i 6 : booleanPulse.y = time >= booleanPulse.pulseStart and time < booleanPulse.pulseStart + booleanPulse.Twidth 7 : nor1.y = not nor1.u 8 : uD.off = uD.s < 0.0 9 : uD.v = uD.s * (if uD.off then 1.0 else uD.Ron) + uD.Vknee 10 : uD.i = uD.s * (if uD.off then uD.Goff else 1.0) + uD.Goff * uD.Vknee 11 : uD.LossPower = uD.v * uD.i 12 : uD.v = uD.p.v - uD.n.v 13 : 0.0 = uD.p.i + uD.n.i 14 : uD.i = uD.p.i 15 : uSW.off = uSW.s < 0.0 or not uSW.fire 16 : uSW.v = uSW.s * (if uSW.off then 1.0 else uSW.Ron) + uSW.Vknee 17 : uSW.i = uSW.s * (if uSW.off then uSW.Goff else 1.0) + uSW.Goff * uSW.Vknee 18 : uSW.LossPower = uSW.v * uSW.i 19 : uSW.v = uSW.p.v - uSW.n.v 20 : 0.0 = uSW.p.i + uSW.n.i 21 : uSW.i = uSW.p.i 22 : dSW.off = dSW.s < 0.0 or not dSW.fire 23 : dSW.v = dSW.s * (if dSW.off then 1.0 else dSW.Ron) + dSW.Vknee 24 : dSW.i = dSW.s * (if dSW.off then dSW.Goff else 1.0) + dSW.Goff * dSW.Vknee 25 : dSW.LossPower = dSW.v * dSW.i 26 : dSW.v = dSW.p.v - dSW.n.v 27 : 0.0 = dSW.p.i + dSW.n.i 28 : dSW.i = dSW.p.i 29 : dD.off = dD.s < 0.0 30 : dD.v = dD.s * (if dD.off then 1.0 else dD.Ron) + dD.Vknee 31 : dD.i = dD.s * (if dD.off then dD.Goff else 1.0) + dD.Goff * dD.Vknee 32 : dD.LossPower = dD.v * dD.i 33 : dD.v = dD.p.v - dD.n.v 34 : 0.0 = dD.p.i + dD.n.i 35 : dD.i = dD.p.i 36 : inductor.L * der(inductor.i) = inductor.v 37 : inductor.v = inductor.p.v - inductor.n.v 38 : 0.0 = inductor.p.i + inductor.n.i 39 : inductor.i = inductor.p.i 40 : Load.R_actual = Load.R * (1.0 + Load.alpha * (Load.T_heatPort - Load.T_ref)) 41 : Load.v = Load.R_actual * Load.i 42 : Load.LossPower = Load.v * Load.i 43 : Load.v = Load.p.v - Load.n.v 44 : 0.0 = Load.p.i + Load.n.i 45 : Load.i = Load.p.i 46 : Load.T_heatPort = Load.T 47 : uD1.off = uD1.s < 0.0 48 : uD1.v = uD1.s * (if uD1.off then 1.0 else uD1.Ron) + uD1.Vknee 49 : uD1.i = uD1.s * (if uD1.off then uD1.Goff else 1.0) + uD1.Goff * uD1.Vknee 50 : uD1.LossPower = uD1.v * uD1.i 51 : uD1.v = uD1.p.v - uD1.n.v 52 : 0.0 = uD1.p.i + uD1.n.i 53 : uD1.i = uD1.p.i 54 : uSW1.off = uSW1.s < 0.0 or not uSW1.fire 55 : uSW1.v = uSW1.s * (if uSW1.off then 1.0 else uSW1.Ron) + uSW1.Vknee 56 : uSW1.i = uSW1.s * (if uSW1.off then uSW1.Goff else 1.0) + uSW1.Goff * uSW1.Vknee 57 : uSW1.LossPower = uSW1.v * uSW1.i 58 : uSW1.v = uSW1.p.v - uSW1.n.v 59 : 0.0 = uSW1.p.i + uSW1.n.i 60 : uSW1.i = uSW1.p.i 61 : dSW1.off = dSW1.s < 0.0 or not dSW1.fire 62 : dSW1.v = dSW1.s * (if dSW1.off then 1.0 else dSW1.Ron) + dSW1.Vknee 63 : dSW1.i = dSW1.s * (if dSW1.off then dSW1.Goff else 1.0) + dSW1.Goff * dSW1.Vknee 64 : dSW1.LossPower = dSW1.v * dSW1.i 65 : dSW1.v = dSW1.p.v - dSW1.n.v 66 : 0.0 = dSW1.p.i + dSW1.n.i 67 : dSW1.i = dSW1.p.i 68 : dD1.off = dD1.s < 0.0 69 : dD1.v = dD1.s * (if dD1.off then 1.0 else dD1.Ron) + dD1.Vknee 70 : dD1.i = dD1.s * (if dD1.off then dD1.Goff else 1.0) + dD1.Goff * dD1.Vknee 71 : dD1.LossPower = dD1.v * dD1.i 72 : dD1.v = dD1.p.v - dD1.n.v 73 : 0.0 = dD1.p.i + dD1.n.i 74 : dD1.i = dD1.p.i 75 : nor2.y = not nor2.u 76 : powerSensor.voltageSensor.p.i = 0.0 77 : powerSensor.voltageSensor.v = powerSensor.voltageSensor.p.v - powerSensor.voltageSensor.n.v 78 : powerSensor.currentSensor.p.v = powerSensor.currentSensor.n.v 79 : powerSensor.currentSensor.p.i = powerSensor.currentSensor.i 80 : powerSensor.currentSensor.n.i = -powerSensor.currentSensor.i 81 : powerSensor.product.y = powerSensor.product.u1 * powerSensor.product.u2 82 : der(meanP.x) = meanP.u 83 : ground.p.i + Load.n.i + uD1.p.i + uSW1.n.i + dSW1.p.i + dD1.n.i = 0.0 84 : V1.p.i + uD.n.i + uSW.p.i + uD1.n.i + uSW1.p.i = 0.0 85 : V1.n.i + dSW.n.i + dD.p.i + dSW1.n.i + dD1.p.i = 0.0 86 : uD.p.i + uSW.n.i + dSW.p.i + dD.n.i + powerSensor.pc.i = 0.0 87 : inductor.p.i + powerSensor.nc.i + powerSensor.pv.i = 0.0 88 : inductor.n.i + Load.p.i = 0.0 89 : powerSensor.voltageSensor.p.i - powerSensor.pv.i = 0.0 90 : powerSensor.currentSensor.p.i - powerSensor.pc.i = 0.0 91 : powerSensor.currentSensor.n.i - powerSensor.nc.i = 0.0 92 : powerSensor.pv.v = powerSensor.voltageSensor.p.v 93 : powerSensor.nv.v = powerSensor.voltageSensor.n.v 94 : powerSensor.currentSensor.p.v = powerSensor.pc.v 95 : powerSensor.currentSensor.n.v = powerSensor.nc.v 96 : powerSensor.currentSensor.i = powerSensor.product.u2 97 : powerSensor.product.u1 = powerSensor.voltageSensor.v 98 : powerSensor.power = powerSensor.product.y 99 : booleanPulse.y = dSW1.fire 100 : booleanPulse.y = nor1.u 101 : booleanPulse.y = nor2.u 102 : booleanPulse.y = uSW.fire 103 : nor2.y = uSW1.fire 104 : Load.p.v = inductor.n.v 105 : V1.p.v = uD.n.v 106 : V1.p.v = uD1.n.v 107 : V1.p.v = uSW.p.v 108 : V1.p.v = uSW1.p.v 109 : dD.n.v = dSW.p.v 110 : dD.n.v = powerSensor.pc.v 111 : dD.n.v = uD.p.v 112 : dD.n.v = uSW.n.v 113 : V1.n.v = dD.p.v 114 : V1.n.v = dD1.p.v 115 : V1.n.v = dSW.n.v 116 : V1.n.v = dSW1.n.v 117 : Load.n.v = dD1.n.v 118 : Load.n.v = dSW1.p.v 119 : Load.n.v = ground.p.v 120 : Load.n.v = uD1.p.v 121 : Load.n.v = uSW1.n.v 122 : dSW.fire = nor1.y 123 : inductor.p.v = powerSensor.nc.v 124 : inductor.p.v = powerSensor.pv.v 125 : meanP.u = powerSensor.power 126 : when sample(2, meanP.t0 + 1.0 / meanP.f, 1.0 / meanP.f) then meanP.y := meanP.f * pre(meanP.x); end when; 127 : when sample(1, booleanPulse.startTime, booleanPulse.period) then booleanPulse.pulseStart := time; end when; [2] 00:32:07 Translation Error pre-optimization module clockPartitioning (simulation) failed. [1] 00:34:43 Symbolic Error An independent subset of the model has imbalanced number of equations (127) and variables (128). variables: meanP.x meanP.y meanP.u powerSensor.product.y powerSensor.product.u2 powerSensor.product.u1 powerSensor.currentSensor.i powerSensor.currentSensor.n.i powerSensor.currentSensor.n.v powerSensor.currentSensor.p.i powerSensor.currentSensor.p.v powerSensor.voltageSensor.v powerSensor.voltageSensor.n.v powerSensor.voltageSensor.p.i powerSensor.voltageSensor.p.v powerSensor.power powerSensor.nv.v powerSensor.pv.i powerSensor.pv.v powerSensor.nc.i powerSensor.nc.v powerSensor.pc.i powerSensor.pc.v nor2.y nor2.u dD1.s dD1.off dD1.LossPower dD1.n.i dD1.n.v dD1.p.i dD1.p.v dD1.i dD1.v dSW1.fire dSW1.s dSW1.off dSW1.LossPower dSW1.n.i dSW1.n.v dSW1.p.i dSW1.p.v dSW1.i dSW1.v uSW1.fire uSW1.s uSW1.off uSW1.LossPower uSW1.n.i uSW1.n.v uSW1.p.i uSW1.p.v uSW1.i uSW1.v uD1.s uD1.off uD1.LossPower uD1.n.i uD1.n.v uD1.p.i uD1.p.v uD1.i uD1.v Load.R_actual Load.T_heatPort Load.LossPower Load.n.i Load.n.v Load.p.i Load.p.v Load.i Load.v inductor.n.i inductor.n.v inductor.p.i inductor.p.v inductor.i inductor.v dD.s dD.off dD.LossPower dD.n.i dD.n.v dD.p.i dD.p.v dD.i dD.v dSW.fire dSW.s dSW.off dSW.LossPower dSW.n.i dSW.n.v dSW.p.i dSW.p.v dSW.i dSW.v uSW.fire uSW.s uSW.off uSW.LossPower uSW.n.i uSW.n.v uSW.p.i uSW.p.v uSW.i uSW.v uD.s uD.off uD.LossPower uD.n.i uD.n.v uD.p.i uD.p.v uD.i uD.v nor1.y nor1.u booleanPulse.pulseStart booleanPulse.y V1.n.i V1.n.v V1.p.i V1.p.v V1.i V1.v ground.p.i ground.p.v equations: 1 : ground.p.v = 0.0 2 : V1.v = V1.V 3 : V1.v = V1.p.v - V1.n.v 4 : 0.0 = V1.p.i + V1.n.i 5 : V1.i = V1.p.i 6 : booleanPulse.y = time >= booleanPulse.pulseStart and time < booleanPulse.pulseStart + booleanPulse.Twidth 7 : nor1.y = not nor1.u 8 : uD.off = uD.s < 0.0 9 : uD.v = uD.s * (if uD.off then 1.0 else uD.Ron) + uD.Vknee 10 : uD.i = uD.s * (if uD.off then uD.Goff else 1.0) + uD.Goff * uD.Vknee 11 : uD.LossPower = uD.v * uD.i 12 : uD.v = uD.p.v - uD.n.v 13 : 0.0 = uD.p.i + uD.n.i 14 : uD.i = uD.p.i 15 : uSW.off = uSW.s < 0.0 or not uSW.fire 16 : uSW.v = uSW.s * (if uSW.off then 1.0 else uSW.Ron) + uSW.Vknee 17 : uSW.i = uSW.s * (if uSW.off then uSW.Goff else 1.0) + uSW.Goff * uSW.Vknee 18 : uSW.LossPower = uSW.v * uSW.i 19 : uSW.v = uSW.p.v - uSW.n.v 20 : 0.0 = uSW.p.i + uSW.n.i 21 : uSW.i = uSW.p.i 22 : dSW.off = dSW.s < 0.0 or not dSW.fire 23 : dSW.v = dSW.s * (if dSW.off then 1.0 else dSW.Ron) + dSW.Vknee 24 : dSW.i = dSW.s * (if dSW.off then dSW.Goff else 1.0) + dSW.Goff * dSW.Vknee 25 : dSW.LossPower = dSW.v * dSW.i 26 : dSW.v = dSW.p.v - dSW.n.v 27 : 0.0 = dSW.p.i + dSW.n.i 28 : dSW.i = dSW.p.i 29 : dD.off = dD.s < 0.0 30 : dD.v = dD.s * (if dD.off then 1.0 else dD.Ron) + dD.Vknee 31 : dD.i = dD.s * (if dD.off then dD.Goff else 1.0) + dD.Goff * dD.Vknee 32 : dD.LossPower = dD.v * dD.i 33 : dD.v = dD.p.v - dD.n.v 34 : 0.0 = dD.p.i + dD.n.i 35 : dD.i = dD.p.i 36 : inductor.L * der(inductor.i) = inductor.v 37 : inductor.v = inductor.p.v - inductor.n.v 38 : 0.0 = inductor.p.i + inductor.n.i 39 : inductor.i = inductor.p.i 40 : Load.R_actual = Load.R * (1.0 + Load.alpha * (Load.T_heatPort - Load.T_ref)) 41 : Load.v = Load.R_actual * Load.i 42 : Load.LossPower = Load.v * Load.i 43 : Load.v = Load.p.v - Load.n.v 44 : 0.0 = Load.p.i + Load.n.i 45 : Load.i = Load.p.i 46 : Load.T_heatPort = Load.T 47 : uD1.off = uD1.s < 0.0 48 : uD1.v = uD1.s * (if uD1.off then 1.0 else uD1.Ron) + uD1.Vknee 49 : uD1.i = uD1.s * (if uD1.off then uD1.Goff else 1.0) + uD1.Goff * uD1.Vknee 50 : uD1.LossPower = uD1.v * uD1.i 51 : uD1.v = uD1.p.v - uD1.n.v 52 : 0.0 = uD1.p.i + uD1.n.i 53 : uD1.i = uD1.p.i 54 : uSW1.off = uSW1.s < 0.0 or not uSW1.fire 55 : uSW1.v = uSW1.s * (if uSW1.off then 1.0 else uSW1.Ron) + uSW1.Vknee 56 : uSW1.i = uSW1.s * (if uSW1.off then uSW1.Goff else 1.0) + uSW1.Goff * uSW1.Vknee 57 : uSW1.LossPower = uSW1.v * uSW1.i 58 : uSW1.v = uSW1.p.v - uSW1.n.v 59 : 0.0 = uSW1.p.i + uSW1.n.i 60 : uSW1.i = uSW1.p.i 61 : dSW1.off = dSW1.s < 0.0 or not dSW1.fire 62 : dSW1.v = dSW1.s * (if dSW1.off then 1.0 else dSW1.Ron) + dSW1.Vknee 63 : dSW1.i = dSW1.s * (if dSW1.off then dSW1.Goff else 1.0) + dSW1.Goff * dSW1.Vknee 64 : dSW1.LossPower = dSW1.v * dSW1.i 65 : dSW1.v = dSW1.p.v - dSW1.n.v 66 : 0.0 = dSW1.p.i + dSW1.n.i 67 : dSW1.i = dSW1.p.i 68 : dD1.off = dD1.s < 0.0 69 : dD1.v = dD1.s * (if dD1.off then 1.0 else dD1.Ron) + dD1.Vknee 70 : dD1.i = dD1.s * (if dD1.off then dD1.Goff else 1.0) + dD1.Goff * dD1.Vknee 71 : dD1.LossPower = dD1.v * dD1.i 72 : dD1.v = dD1.p.v - dD1.n.v 73 : 0.0 = dD1.p.i + dD1.n.i 74 : dD1.i = dD1.p.i 75 : nor2.y = not nor2.u 76 : powerSensor.voltageSensor.p.i = 0.0 77 : powerSensor.voltageSensor.v = powerSensor.voltageSensor.p.v - powerSensor.voltageSensor.n.v 78 : powerSensor.currentSensor.p.v = powerSensor.currentSensor.n.v 79 : powerSensor.currentSensor.p.i = powerSensor.currentSensor.i 80 : powerSensor.currentSensor.n.i = -powerSensor.currentSensor.i 81 : powerSensor.product.y = powerSensor.product.u1 * powerSensor.product.u2 82 : der(meanP.x) = meanP.u 83 : ground.p.i + Load.n.i + uD1.p.i + uSW1.n.i + dSW1.p.i + dD1.n.i = 0.0 84 : V1.p.i + uD.n.i + uSW.p.i + uD1.n.i + uSW1.p.i = 0.0 85 : V1.n.i + dSW.n.i + dD.p.i + dSW1.n.i + dD1.p.i = 0.0 86 : uD.p.i + uSW.n.i + dSW.p.i + dD.n.i + powerSensor.pc.i = 0.0 87 : inductor.p.i + powerSensor.nc.i + powerSensor.pv.i = 0.0 88 : inductor.n.i + Load.p.i = 0.0 89 : powerSensor.voltageSensor.p.i - powerSensor.pv.i = 0.0 90 : powerSensor.currentSensor.p.i - powerSensor.pc.i = 0.0 91 : powerSensor.currentSensor.n.i - powerSensor.nc.i = 0.0 92 : powerSensor.pv.v = powerSensor.voltageSensor.p.v 93 : powerSensor.nv.v = powerSensor.voltageSensor.n.v 94 : powerSensor.currentSensor.p.v = powerSensor.pc.v 95 : powerSensor.currentSensor.n.v = powerSensor.nc.v 96 : powerSensor.currentSensor.i = powerSensor.product.u2 97 : powerSensor.product.u1 = powerSensor.voltageSensor.v 98 : powerSensor.power = powerSensor.product.y 99 : booleanPulse.y = dSW1.fire 100 : booleanPulse.y = nor1.u 101 : booleanPulse.y = nor2.u 102 : booleanPulse.y = uSW.fire 103 : nor2.y = uSW1.fire 104 : Load.p.v = inductor.n.v 105 : V1.p.v = uD.n.v 106 : V1.p.v = uD1.n.v 107 : V1.p.v = uSW.p.v 108 : V1.p.v = uSW1.p.v 109 : dD.n.v = dSW.p.v 110 : dD.n.v = powerSensor.pc.v 111 : dD.n.v = uD.p.v 112 : dD.n.v = uSW.n.v 113 : V1.n.v = dD.p.v 114 : V1.n.v = dD1.p.v 115 : V1.n.v = dSW.n.v 116 : V1.n.v = dSW1.n.v 117 : Load.n.v = dD1.n.v 118 : Load.n.v = dSW1.p.v 119 : Load.n.v = ground.p.v 120 : Load.n.v = uD1.p.v 121 : Load.n.v = uSW1.n.v 122 : dSW.fire = nor1.y 123 : inductor.p.v = powerSensor.nc.v 124 : inductor.p.v = powerSensor.pv.v 125 : meanP.u = powerSensor.power 126 : when sample(2, meanP.t0 + 1.0 / meanP.f, 1.0 / meanP.f) then meanP.y := meanP.f * pre(meanP.x); end when; 127 : when sample(1, booleanPulse.startTime, booleanPulse.period) then booleanPulse.pulseStart := time; end when; [2] 00:34:43 Translation Error pre-optimization module clockPartitioning (simulation) failed.
Attachments (1)
Change History (9)
by , 6 years ago
Attachment: | TwoLegs.mo added |
---|
comment:1 by , 5 years ago
Milestone: | 1.14.0 → 1.16.0 |
---|
comment:2 by , 5 years ago
Description: | modified (diff) |
---|
comment:3 by , 4 years ago
Description: | modified (diff) |
---|
comment:4 by , 4 years ago
Description: | modified (diff) |
---|
comment:5 by , 4 years ago
I agree that messages showing me 127 equations and 128 variables have little use, since it is not possible to a (normal) human being to make any use out of that. On the other hand, one could copy-and-paste it to a text editor and do some further analysis.
We may set an upper limit to the number of variables and equations shown, and write this to a file if that limit is exceeded.
In fact, the right way to solve this problem is to implement Modelica 3 balancedness checks, see #3977. This feature of the language was introduced exactly to avoid having to deal with such hopelessly long lists. #3977 is one of the key feature of the forthcoming 2.0.0 release. Once that is implemented, it will be possible to pinpoint the issue to much smaller subsets of variable and equations, that do not span the entire object-oriented system.
comment:7 by , 4 years ago
Milestone: | 1.17.0 → 1.18.0 |
---|
Retargeted to 1.18.0 because of 1.17.0 timed release.
Releasing 1.14.0 which is stable and has many improvements w.r.t. 1.13.2. This issue is rescheduled to 1.16.0