我自己VB编写的上位机用于IPS 的启动 停机 给定转速 转速显示的设置 顺便重新了解下 数据在内存中的存

Machine_speed 定义为全局变量

 

已经定义的是有符号数

实际上 负数0 还是一个整数0

规定负数0 就是 负数最大是 -32768

最高位是符号位置

负数0

就是 1000 0000 0000 0000 0X8000

 

 

运行一下 就是

 

 

那么紧接着 有一个问题 就是

1 111 1111 1111 1111 最高位是符号位

规定 16位有符号数 负数0 就是 -32768

提问:-32767 在内存中的存放形式?

注意数据在内存中是以为补码的形式进行存放的

32767 对应的16进制 7 FFF

0111 1111 1111 1111 正数32767 的补码

符号位 不变 其余各位求反以后 加1 得到补码

1 000 0000 0000 0000 加1 变为

1 000 0000 0000 0 u001

所以写入 0X8001

显示-32767

 

 

 

 

再验证一下 如果要显示 负100 转/分

应该写多少 ?

正数100 对应16进制 0X64

0000 0000 0110 0100

符号位是1

1000 0000 0110 0100

符号位以外 各位求反以后

1111 1111 1001 1011

求反以后加1

1 111 1111 1001 1100

F F9 C

 

 

 

 

 

好了 现在开始用上位机 显示转速

 

 

 

 

 

 

 

 

 

 

 

 

更改之前

 

更改以后

 

 

 

 

 

 

 

 

 

注意 必须选择 CAN2 进行接收

 

 

 

 

 

 

 

 

 

 

 

 

 

 

电机启动命令

 

 

电机停机命令

 

 

 

 

 

 

 

 

 

 

设定转速的指令

在启动的状态下 改变转速是可以的, 如果是停机的状态下,改变转速无效 。

需要有一个 全局变量的标志位。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

现在 发现转速的设定没有激活 ,我现在需要看一下 是为什么 ?

 

我发现设定的40000 已经下发下去了

 

发现CANsETSPEED 设定的是4000

 

但是Motor_Spd obj 却一直是 34000 ?

为什么是这样 ?

 

因为易控的上位机的Motor_rspdobjBypassF_C 变量是存在EEPROM 里面的,

用易控的上位机 可以在程序运行的时候, 实时的更改这个变量 。更方便调试

 

如果参数调整好以后,就可以把这些参数下载进入EEPROM 里面去了 。

 

 

现在将这个上位机的工作过程拍摄成视频

 

如果需要用我自己编写的上位机 进行转速的设定

我需要 把 标定区的变量不再使用

然后用我编写的CAN 结构体 用CAN结构体的成员 进行赋值 临时变量 temp

然后把 temp 的值 赋给 Motor_spdObj

 

 

Motor_spdobj 就是最终的给定速度

Motor_spdObj 是全局变量

 

PID 函数的调用形式

PID 函数的定义

Void Motor_PID (float32 spdobj ) spdobj 是形式参数

{

 

…..

Motor_spd.deltaF=spdobj – Motor_spdESTF

 

……

 

}

 

PiD函数的调用形式

Motor_PID(Motor_spdobj)

直接将全局变量赋值给 函数中的局部变量 然后使用

这样的好处 是 不占用内存。

 

 

 

 

 百度网盘地址

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-12-25 18:40  STEVEN-SUN  阅读(323)  评论(0编辑  收藏  举报