# 开源CAN总线信号可编程台架

刚才开源了一款以前写的[CAN信号可编程台架](https://github.com/TsingJyujing/CAN-panel%E2%80%8B)

很早以前我接触了CAN总线和一些相关的测试技术，随后写了这个台架，但是一直没开源，原因主要是写的太烂，达不到我开源的标准。 后来我修修补补，虽然还是很烂，但是我开源的标准降低了啊，所以就开放了。 再不写点车辆相关的东西我都要忘记自己是车辆工程专业毕业的了。

具体的内容可以读Readme，我复制部分重点在这里。

![](/files/-M6_84sYU8gUo8XYxJi2)

## 简介

有很多设备可以读取CAN总线上的数据，或者模拟发生数据，而可编程的平台并不多，一般是借助厂商提供的API调用驱动，达成和设备进行数据交换的目的。

本软件的目的，是构建一个通用的CAN通信规范，可以兼容多种设备，同时有着统一的编程接口，可以对CAN总线进行各种数据操作，完成模拟或者测试的工作。我决定将我这部分工作开源出来，是为了所有饱受手工操作之苦的测试人员做一点事情。

成本起见，请尽可能使用便宜的设备，如果总线负载重，超过500帧每秒，请选择贵一点的设备。

## 不足之处

以下的不足之处，希望有志之士能帮我改进一下。

我最早写这些代码的时候经验不足，很多东西如果让我重新来过我一定会重新设计，比如

* CANSignal的结构设计的比较“硬”对于驱动的支持和测试任务的支持，都应该做成插件式，这样的话比较利于扩展。
* 关于选择脚本语言，JavaScript的资源会多一点，但是如果重新来过我可能会选择C#。
* 关于脚本语言的IDE，也不是很友善，如果重新来过，我可能做成插件式开发，打包之后可以加载到程序里。
* 再来一遍我可能全部使用WPF开发，主要是我之前开发VB6的经验让我更加熟悉WinForm的开发，所以仅仅是编辑器组件使用了WPF

最后关于源代码中的变量和函数的命名问题，我需要解释一下： 你可能会看见两种命名风格，一种是getDeviceId这样的Java式（lowerCamelCase），一种是GetDeviceId这种C#推荐的方式(UpperCamelCase/PascalCase)。 这个可能会让你维护的时候觉得有点肮脏。 但是由于我在开发的时候还需要写Java，Python，Matlab以及其它很多语言。在你同时写多种语言的时候切换风格真的是一件非常折磨人的事情，所以最早期的代码全部是Java式的命名（包括我早期的Python代码），最近我已经竭尽全力重构为C#式，但是工作量太大，一时难以全部完成。

还有一部分UNIX C式的命名往往是第三方的驱动引入的，这一部分我不准备修改，原因也很简单，开发驱动的人大多是写C或者C++的，他们写的C# API自然也是C的风格。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.tsingjyujing.com/other-tech/can-panel.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
