我们测试一下,命令行输入 go run . --help,其结果如下:
生成模拟数据
要生成模拟传感器的数据,需要使用到 math/rand 和 time 这两个包。
先看代码:
第 17 行,我们需要一个 *rand.Rand 类型来生成随机数,它又需要一个源,这里使用 time.Now().UnixNano() 生成源,这样做的好处是因为这个时间纳秒数永远不会重复。
第 19 行,声明 value,它表示传感器的数值,在这先生成一个初始值。
第 20 行,是额定值,在这里也就是最大值最小值的中间平均值。
第 25 行,把更新频率(每秒更新的次数)转化为了两次更新之间的时间间隔(毫秒),并解析成 time.Duration 这个类型。
第 26 行,time.Tick 函数会返回一个 time 的 Channel,该函数会按照提供的时间间隔不断触发,并向这个 Channel 发送当前时间。
第 28 行,使用 for range 来处理 signal 这个 Channel,每次 Channel 中有数据传递过来,我们就使用 calcValue 这个函数来生成新的模拟数据。
第 29 行,把生成的最新数据打印一下即可。
calcValue 函数
生成模拟数据的逻辑是如果数据偏离额定值,那么尽量让下次生成的值向额定值靠拢。
这部分可根据自己的特定需求来实现,不必和我的相同。
先看代码:
第 35 行,声明了 maxStep 和 minStep 两个变量,表示本次更新相比上次所能够发生的最大变化和最小变化幅度。