ch2003_23 发表于 2009-4-22 20:31:13

Delphi一个月学习笔记,顺带交个作业:简单的串口通讯和波形实时显示

从开始学Delphi到现在差不多一个月了,今天终于将自己一直想要的一个东东实现了,我的上位机学习先要告一段落了,接下来又要接着搞ARM了,所以趁此机会总结下。

一、工具的选择:

提到上位机开发,初学者最头痛的应该是选择那个开发工具好呢?VC、VB、Delphi、BCB、C#……当时我更是困惑,从没有搞过上位机,大学中倒是学过VB,可早就忘光光了。而且当时只知道VC,没听说过BCB和Delphi是什么东东。VC开始就被俺否决了,因为论坛上都说VC难,就没看到谁说VC简单的,再加上俺的编程功底本来就差,所以VC想都不敢想。VB的话,虽然资料众多,但是好像有些陈旧。然后在论坛上看到Delphi和BCB都简单易上手,而且使用者也很多,还有人说他们也不逊于VC,于是开始转向这两个。然后了解到这两个是同一家公司出的,只是Delphi以Pascal语言编程,BCB以C/C++编程,尽管很多人都说Pascal语言好学,我还是不敢想象从一门新的语言学起。于是选择BCB,用BCB6+ComPort控件写了个基本的串口通讯,真的很快,但是在BCB6中安装Iocomp画图控件时总安装不成功,所以不得不又硬着头皮转向了Delphi。真正开始用才发现Pascal语言不是很难学,基本上一边做一边学。Delphi的版本很多,现在都有Delphi2009了,不过还是Delphi7最为经典,使用者众多,交流方便。

二、说一下我做的这个东东:

前一段时间做了一个信号采集模块,采到的数据不知道对不对,只能一个个字节看或使用同事写好的Matlab程序验证,总是不太方便,想来想去自己也要写一个,顺便学习下什么是上位机。这个东东主要在于波形显示部分。串口发送接收使用控件很简单实现。使用的是24位AD、8个通道,而且还要任意时候可以关闭和显示某个通道。将采集到的数据转化进制,并跟参考电压计算后,显示出实际采样的电压值。串口控件采用开源的ComPort3.0,图形控件采用Iocomp控件。要写的程序不是很多,由于数学基础不咋的,搞得比较慢。

三、Delphi的编程思想:

面向对象的程序设计OOP(Object Oriented Programming)是Delphi的精髓。那怎么理解这个面向对象呢?我们一般写的基于单片机的程序都是在一个main函数按顺序执行和中断驱动的,主要操作外设,写驱动,设置外设相关寄存器,响应外部和内部中断,或者直接使用厂家封装好的的固件库。而Dlephi操作的对象就是“对象”,Delphi中没有main函数,也不是顺序执行或中断驱动,而是事件驱动机制,通过操作对象的接口来编程,具体来说对象可能是某个按钮、文本框,也可能是某个可视化组件或者外部安装的控件。对象的接口就是:对象的属性、方法、事件。其实Delphi中的对象可以相当于单片机编程中的外设,其属性就相当于外设的某个寄存器,方法就是封装好的外设固件库,事件就相当于中断。其实熟悉后会发现比单片机的编程更简单。

四、学到的东西:不管做什么,结果如何,学到东西就好。这个过程中,由于语句简单、也不涉及算法,所以编程上可以说没啥长进,不过让我见识了自己的编程基础真的很薄弱,重新认识了很多基本的概念。

1、Byte和Char不分:开始总认为是一回事,后来查书才知道Byte是单字节无符号整型,取值范围0~255;Char是字符型。用单引号‘’或#加ASCII码的形式表示。进而学习到Pascal中,整型包括有符号整型和无符号整型,前者又包括Shortint(1)、SmallInt(2)、Integer(4)、Int64(8);后者包括Byte(1)、Word(2)、Longword(4),括号中表示所占的字节数。

2、AScII码:以前写程序从没有注意到过AscII码,但是在Delphi中要用到,ASCII:The American Standard Code for Information Interchange ,美国(国家)信息交换标准(代)码,一种使用7个或8个二进制位进行编码的方案,ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩展ASCII。基本的 ASCII 字符集共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。标准 ASCII 码使用 7 个二进位对字符进行编码,对应的 ISO 标准为 ISO646 标准。由于标准 ASCII 字符集字符数目有限,在实际应用中往往无法满足要求。为此,国际标准化组织又制定了 ISO2022 标准,它规定了在保持与 ISO646 兼容的前提下将 ASCII 字符集扩充为 8 位代码的统一方法。 ISO 陆续制定了一批适用于不同地区的扩充 ASCII 字符集,每种扩充 ASCII 字符集分别可以扩充 128 个字符,这些扩充字符的编码均为高位为 1 的 8 位代码(即十进制数 128~255 ),称为扩展 ASCII 码。

说了这么多,说来说去就是说,AScII码不过是用0~127或0~255表示的字符编码。在Iocomp的图形控件的事件字符中要使用AscII码,其实是表示一个字符,只不过是用AscII码的形式表示,所以前面要加上#,比如说,事件字符设为0X0a,这是十六进制,转化为十进制为10,所以表示为#10,事件字符如果是0x55,就可以表示为#85。

在Pascal中有两个系统函数完成AscII码的转换:Chr(X:Byte):Char--将AScII码转化为字符型,比如:chr(97)就表示a字符即'a';如果是十六进制的话,比如说0x0a,chr($0a),$在Delphi中表示十六进制。同样字符型转化为AScII码可以用ord(x),适用于所有的顺序类型。比如:ord('a')就转化为97.
3、学习Delphi不得不说String?字符串类型:String号称是Delphi中最灵活的数据类型,可是开始的时候,我感觉String是最讨厌的,为什么很多数据都用String表示嘛,串口接收到的数据明明是十六进制数据,用String表示多不方便呀,现在虽然能够理解,还未得String的精髓。而且字符串型还有其他两种怪怪的类型:AnsiString、WideString,还有一个UniCode,他们的区别很多资料上都有讲,可惜还没使用过,有些东西只有应用了才能参悟。

先断断续续写到这儿吧,以后有啥心得再补充。

凉凉我的作业:
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_438819.JPG
1 (原文件名:1.JPG)

http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_438820.JPG
2 (原文件名:2.JPG)

http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_438821.JPG
3 (原文件名:3.JPG)

源代码:
My Com V0.1ourdev_438822.rar(文件大小:509K) (原文件名:DataPack.rar)

elecfun 发表于 2009-4-22 20:35:40

很好啊,还有这么长的总结,对像我这样打算学上位机编程的初学者来说是无疑的极大的帮助

ch2003_23 发表于 2009-4-22 21:01:11

这个东东还不是很完善,就是基本满足现在的应用,还应该做以下改进:
1、首先把界面做的更漂亮点
2、界面应该更大一下,接收区应该分两列,一列是字符串,一列是十六进制的
3、发送接收应该添加文件支持
4、至少做一个简单的Help文件,现在里面只有一个简单的readme
5、要是能够自定义串口数据帧开始位、结束位等参数以及AD的参考电压、前级放大倍数、动态范围就好了

这段学习Delphi的过程中得到了很多网友的指点,向他们表示深深的感谢,其中包括ourdev的knight_avr 、rube 永丰庵、zhchyl 指挥等朋友,还有CSDN的wound979、lovelymelon、jadeluo等网友,再次向他们表示感谢。

有空我会逐渐完善这些功能的,有好的建议和批评还请不吝指出,请联系:
QQ:277565600
Email:ch2003_23'at'163.com

lcptw 发表于 2009-4-22 22:57:28

一看就是有一定功底的作品,继续努力~~~

mark

ch2003_23 发表于 2009-4-23 08:56:03

有朋友在QQ上问编译出现错误的问题,说明:
1、首先正确安装ComPort3.10串口控件和iocomps v3.0.4 SP2 R1 曲线图控件,这两个控件在Gougou上都可以搜索下载,也可以在本站伍奇网友发的帖子:18B20温度采集+上位机实时曲线,附源程序 里面有上传,在此也感谢伍奇网友,安装方法Help文件都有详细说明;
2、按照Readme修改文件夹

xidao 发表于 2009-5-28 14:30:59

mark

ndust 发表于 2009-5-28 15:25:20

不错

rube 发表于 2009-5-28 18:40:50

看了半天,楼主是熟人

czzhouyun 发表于 2009-5-28 23:39:13

mark

fy024 发表于 2009-5-29 01:22:06

楼主高手啊

banyan_city 发表于 2009-5-29 03:44:04

标记

tuowai 发表于 2009-6-21 16:48:15

向楼主学习!!

lysoft 发表于 2009-6-21 18:04:15

