CANmonitor我自己编写的程序
这个版本的程序, 上位机可以对电机的转速进行在线的设定,同时上位机接受电机控制器上报的母线电压,电机温度,控制器温度等。
在调试的过程中我遇见了一个问题,电机的转速的采样 。
根据协议:电机的转速为16位有符号数。我需要将两个字节合并成一个字进行显示。
我的做法是:有符号数 他的范围是-32768------32767
因为最高位是符号位 ,所以我采用先将两个字节拼接成一个字,然后
VB中的right (abcdef,2)表示取出字符串右边的两个字符。
Cint("&h"&text15.text) 表示将拼接的字符转换为16位有符号数 即Cint
Int 代表integer .
对电机转速采样的修改
我的方法是 先查看了 谭浩强 C语言中 的整形数
确定了 负数 -32768 在内存中的存放形式为 1000 0000 0000 0000
至于为什么是这个形式,你下去再做分析。
我假设在11号邮箱中
EcanaMboxes.MBOX11.MDL.word.LOW_WORD=(int16)_IQtoIQ15(Wm_filter);
即我认为DSP2812 上传给VB上位机的速度信息就是一个 有符号数
假设DSP上传的数据 为 1000 0000 0000 0000 即 0x8000
我在VB上位机显示 应该是 -32768
于是在 VB的formload 事件里 定义一个变量
Dim tempaaaa As Integer tempaaa 为定义的16位有符号数,范围-32768--32767
tempaaa = &H8000
MorphLCD1(1).Value = Val(tempaaa)
如下图:
运行结果为: