Golang FoxySim工具 - 极简在线交流/直流电路模拟器

Golang FoxySim工具 - 极简在线交流/直流电路模拟器 FoxySim 是一款基于 Golang 开发的 Web 应用程序,旨在用于在线仿真直流与交流电路(主要用于理论电工学教学)。

GitHubhttps://github.com/Dreamy16101976/FoxySim

模拟器运行地址:http://foxylab.com:7777

简要说明链接位于 GitHub 页面

简单示例:
网络列表:

.AC 50
V1 1 0 100 0
PW1 1 2 1 0
PQ1 2 3 2 0
PF1 3 4 3 0
PA1 4 5
PV1 1 0
R1 5 6 50
L1 6 7 100m
C1 7 0 80u
.END

结果:

foxysim_rlc_wqf_res_en


更多关于Golang FoxySim工具 - 极简在线交流/直流电路模拟器的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

像 SPICE 吗?

更多关于Golang FoxySim工具 - 极简在线交流/直流电路模拟器的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


并非完全如此。在教授理论电气工程时,稳态正弦电流线性电路的计算会受到高度重视。在SPICE中,这种模式的计算并不方便,但我的模拟器天生就适合这种模式。

示例: 电路 foxysim_trans_din

网表 - 见下文

以下是关于 FoxySim 工具的评论,基于您提供的描述和示例:

FoxySim 是一个用 Go 语言构建的轻量级电路模拟器,专为在线仿真直流和交流电路设计,特别适合电工学教学场景。从您分享的示例来看,它使用了一种简洁的网表格式来定义电路元件和参数,类似于 SPICE 风格的语法,这有助于快速建模和分析电路。

在您的示例中,网表定义了一个交流电路,包含电压源、电阻、电感和电容等元件。例如:

  • .AC 50 指定了交流频率为 50 Hz。
  • V1 1 0 100 0 表示一个电压源连接在节点 1 和 0(地)之间,幅值为 100 V,相位为 0 度。
  • R1 5 6 50 定义了一个 50 欧姆的电阻连接在节点 5 和 6 之间。
  • L1 6 7 100mC1 7 0 80u 分别表示一个 100 mH 的电感和一个 80 μF 的电容。

FoxySim 的 Go 实现可能利用了并发和网络库来处理 Web 请求和实时仿真。以下是一个简化的 Go 代码示例,展示如何解析类似的网表输入(基于您的示例结构),但这只是假设性的实现,实际项目请参考 GitHub 仓库:

package main

import (
    "fmt"
    "strings"
)

// CircuitComponent 表示电路元件的基本结构
type CircuitComponent struct {
    Type     string
    Node1    string
    Node2    string
    Value    float64
    Phase    float64 // 用于交流源
}

// ParseNetlist 解析网表字符串并返回元件列表
func ParseNetlist(netlist string) []CircuitComponent {
    lines := strings.Split(netlist, "\n")
    var components []CircuitComponent

    for _, line := range lines {
        line = strings.TrimSpace(line)
        if line == "" || strings.HasPrefix(line, ".") {
            continue // 跳过空行和命令(如 .AC, .END)
        }
        parts := strings.Fields(line)
        if len(parts) < 3 {
            continue
        }

        comp := CircuitComponent{
            Type:  parts[0],
            Node1: parts[1],
            Node2: parts[2],
        }
        // 简化解析:假设值在第三个或第四个位置
        if len(parts) > 3 {
            fmt.Sscanf(parts[3], "%f", &comp.Value) // 实际解析需要错误处理
        }
        if len(parts) > 4 {
            fmt.Sscanf(parts[4], "%f", &comp.Phase)
        }
        components = append(components, comp)
    }
    return components
}

func main() {
    netlist := `.AC 50
V1 1 0 100 0
R1 5 6 50
L1 6 7 0.1
C1 7 0 0.00008
.END`
    components := ParseNetlist(netlist)
    for _, comp := range components {
        fmt.Printf("Component: %s, Nodes: %s-%s, Value: %f\n", comp.Type, comp.Node1, comp.Node2, comp.Value)
    }
}

这个示例代码演示了如何解析网表输入,提取元件类型、节点和值。在实际的 FoxySim 中,Go 代码可能更复杂,涉及电路方程求解(如使用节点分析或数值方法)、Web 服务器处理(使用 net/http 包)以及前端交互。结果图像显示了仿真输出,如电压和电流波形,这通常通过后端计算生成并渲染到 Web 界面。

FoxySim 的 Go 实现展示了语言在构建高性能 Web 应用方面的优势,例如并发处理多个仿真请求。如果您有具体的技术问题,比如如何扩展元件类型或优化仿真算法,可以参考其 GitHub 代码库进行深入探讨。

回到顶部