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)

 

 

如下图:

 

 

 

运行结果为:

 

 

百度网盘

posted @ 2020-01-22 12:01  STEVEN-SUN  阅读(832)  评论(0编辑  收藏  举报