String之强大是其它语言所没有的
从Delphi2009起引入新的RawByteString用于处理原始字节级数据

czzhouyun 发表于 2009-6-23 12:11:51

mark

eagle2006 发表于 2009-6-25 13:40:12

好东西,收藏了

csclz 发表于 2009-6-25 14:29:47

收藏

colinwen 发表于 2009-7-23 21:31:58

不会用啊!

FREEXP 发表于 2009-7-23 21:40:25

好样的,支持一个!

jackiezeng 发表于 2009-7-23 22:51:51

顶一下,,LZ学习一个月, 偶学了几年了,还不会画曲线图~!

armok 发表于 2009-7-24 00:07:10

Cool !

xiaoning 发表于 2009-8-2 22:59:09

一个月就这么强了 佩服楼主啊

fq1888 发表于 2009-8-30 02:49:53

Mark

cjr82123 发表于 2009-8-30 09:55:19

收藏

gddx123 发表于 2009-8-31 23:03:04

顶了 最近正想做个类似的呢 拿来分享了啊

ndust 发表于 2009-8-31 23:59:00

jh

keaiduo 发表于 2009-9-17 10:44:46

mark

cph201 发表于 2009-9-28 11:14:22

學習中............

shaoye 发表于 2009-10-8 09:02:55

学习中,顶

jiangjx 发表于 2009-10-8 09:27:01

收藏

isbit 发表于 2009-10-11 22:14:09

一个月,很厉害啊!偶像!

wlhj521334 发表于 2009-10-11 22:21:41

mark

382383706 发表于 2009-12-10 14:11:07

顶!

tear086 发表于 2009-12-20 19:02:55

mark

wukaka 发表于 2009-12-27 11:31:02

楼主真厉害,看了你的帖子,我也决定用DELPHI了

yunqian09 发表于 2010-1-5 22:47:50

mark

beer 发表于 2010-1-5 23:25:40

mark

lee345 发表于 2010-1-12 14:30:45

好啊,信心十足!

pujing 发表于 2010-1-12 15:33:31

mark

xinchangkk 发表于 2010-1-12 15:46:11

收下了,Iocomp控件 带了吗?

jom520 发表于 2010-1-13 15:16:23

好作品,继续努力~~~

mark

fxping 发表于 2010-1-23 16:50:30

楼主一个月时间就这么厉害,请问使用串口能不能直接采样数字信号,高低电平?再把信号记录下来?

sagetom 发表于 2010-1-27 20:53:58

mark,挺让人心动的。

moon0213 发表于 2010-1-27 23:31:11

mark!

Ranlee 发表于 2010-1-29 19:17:34

回复【42楼】moon0213
-----------------------------------------------------------------------

《delphi串口通信与工程实践》可能会对大家有所帮助,我这是电子版的,一直在用感觉不错
很不错的一本关于delphi串口通讯的书ourdev_530561.pdf(文件大小:3.28M) (原文件名:Delphi串口编程与工程实践.pdf)

xiaolei0428 发表于 2010-2-8 19:09:00

学习要会总结,楼主做的太棒了

sunjie718 发表于 2010-3-17 22:07:54

delephi怎么调用VB谢谢程序
对VB的文本框text   combo   command
进行调用,谢谢各位啊

ammcu 发表于 2010-3-18 09:28:13

mark

hxz042 发表于 2010-3-18 09:51:16

mark

farmer 发表于 2010-3-24 14:16:02

mark

zqd311107 发表于 2010-4-14 18:07:28

简单的串口通讯和波形实时显示

myhonour 发表于 2010-4-20 16:37:34

mark

fzy2007a 发表于 2010-4-20 17:32:06

请教楼主:你的下位机发送的数据时怎样的啊?起始字符、终止字符各是什么啊?
          各通道数据如何鉴别的呢?
          不胜感激,O(∩_∩)O谢谢

xinlight 发表于 2010-4-28 10:01:17

第一手资料,必须收藏

alan8918 发表于 2010-4-28 10:19:16

不错,值得参考

weiwdr05 发表于 2010-5-15 17:53:21

mark

2004353215 发表于 2010-5-21 11:53:19

papa123 发表于 2010-5-21 12:37:58

mark之。。学习

electricit 发表于 2010-5-21 12:40:11

Iocomp就是不错,特别是做控件界面

yilichen 发表于 2010-5-24 22:41:47

楼主牛人!!看了之后,我都有点想去学了.

moon0213 发表于 2010-5-25 01:02:14

