microyao 发表于 2008-9-28 00:43:15

刚写的一个四轴姿态监控的上位机软件,版本V1.0。【恢复】

本来我是在四轴上加一个液晶显示器来显示姿态情况的,但飞起来时总不能老看着它啊。



于是写了这个简单的上位机软件。只是V1.0版,功能只是姿态数据用无线方式上传至计算机,由计算机显示。功能有待改进。



准备下一版本显示出偏角及各轴加速度值。



下一版本2D图形显示飞行姿态。



再下一版本3D图形显示飞行姿态。



编译环境:VC++ 6.0.

运行时抓图:

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_433569.jpg

 (原文件名:无标题.jpg) 



以上数值为模拟出来的。



附件:

1:四旋翼飞行器姿态监控终端V1.0(没在其它机器上测试,故运行不了请装VC6)

点击此处下载 ourdev_433549.rar(文件大小:6K) (原文件名:OUR2M3K.rar) 



 原代码:





//串口初始化

m_com.SetCommPort(1);

m_com.SetInputMode(1);

m_com.SetInBufferSize(1024);

m_com.SetOutBufferSize(512);

m_com.SetSettings("9600,n,8,1");

if(!m_com.GetPortOpen())

m_com.SetPortOpen(TRUE);

m_com.SetRThreshold(1);

m_com.SetInputLen(0);

m_com.GetInput();

//串口初始化终





//数据处理

void COUR2M3KDlg::OnOnCommMscomm2() 

{

        // TODO: Add your control notification handler code here

                        LONG len,k;

                        //定义数据枚举

                        enum our2m3kdata{data_rx='d',data_ry,data_rz,data_ax,data_ay,data_az,data_rv,data_av,data_temp};

                        COleSafeArray data;

                        BYTE rxdata;

                        //初始化数据变量

                        if(m_com.GetCommEvent()==2)

                        {

                                data=m_com.GetInput();

                                len=data.GetOneDimSize();

                                //执行数据类型转换.

                                for(k=0;k<len;k++)

                                data.GetElement(&k,rxdata+k);

                                //执行数据处理。

                                for(k=0;k<len;k++)

                                {

                                        if(rxdata==(BYTE)data_rx)

                                        {

                                                m_rx="";

                                                for(long rol=1;rol<5;rol++)

                                                m_rx+=rxdata;

                                        }

                                        if(rxdata==(BYTE)data_ry)

                                        {

                                                m_ry="";

                                                for(long rol=1;rol<5;rol++)

                                                m_ry+=rxdata;

                                        }

                                        if(rxdata==(BYTE)data_rz)

                                        {

                                                m_rz="";

                                                for(long rol=1;rol<5;rol++)

                                                m_rz+=rxdata;

                                        }

                                        if(rxdata==(BYTE)data_ax)

                                        {

                                                m_ax="";

                                                for(long rol=1;rol<5;rol++)

                                                m_ax+=rxdata;

                                        }

                                        if(rxdata==(BYTE)data_ay)

                                        {

                                                m_ay="";

                                                for(long rol=1;rol<5;rol++)

                                                m_ay+=rxdata;

                                        }

                                        if(rxdata==(BYTE)data_az)

                                        {

                                                m_az="";

                                                for(long rol=1;rol<5;rol++)

                                                m_az+=rxdata;

                                        }

                                        if(rxdata==(BYTE)data_rv)

                                        {

                                                m_rv="";

                                                for(long rol=1;rol<5;rol++)

                                                m_rv+=rxdata;

                                        }

                                        if(rxdata==(BYTE)data_av)

                                        {

                                                m_av="";

                                                for(long rol=1;rol<5;rol++)

                                                m_av+=rxdata;

                                        }

                                        if(rxdata==(BYTE)data_temp)

                                        {

                                                m_temp="";

                                                for(long rol=1;rol<3;rol++)

                                                m_temp+=rxdata;

                                                m_temp+=".";

                                                for(;rol<5;rol++)

                                                m_temp+=rxdata;

                                        }

                                        UpdateData(FALSE);

                                }

                        }

                        



}





2:测试时用的模拟器C文件。(针对M8,与计算机串口联接)XTL=8000000HZ

/******************************



编译环境:GCC。



******************************/



#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>



void port_init(void)

{

        PORTB = 0x00;

        DDRB  = 0xFF;

        PORTC = 0x00;

        DDRC  = 0x7F;

        PORTD = 0x00;

        DDRD  = 0xFF;

}





void usart_init(void)

{

        UCSRB = 0x00;

        UCSRA = 0x00;

        UCSRC = _BV(URSEL) | 0x06;

        UBRRL = 0x33;

        UBRRH = 0x00;

        UCSRB = 0x08;

}





void init(void)

{

        cli();

        port_init();

        usart_init();

}



void sentdata(char ch,long data)

{

                //前导符

                while ( !( UCSRA & (1<<UDRE)) );

                UDR = 0xa5;

                while ( !( UCSRA & (1<<UDRE)) );

                UDR = 0x5a;

                while ( !( UCSRA & (1<<UDRE)) );

                UDR = 5;



                //数据负载

                while ( !( UCSRA & (1<<UDRE)) );

                UDR = 'd'-1+ch;

                while ( !( UCSRA & (1<<UDRE)) );

                UDR = '0'+(data/1000);

                while ( !( UCSRA & (1<<UDRE)) );

                UDR = '0'+(data%1000/100);

                while ( !( UCSRA & (1<<UDRE)) );

                UDR = '0'+(data%100/10);

                while ( !( UCSRA & (1<<UDRE)) );

                UDR = '0'+(data%10);

                _delay_ms(6);

}



