称重量这种设备精度应该比显示的精度高很多。先确认一下你要输出的精度是多少?其次确认你需要的数据的有效范围,再然后确认一下稳定后,需要显示数值的延迟时间。就如同体重计,你去称买回来的一斤苹果是没什么意义的。体重计一般是10多公斤到200公斤有个范围,然后精度大约到0.1公斤。
要取稳定值一定是要取一段时间的,时间为横轴,重量为纵轴,是一个函数。根据你的描述,我大概能想象到你现在遇到的一个函数:数值从0,快速的变化到一个极大值,例如58,再下降到30,然后在58和30间震荡变稳定,趋向于40,然后东西被取走,从40开始又有一个震荡,再一下子趋向0
这样一个函数主要有3个稳定期,开始0,结束0,和称重40。排除不合理项0,似乎很容易获取40,其实工程上却不那么容易,因为无法准确定位剧烈震荡和稳定期。
设定一定的规则,排除杂项:例如如果超出合理范围直接丢弃;后一个值变化幅度很大,进行一定的数值变换;去除一定的精度。目标就是让一个变化很大的曲线,变动幅度小。甚至如果写的复杂,可以用上求导,然后导数小于某一个门限,例如0.1才取输出这个读数。
我可以想到的比较简单的方法就是前后两个取值相减超出一定幅度认为是震荡期,排除这个干扰项。连续多个取值小于一定幅度,认为是稳定期,可以用任何一个值来表示稳定期的数值。从数学上说,其实就是求变化率,就是用了导数的方法。变化率大就是震荡期,变化率小就是稳定期。
取一段然后滤波求稳定时间最长的值
?具体怎么做呢,大神
你取时间段的值,过滤掉不合适的值,然后用算法(比如平均)计算得到新值返回
具体怎么做呢?
@久久小垠:
1.自己打开电脑。
2.自己写代码
耀华的秤在表头上可以设置稳定后发送
你是要我换电子秤吗? T_T
延时5秒钟
怎么延时?
@久久小垠:
线程阻塞
Thread.Sleep(5000);
取值
固定
闪屏
那你怎么知道是稳定的值呢?物件放的过程中重量是不断变化的
还有一点,物件放上去就马上取下来的,要在短短的0.5秒内获取稳定的值
很简单,两个参数,一个波动范围,一个波动时间
只要符合这这两个就行