1 个不稳定版本

0.1.0 2021年10月19日

#332科学

Apache-2.0

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单位。
它们包括: 伏特安培欧姆法拉

还提供了标准缩放常数: Mkmunp
因此,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.

这些规则在类型之间定义了进一步的操作符

  • AmpOhm 之间进行乘法
  • Volt 除以 OhmAmp
  • SecondHertz 之间进行乘法
  • 将无单位的 f64 除以 SecondHertz

等效电路。

提供了一个 Cct 类型,用于帮助进行简单的直流电路计算。它表示一个戴维南或诺顿等效电路。参考:https://en.wikipedia.org/wiki/Thévenin%27s_theorem

通过组合一个 Volt 和一个 Ohm 量度创建一个戴维南 Cctv + r。在这里,+ 是串联操作符。

通过组合一个 Amp 和一个 Siemen 量度创建一个诺顿 Ccti | 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;  

待办事项

  • 更多量度。
  • 复数阻抗。交流电源。
  • 更多测试。

无运行时依赖项