int main(void)

{

        init();

        while(1)

        {

                sentdata(1,5468);

                sentdata(2,5689);

                sentdata(3,5468);

                sentdata(4,5689);

                sentdata(5,5468);

                sentdata(6,5689);

                sentdata(7,5468);

                sentdata(8,5689);

                sentdata(9,2595);

                _delay_ms(100);

                sentdata(1,4564);

                sentdata(2,4790);

                sentdata(3,6748);

                sentdata(4,4646);

                sentdata(5,8342);

                sentdata(6,1567);

                sentdata(7,1587);

                sentdata(8,3786);

                sentdata(9,2837);

                _delay_ms(100);





        }

        return 0;

}















本贴被 microyao 编辑过,最后修改时间:2008-09-28,02:05:04.

armok 发表于 2008-9-29 07:03:32

TroyLee 发表于 2008-9-29 03:04:23

8342mV ? 這是用那一種 Sensor 及 ADC ?

jackmo 发表于 2008-11-24 12:10:50

正准备测下MMA7260,,可以用上

luzhengmao 发表于 2008-11-29 11:39:37

VC 可以选静态编译,但文件会比较大。

kortan 发表于 2008-10-23 20:38:06

楼上的 我的system32里有那两个文件了 可还是运行不了 要替换吗?

本贴被 kortan 编辑过,最后修改时间:2008-10-23,20:39:54.

kortan 发表于 2008-10-24 17:21:46

用那个软件看了我并不缺动态连接库。

kortan 发表于 2008-10-24 17:17:58

我计算机里的那两个文件比较新。依然运行不了。那个小工具挺有用的。

jimo 发表于 2008-10-24 15:42:36

比较一下版本,如果你的版本更旧就替换一下



参考:

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1660090&bbs_id=1025

本贴被 jimo 编辑过,最后修改时间:2008-10-24,15:48:30.

jimo 发表于 2008-10-23 18:51:04

点击此处下载 ourdev_466012.rar(文件大小:510K) (原文件名:msvcrt.rar) 



不能运行的下载这个文件,把里面的两个动态库解压到c:\windows\system32

john1980 发表于 2008-10-23 16:21:20

楼主,

你现在是动态链接模式,程序拷贝到其他没有装vc 6的机器上无法运行。

你在vc 6 的link选项里面,选择静态链接就可以了。

kortan 发表于 2008-9-29 21:02:00

在两台XP电脑下面也运行不了。打开后什么也不显示。

希望楼主加强一下通用性。资料很有价值。

lxw2087290 发表于 2011-2-4 17:48:07

mark

12288144 发表于 2011-2-5 22:29:47

make

chengluoran 发表于 2011-2-6 09:20:42

mark

g921002 发表于 2011-2-6 13:31:43

做監控軟體,可以的話儘量圖形化+數值顯示比較直覺,有時會來不及看數值,用圖表看比較直覺。
可以的話,Log的功能做進去比較方便。
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_614689N1R0VB.jpg
(原文件名:aerogcs.jpg)

自己在用的...

zpwkxg 发表于 2011-2-19 10:14:45

g921002:请教您aerogcs监控软件的编译环境是什么软件?右下的三个不错,是用的什么控件?

g921002 发表于 2011-2-20 17:48:03

回复【16楼】zpwkxg
g921002:请教您aerogcs监控软件的编译环境是什么软件?右下的三个不错,是用的什么控件?
-----------------------------------------------------------------------

BCB6.0 <-- 很舊。但是沒錢買新版。靜態編譯單一執行檔。
GSM 航空空件 US149,有試用版可下載。
其他如七段顯示用到的iocomp是站上抓的,後來覺得沒啥用,而且買正版的效益不太大,後面release給客戶可能捨棄不用。

lcq007 发表于 2011-2-20 19:47:07

这位兄弟的意见很有建设性回复【15楼】g921002
-----------------------------------------------------------------------

zhangjinrui 发表于 2011-3-18 20:28:21

mark

panstephan 发表于 2011-5-2 15:50:45

mark

skystalker 发表于 2011-5-4 15:52:11

回复【15楼】g921002
做監控軟體,可以的話儘量圖形化+數值顯示比較直覺,有時會來不及看數值,用圖表看比較直覺。
可以的話,log的功能做進去比較方便。


(原文件名:aerogcs.jpg)
引用图片
自己在用的...
-----------------------------------------------------------------------

呀 看你的HDI有VOR和DME,是做来好看的还是真有这个功能?

skystalker 发表于 2011-5-4 15:53:46

回复【16楼】zpwkxg
g921002:请教您aerogcs监控软件的编译环境是什么软件?右下的三个不错,是用的什么控件?
-----------------------------------------------------------------------

可以不用现成控件
用PS做好图片用GDI+控制即可,可以做得比较仿真,自已做上位机虚拟仪表不难的

lewisz 发表于 2011-7-15 01:58:05

mark

study2440 发表于 2012-3-1 14:40:10

mark

52robot 发表于 2012-10-5 13:19:22

不错,楼主再接再厉

残忆视觉 发表于 2013-3-31 15:40:30

000000000mark】
页: [1]
查看完整版本: 刚写的一个四轴姿态监控的上位机软件,版本V1.0。【恢复】