1

我正在开发一个运动控制系统,并且将有至少 5 个电机,每个电机都有参数,例如“齿轮箱比”、“每转节拍数”、“Kp”、“Ki”、“Kd”等,这些参数将被引用在构建电机实例时。

我对 StackOverflow 的问题是我应该如何组织这些数字?我知道这可能是一件优先考虑的事情,但是对于编码新手,我想我可以从你那里得到一些好的意见。

我立即看到的三种方法如下:

  1. 通过变量或数字写入对构造函数的调用 - 优点:有限的编码,可以以易于更改的方式实现,但可能比#define的更难

  2. 使用#define 来完成与上面类似的操作——优点:编码最少,易于更改(假设您想查看源代码)

  3. 加载一个文件(可能名为“motorparameters.txt”)并将参数加载到一个数组中并从该数组中填充。如果我真的想要,我可以添加一个 GUI 方法来更改这个文件,而不是手动。-- 优点:无需深入研究源代码即可轻松更改。

这些参数可能会随着时间而改变,虽然公司里还有其他编码员,但我想以一种易于配置的方式保留它。你们中有人看到#define 与变量相比有什么特别的好处吗?我已经有一个“constants.h”文件,我可以轻松地将#defines 添加到该文件中,或者我可以在对构造函数的调用附近添加变量。

4

4 回答 4

4

有一个被称为YAGNI(你不需要它)的原则,它说先做最简单的事情,然后在(如果)你的需求扩大时改变它。

于 2012-09-04T18:48:53.100 回答
2

在我看来,要做的事情是:

  • 编写一个灵活的电机类,它可以处理任何值(在合理范围内),即使您当前只关心 5 组不同的值。

  • 定义一个组件,为系统中的 5 个电机返回“正确”值(或使用“正确值”为系统构造 5 个电机)

  • 最初实现该组件以使用头文件中的一些硬编码值

  • 保留将来用相同 API 的实现替换该组件的选项,但是通过对硬件进行查询来从资源文件、文本文件、XML 文件、与用户的 GUI 交互、离线读取值找出它认为它有什么电机,无论如何。

我这样说的基础是,您可以通过在您怀疑自己想要一个可定制点(以防止以后更改它时进行大量工作)来最小化预期工作量,但是使用满足您当前的最简单的东西来实现一定的要求。

有些人可能会说实际上不值得键入 (a) 来定义组件,最好在main()(b) 中构造 5 个电机以使用头文件中的常量,最好在main(). (b)人们被广泛鄙视为“魔术常数”的兜售者(这并不意味着他们对实现者和未来维护者的相对总编程时间一定是错误的,他们只是可能是)和(a)人们意见分歧. 我倾向于认为定义这种事情需要几分钟,所以我真的不在乎它是否值得。从文件中加载值涉及指定一种文件格式,一旦遇到真正的文件,我可能会后悔定制的理由,所以在需求出现之前,我个人不会为此烦恼。

于 2012-09-04T19:05:37.083 回答
0

总体思路是将代码中会更改的部分与不会更改的部分分开。改变的可能性越大,你就越需要让它更容易改变。

如果您正在构建一个商业应用程序,其中成百上千的用户将使用许多不同的电机,那么编写 UI 并将数据存储在配置文件中可能是有意义的。

如果这是开发代码并且这些参数不太可能更改,那么将它们填充到您的 constants.h 文件中的#defines 可能是要走的路。

于 2012-09-04T18:48:23.443 回答
0

如果您没有安全或 IP 问题,3 号是一个不错的选择。每当您或其他人接触您的代码时,您就会引入回归的可能性。通过将参数保存在文本文件中,您不仅可以让自己的生活更轻松,还可以减少未来可能出现的错误范围。

于 2012-09-04T18:48:42.227 回答