Simscape自定义Pelton涡轮模块流量单位异常及修改方法咨询
问题:Simscape佩尔顿涡轮自定义组件单位错误
问题背景
我尝试创建一个Simscape自定义模块,将压力水的能量转换为扭矩,代码如下:
component pelton_turbine % Ce composant calcule le couple généré par l'eau sur la turbine. % 🔹 Déclaration des ports nodes H = foundation.hydraulic.hydraulic; % Port hydraulique R = foundation.mechanical.rotational.rotational; % Port mécanique rotatif end % 🔹 Déclaration des paramètres parameters eta = {0.85, '1'}; % Rendement de la turbine rho = {1000, 'kg/m^3'}; % Densité de l'eau r = {0.5, 'm'}; % Rayon moyen de la roue g = {9.81, 'm/s^2'}; % Gravité end % 🔹 Déclaration des variables internes variables Q = {0, 'm^3/s'}; T = {0, 'N*m'}; % Couple généré H_head = {0, 'm'}; % Hauteur d'eau équivalente end branches % Débit hydraulique pris directement depuis le port H Q : H.q -> *; end equations % Calcul de la hauteur d'eau (pression convertie en mètre de colonne d'eau) H_head == H.p/ (rho * g); % Calcul du couple généré par l'eau T == {eta * rho * Q * r * sqrt(H_head * 2 * g), 'N*m'}; % Transmission du couple à l’axe mécanique R.t == T; end end
报错信息
构建组件时出现如下错误:
Invalid use of a value with unit cm^3*kg/(m*s^2) when attempting to bind a unit. The value to which the unit is bound must not have an associated unit. • In pelton_turbine.pelton_turbine (line 36) eta = 0.8500 rho = {1000, 'kg/m^3'} Q = {[1x1 double], 'cm^3/s'} r = {0.5000, 'm'} H_head = {[1x1 double], 'm'} g = {9.8100, 'm/s^2'}
核心疑问
- 为什么流量Q的单位是cm³/s而非定义的m³/s?
- 如何修改解决单位不匹配的报错?
解决思路及修改方案
问题根源
Q是绑定到液压端口H.q的through变量,其单位由Simscape液压基础库的默认配置决定(默认是cm³/s),你在variables块中手动定义的单位会被端口的单位覆盖,进而引发后续计算的单位冲突;同时扭矩方程中给表达式绑定单位的写法不符合Simscape语法规范。
修改步骤
- 移除变量Q的单位声明:through变量的单位由关联端口决定,手动定义会导致冲突。
- 显式单位转换:计算时将Q的单位从cm³/s转换为m³/s(1 cm³/s = 1e-6 m³/s)。
- 修正扭矩方程语法:Simscape中不需要给表达式绑定单位,变量T的单位已在
variables块中定义,直接写计算表达式即可。
修改后的代码
component pelton_turbine % Ce composant calcule le couple généré par l'eau sur la turbine. % 🔹 Déclaration des ports nodes H = foundation.hydraulic.hydraulic; % Port hydraulique R = foundation.mechanical.rotational.rotational; % Port mécanique rotatif end % 🔹 Déclaration des paramètres parameters eta = {0.85, '1'}; % Rendement de la turbine rho = {1000, 'kg/m^3'}; % Densité de l'eau r = {0.5, 'm'}; % Rayon moyen de la roue g = {9.81, 'm/s^2'}; % Gravité end % 🔹 Déclaration des variables internes variables Q = {0}; % 移除单位声明,由端口H.q决定 T = {0, 'N*m'}; % Couple généré H_head = {0, 'm'}; % Hauteur d'eau équivalente end branches % Débit hydraulique pris directement depuis le port H Q : H.q -> *; end equations % Calcul de la hauteur d'eau (pression convertie en mètre de colonne d'eau) H_head == H.p / (rho * g); % 转换Q的单位为m³/s后计算扭矩 T == eta * rho * (Q * 1e-6) * r * sqrt(H_head * 2 * g); % Transmission du couple à l’axe mécanique R.t == T; end end
补充说明
- 若追求更强可读性,可使用Simscape内置的
unit_conversion函数替代手动系数:unit_conversion(Q, 'cm^3/s', 'm^3/s') - Simscape的through变量(如流量、扭矩)单位由连接端口定义,不可在
variables块强制覆盖 - 方程中无需给表达式标注单位,变量的单位已在
variables块定义,Simscape会自动校验单位一致性
内容的提问来源于stack exchange,提问作者Nils Aubague
相关产品推荐
相关产品推荐

