⑧℃
百度空间 | 百度首页 
               
 
背景音乐
 
 
文章列表
 
2009年07月13日 星期一 下午 10:48

今天用C#实现了串口通信,基本骨架如下:(网上C++版本的例程更多,但考虑到这是我C#项目的一小部分,所以还是决定用C#实现)

SerialPort com = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
com.Open();

byte[] sndBuf = new byte[2];
sndBuf[0] = 0x20;
com.Write(sndBuf, 0, 1);

byte[] rcvBuf = new byte[26];
com.Read(rcvBuf, 0, 26);

回传的数据,存在一个byte[26]数组中。意义:从机向主机回送20H和所有参数数据(V,A,W,PF,Hz),每个参数占五个字节,共5*5+1=26个字节。

可是这些数据竟然不满足以字节为单位,可恶到要按“位”解析!

对每个5字节参数而言,前4字节表示尾数,后1字节表示阶码。在阶码的1字节中,最高位为数符,次高位为阶符(这两个都是0为正,1为负),低6位为阶码值。

例如:

接受字节次序:21,43,65,87,82(均为16进制表示)

其浮点数为:87654321,82 (82的二进制是1000 0010 ,数符为负,阶符为正,阶码值为2)

则它表示的是 —8.7654321*10^2

好几个繁琐的地方。表现在:拼接时,1位数要补齐为2位;整数部分如果是2位,要除10;阶码要按位解析。

 
2009年07月13日 星期一 下午 07:10

健身房装修,停业一周。哈,上周没去,这周又不用去了。

那,本周的健身就调整为游泳吧。

本周work list:

1. 仪器的数据交互。

2. 学科调研。

 
2009年07月09日 星期四 下午 03:28

原以为界面设计不过是控件的拖拖拽拽而已,这有何难度可言。我设计界面,师兄却在一旁指指点点,叫我一定要优化界面。恼火!他所说的漂亮化和人性到底是什么意思!

我并非不知道,只是要做到这两点,有点难!

我上网搜索“界面设计”、“界面优化”、“界面美化”,都没有想找的内容,搜到的内容里面,只有一个“换肤”沾点边,但不是我想要的。我希望找到一本书,教教我在设计哪种form的时候应该用哪些控件,如何排版才不会让窗体显得小气或是不平衡,怎样才能用户体验更好,界面更加人性化。

希望有一天我在这方面也成为了经验人士,然后高兴地传播给大家。

 
2009年07月08日 星期三 下午 10:46

我的梦想,就是有一个自由的工作,工作之余,有很多自己的时间,可以在午后,坐在我的大房子里,淋着阳光,倚着枕头,完全的融入的,看小四的书。

这个该称之为一个多么不像梦想的梦想呢?梦想,大概就是在梦里可以想想的事情。

今晚我说,“老吴啊,我发现自己的文艺细胞越来越退化了,很发愁。。。”老吴:“因为你在北航呆的时间太多了。”我一惊。我就想着吧,以后不能让自己孩子来北航了,这真是个埋没个性,培训机器人的地方。

我始终还是喜欢文艺的调调啊,要我把它埋藏起来,把工作放在第一位,虽说不是不可能,可是不快乐啊。

 
2009年07月07日 星期二 下午 04:45

DLL中提供的函数接口带两个参数。

C# P/Invoke时写成了三个参数。

运行不报错。

超级措无比的错误就发生于此:

明明我传的数据是对的,他那边的处理也是对的,可是包里总会莫名其妙的多出一些数据,无法解析它的意义。

以后一定要谨记。

 
2009年07月07日 星期二 下午 03:59
 
2009年07月06日 星期一 下午 11:40

趁heven在check程序的间隙,赶快完成这篇日志。

今天遇到的主要问题是,C/C++中的联合在C#struct中如何等价封送?

如果联合中,仅仅只有值类型,那么it's easy。但是偏偏既有值类型又有引用类型(int[]),所以值类型被初始化了,但引用类型会报错误:

Could not load type 'UserInterface.RunStatus' from assembly 'UserInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it contains an object field at offset 4 that is incorrectly aligned or overlapped by a non-object field.

所以关键要让引用类型初始化。

首先尝试了重载struct的构造函数,在其中给int[]申请空间和赋值。行不通!也许是因为变量先被定义,再调用了重载的构造函数,在前一步出了错,后一步也就没有意义了。

然后想把int[]改成byte[]来做,可是实验才知,byte[]也没什么特权……引用类型就只有string可以行得通。

后来,jjj建议在struct里声明一个大的byte数组,然后完全变成位操作,“取值直接&操作,赋值直接|操作”,这次写的时候就把位运算的操作放在单独的类中,下次可以重用。听起来比较复杂,但可行。

最后,师兄发话说把int[4]变成4个int……我其实很崩溃,但也是最不用费脑子的了,好吧,我就这样做了。

++++++++++++++++++++++++++++++++

有两篇参考文章:

http://www.xland.com.cn/article/7/34/0705/21178.htm(这个人遇到跟我一样的问题,可以仔细研究一下)

http://www.cnblogs.com/allenlooplee/archive/2004/12/25/81917.html(很多人推崇的一篇讲联合的文章,但我碰到的问题这块讲得不够详细)

 
2009年07月06日 星期一 下午 02:19

有人拽,是因为他有拽的资本。

今天晚上准备跟师兄和heaven联调初步的版本,主要测试:查询和修改SpecRunStatus,休眠。

陆续添加:界面查询NodeStatus,唤醒。

 
2009年07月03日 星期五 下午 10:28

界面比我预想的烦。

(1)外层结构体中含int[]。(用通用的方法:[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)],网上说这种方法不适合嵌套(未验证))

(2)外层结构体中嵌套结构体,且内层结构体中含float[]。(很惨,这就是上面所说的嵌套问题)

除了上面两个涉及结构体声明的问题,还有些问题亟待解决:

(3)师兄对heaven重新定义了结构体,我是否也要改。

(4)文档上不一致的地方。

(5)界面响应事件,远比想象的繁琐啊。

暂时先列这些吧,肯定还有更多问题。师兄怎么能一晚上不在实验室呢,我俩都被问题弄得晕头转向了……

 
2009年07月03日 星期五 上午 11:14

今天好像周五了

哦,三天没工作了啊。。(沉思)

那。。。周末小测试怎么办?!周一联调怎么办?!

我好意思说我的工作连一半都没做完吗。。。

 
     
 
 
个人档案
 
charlottefuson
女, 23岁
北京 海淀区 
上次登录:
5小时前
加为好友
 
   
 
我的爱好
 
我的偶像
周笔畅
喜欢的书
小四的书
喜欢的音乐
笔笔的歌
喜欢的运动
游泳(虽然游的不好)
喜欢的品牌
艾格……
其他兴趣爱好
睡懒觉看小说花痴
   
 
文章分类
 
 
 
 
 
 
 
     
 
好友最新文章
 
     
 
最新评论
 
文章评论|照片评论

纪念时刻.~~~
 
鲁豫有话说
 
好耀眼啊~~~~~~~~
 
     
 
留言板
 

回复charlottefuson:O(∩_∩)O好的。 姐姐也是,度过一个好假期!
 

浏览,是一份难得的雅致;悠闲,是一种放松的感觉;朋友,是一生修来的幸福;友情,是...
 

呵呵,姐姐,这几十天我都没来,现在我来啦~ 最近北京很热,给你降降温。
 

回复屈:你是屈江波??
 

你是谁啊 我是屈江波
 
     


©2009 Baidu