mark

huangboss77 发表于 2010-5-29 15:22:18

mark

swustlx86 发表于 2010-6-7 17:51:50

mark

heyuncun 发表于 2010-6-11 19:54:26

mark

chenxiabalele 发表于 2010-6-16 17:44:00

谢谢,见识了写上位机的方法,受益很多

bjj9217 发表于 2010-6-16 18:49:18

mark

tomy 发表于 2010-6-17 23:20:24

mark·

zengyi703 发表于 2010-6-18 09:40:57

mark

isbit 发表于 2010-6-22 16:21:09

回复【4楼】ch2003_23 猪
有朋友在qq上问编译出现错误的问题,说明:
1、首先正确安装comport3.10串口控件和iocomps v3.0.4 sp2 r1 曲线图控件,这两个控件在gougou上都可以搜索下载,也可以在本站伍奇网友发的帖子:18b20温度采集+上位机实时曲线,附源程序 里面有上传,在此也感谢伍奇网友,安装方法help文件都有详细说明;
2、按照readme修改文件夹
-----------------------------------------------------------------------

搜不到这个帖子呢?
谁给一个连接?谢谢!

bd4sad 发表于 2010-6-22 16:29:35

mark

xiongqian 发表于 2010-6-23 10:43:42

我在delphi7中安装了楼主要求的两个控件,然后打开楼主的源代码,编译时出现以下的提示:
Could not create output file 'C:\Program Files\Borland\Delphi7\Projects\Project1.exe'
请高人指点一下,这是什么问题呀?
非常感谢!

b222 发表于 2010-7-7 21:51:44

delphi确实方便。。

mldcq 发表于 2010-7-14 17:56:22


坚持下去
会要好的收获的!

master0722 发表于 2010-7-14 19:53:53

好东西啊,收藏了

skystalker 发表于 2010-7-24 14:41:21

VC也不是那么难学吧,我最开始选择编程语言时就选了VC,也学了一个月,也做出了自己想要的串口东西
就算是用纯C也能把程序干出来的,同时能巩固C,好搞下位机

angguohui 发表于 2010-7-26 16:42:52

想问下学习DELPHI,先得看什么书,各位帮忙推荐一下

timeliss 发表于 2010-8-6 20:25:55

佩服,一个月就这么厉害了!

xiaosars 发表于 2010-8-27 11:24:02

mark

gzyang 发表于 2010-9-27 16:40:28

mark

ddlovepp 发表于 2010-10-26 19:58:19

我也要开始学上位机啦

ddlovepp 发表于 2010-10-26 19:59:43

ok,我也开始学啦

flame0510 发表于 2010-11-16 19:55:36

学习了,正打算学学上位机的编程

zsw3979 发表于 2010-11-16 21:33:30

看看了

hekun559 发表于 2010-11-23 19:05:53

lz 请教一下安装comport的方法 没成功啊!!!

10086 发表于 2010-11-24 20:28:24

谢谢,需要啊

qq990132841 发表于 2010-12-1 11:26:15

mark

wwk1996 发表于 2010-12-1 11:54:56

mark

mxh20999 发表于 2010-12-4 21:56:34

mark先。

icevel 发表于 2011-2-14 14:37:17

mark看来d比c简单~~

Jigsaw 发表于 2011-2-14 15:06:03

我也mark一回

yjiangxiaolin 发表于 2011-2-15 12:57:45

学习去!在学校学的都忘记了!

lanbin 发表于 2011-3-1 14:01:55

楼主的经验之谈

zym_0826 发表于 2011-3-9 22:53:05

学习了

starfe 发表于 2011-3-10 08:58:24

我是新手,谢谢你的学习经历和感想。目前上位机的编写我计划用C#,不知道能给一些建议吗?

andman 发表于 2011-3-17 21:04:59

mark一下

wayeah 发表于 2011-3-17 21:23:32

不错,记一下

athlonz 发表于 2011-3-18 22:38:06

mark

z421868436 发表于 2011-3-19 12:36:04

mark

zjn8888 发表于 2011-3-19 14:07:47

好东西

deadleon 发表于 2011-3-21 10:15:54

Iocomp挺好用的,之前在QT里面集成出来了,还没有仔细研究这个控件,学习之。

zxzxy1988 发表于 2011-3-21 11:07:29

mark
页: [1] 2
查看完整版本: Delphi一个月学习笔记,顺带交个作业:简单的串口通讯和波形实时显示