如果位置信息反馈到控制器,或者是运动总线伺服做的:那么改变下编程,用相对运动方式,脊闭渗命令脉冲= 目标位置 - 当前位置。这样就可以补偿累积误差。
浮点数的存在是完全有必要、不可或缺的。电脑由于设计上的特点,它是不可能精确储存一个无限小数(比如说圆周率)的,否则的话一台电脑上的全部内存空间都不够用来储存一个数字!因此,电脑就用浮点数来模睁近似表示一个实数,其中单精度浮点数(Single)占用4个字节,可表示森码旅7位有效数字(比如说圆周率用Single型表示就是3.141593),双精度浮点数(Double)占用8个字节,可表示15位有效数字(圆周率的Double型值为3.14159265358979)。正因为它是“近似值”,所以浮点数的运算难免会产生误差,这个是不可避免的,而且这也不是VB的“罪”,在所有程序设计语言中都是存在的(当然,不同的语言可能有不同的规避措施,VB也许在这方面做得不够好)。货币型(占用8个字节)是一种特殊的数据类型,它看起来像浮点数(因为可带小数),但其实它是定点数(因为它的小数位是固定4位的)。它在运算时会先把自己转换为整数(小数点右移4位),运算后再转为小数(小数点左移4位),所以它的运算是精确运算,不存在浮点误差的问题。但是,由于货币的特殊性,货币型只能有4位小数,因此当小数位超过4位时就不适合用货币型了。
变体型属于“万金油”数据类型,可接受任何数据类型,而且它会自动根据数值的特点自动选择适合的数据类型参与运算,如果数值不含小数,它会自动按整数处理;如果数值所含小数不多于4位,它会按货币型处理(这就是为什么你的程序用变体型不会产生误差的原因);如果小数位大于4,就按浮点数处理(也就是说你的程序处理的数据如果大于4位小数,用变体型一样会产生误差的)。但是,变体型属于VB的“畸形产物”(其他高级语言中是没有这样的类型的),除了刚入门的初学者,一般不建议使用变体型。因为变体型为了适应各种数据类型,它要占用16个字节的内存空间(也就是说一个变体型变量即使值为0,它也要占用16个字节),这会严重浪费宝贵的系统资源此凳,严重影响程序的运行效率,而且有可能会产生一些意料之外的错误(这里就不赘述了)。所以,千万不要以为变体型简单、好用,一个程序中如果大量使用变体型变量,那么可以肯定的是,这个程序会显得非常业余,一点也不专业!
综上所述,使用浮点数并不是因为它“准确”,而是当你处理的数据含有小数(尤其是大于4位的小数)时,你只能选择浮点数来计算了,别无选择!其次,浮点运算误差是不可避免的,只能通过其他措施尽量减小误差的影响。此外,变体型并不是一种独立的数据类型,它会根据需要自动转为整数、货币型、浮点数等,所以所谓“变体型不如单双精度准确”之类的提法也是错误的。
没开始测试时,显示有偏差?是否是:打开该面板 该值就为0.5?那应该是控件设置了默认值烂羡的缘故吧。将控件值改为0,右键点击Torque控件,选择设为默认值。
另提醒下,不要稿友过多的使用局部变量和全局变量,要注意读写的时序安排,键历槐不要造成不定的数据读取。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)