1 个不稳定版本
0.1.0 | 2021年10月19日 |
---|
#332 在 科学
16KB
347 行
Measures
度量单位库,measures。
这使您能够用国际单位制(SI)的单位来编写类型检查的表达式。
还包括用于电气计算的Thevenin和Norton等效电路的表示。
使用 Measures
如果类型一致,则表达式是量纲正确的
let v1 = Amp(0.1) * Ohm(10.0); // v1 has type Volt (Ohm's law)
let x = v1 + Amp(10.0); // error: can't add volts to amps.
let x: Volt = v1 / Ohm(10.0); // error: result has type Amp, not Volt
let r1 = Second(450.0*u) / Farad(100.0*n); // OK: compute the resistor value for an RC network
(强调电气单位.)
提供的类型,称为 measures,代表未缩放的SI单位。
它们包括: 伏特
,安培
,欧姆
,法拉
和 秒
。
还提供了标准缩放常数: M
,k
,m
,u
,n
,p
。
因此,10kΩ可以写成 欧姆(10.0*k)
,10.0*欧姆(k)
,欧姆(10.0)*k
等等。
这并不是最自然的符号,但简单且可预测。
格式化
度量单位可以用自然符号(即工程符号)格式化。格式化的值被缩放到适当的范围,并附加SI单位符号。例如
println!("R = {}", Second(450.0*u) / Farad(100.0*n));
// R = 4.50kΩ
声明 Measures
度量单位使用宏声明
measure!(Candela, "cd"); // the measure of luminous intensity
这声明了一个类型,坎德拉
以及该类型的某些特性
- 在
坎德拉
和无单位的f64
值之间提供乘法运算符。 - 在
坎德拉
上除以f64
。 - 在
坎德拉
值之间提供加、减和除运算符。 - 在
坎德拉
值之间提供比较运算符。 - 使用给定的单位名称
"cd"
对坎德拉
进行格式化。
表达式
该库了解如何将不同的量度进行组合。使用两个宏来表示量度之间的关系。
乘法法则建立了三个量度之间的关系,例如欧姆定律。
倒数法则建立了两个量度之间的关系,例如时间和频率。
product!(Amp, Ohm, Volt); // Ohm's law.
inverse!(Second, Hertz); // Time and frequency.
这些规则在类型之间定义了进一步的操作符
- 在
Amp
和Ohm
之间进行乘法 - 将
Volt
除以Ohm
或Amp
- 在
Second
和Hertz
之间进行乘法 - 将无单位的
f64
除以Second
或Hertz
等效电路。
提供了一个 Cct
类型,用于帮助进行简单的直流电路计算。它表示一个戴维南或诺顿等效电路。参考:https://en.wikipedia.org/wiki/Thévenin%27s_theorem
通过组合一个 Volt
和一个 Ohm
量度创建一个戴维南 Cct
:v + r
。在这里,+
是串联操作符。
通过组合一个 Amp
和一个 Siemen
量度创建一个诺顿 Cct
:i | g
。在这里,|
是并联操作符。
可以使用 +
或 |
将另一种形式的 Cct
与另一个串联或并联的元素组合。添加的元素可以是一个 Ohm
或一个 Siemen
量度,或者另一个 Cct
。
以这种方式可以构建更大的网络。结果 Cct
将根据其前驱和等效电导率在内部以戴维南或诺顿形式表示。对于非常低的电导率,首选诺顿,否则首选戴维南。
一个示例电压分压器电路
let vcc = Volt(5.0);
let r1 = Ohm(10.0*k);
let r2 = Ohm(5.0*k);
let circuit =
vcc + r1 // A voltage source vcc in series with resistor r1 forms a Cct,
| r2; // which is extended by resistor r2 in parallel
let v1 = circuit.v_open(); // v1 = 1.67V is the voltage produced
可以使用方法 .v_open()
、.i_short()
、.r_equiv()
或 g_equiv()
查询 Cct
,以获取其开路电压、短路电流、等效电阻或电导率。
必须注意非常低的电阻或电导率
let vs = Volt(x) + Ohm(0.0); // OK: zero resistance voltage source
let is = Amp(x) + Siemen(0.0); // OK: zero conductance current source
let i = vs.i_short(); // error: infinite current in short circuit
let v = is.v_open(); // error: infinite voltage in open circuit
let p = vs | vs; // error: can't parallel pure voltage sources
let s = is + is; // error: can't place pure current sources in series
最后,可以使用取反操作符 -
反转 Cct
的方向。
结果具有相同的电阻(电导率),但电压(电流)源的极性被反转。
以下单行代码使用上面定义的 circuit
并试图表示一个惠斯通电桥
let w = - circuit + circuit;
待办事项
- 更多量度。
- 复数阻抗。交流电源。
- 更多测试。