2011年8月3日
摘要: 最近有个需求,要拟合一些数据采集通道的修正结果,由于数据量大,需要自己写软件处理,于是上网找了个现成的..bug较多,基本发现的bug都修复了,增加了一些新的功能.只适用于 y = m0 + m1*x + m2*x^2 +....+mn*x^n 这一个函数的拟合.阶数可以自行定义,也可以根据判断最接近1的R来找到最合适的阶数.最大阶数为20.一样会送上demo,以及全部源码.demo里的数据为r141b(制冷剂)的饱和压力温度.7次方的公式就可以比较完美的拟合了.功能实现unit的pas,原作者的版权声明基本都在...修改者-我的声明也在.嘿嘿,貌似一次上传不完,分段了: 1 unit CYH 阅读全文
posted @ 2011-08-03 20:40 solokey 阅读(1337) 评论(1) 推荐(0) 编辑
摘要: TeeChart里有一个Tools,TPageNumTool.可以用于在Chart上显示当前页和总页数.还有一个TChartPageNavigator,可以用于控制Chart的最前页,前一页,后一页,最终页.Chart可以显示2个轴,1个是Bottom,1个是Top,代码里做了限制,如果添加Series的时候指定了asDateTime,那么上下2个轴都会显示为时间.不可以一个显示时间,另外一个显示别的.这里,如果要分别显示,需要修改源代码,修改方式如下:在TeEngine.Unit的TChartAxis里,增加一个Public的属性:property NeedDateTime : Boolea 阅读全文
posted @ 2011-08-03 20:29 solokey 阅读(2354) 评论(0) 推荐(0) 编辑
摘要: Excel的曲线中有一个小功能,可以点击曲线后,显示出这条曲线的名称.当一个Chart里显示Series过多时,颜色已经无法作为区分的手段,这个时候可以提供一个Selector的功能.使用TeeChart的自带Tool实现.使用SelectorTool(负责判断鼠标的点击对象)以及RectangTool(负责显示Series的Title等信息).这里做了判断,如果点击的不是Series,则不进行操作并清除选择.描述的话,就这些了.下面直接放源码.dfm文件: 1 object Form1: TForm1 2 Left = 192 3 Top = 175 4 Width = 870 5 Heig 阅读全文
posted @ 2011-08-03 20:25 solokey 阅读(1602) 评论(0) 推荐(0) 编辑
摘要: 这几天调试CQM1H,碰到了传说中的扩展指令下载错误的问题,折腾了2天,问题解决.首先,要将DIP开关的PIN 4拨到On.如果不是ON,下载时会出现DIP开关或设置错误,SysWin和CX-P都会报这个错误.如果拨到后也无法下载,请尝试断电,断电时间长一点..貌似CPU里有个不小的电容.使用CX-P(SysWin也一样)下载的话,在扩展指令中,将需要使用的扩展指令设置好.但是要注意一点..扩展指令的设置中有陷阱...1.所有的扩展指令必须指定,不可以空着.2.有些扩展指令,CQM1H并不支持,但是可以选择(在CX-P中,SysWin没这个问题),比如TMHH.这2点如果任何一个有问题,都会出 阅读全文
posted @ 2011-08-03 20:23 solokey 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 进程通常被定义为一个正在运行的程序的实例.它由两个部分组成:一个是操作系统用来管理进程的内核对象.内核对象也是系统用来存放关于进程的统计信息的地方.另一个是地址空间,它包含所有可执行模块或DLL模块的代码和数据.也包含动态内存分配的空间,如线程堆栈和堆分配的空间.进程是不活泼的.也就是说,进程是没有执行能力的,它仅仅是代码和数据的集合.它必须拥有一个在它环境中运行的线程,并由这个线程负责执行包含在进程地址空间内的代码.单个进程可以包含多个线程.每个线程都有自己的一组CPU寄存器和它自己的堆栈.每个进程至少拥有一个线程,如果进程一个线程都没有,也就失去了存在的意义,系统就会自动撤销该进程和它的地 阅读全文
posted @ 2011-08-03 20:21 solokey 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 当一个进程被初始化时,系统要为它分配一个句柄表.这个句柄表只用于内核对象,不用于用户对象或GDI对象.进程句柄表是一个数据结构的数组,每个结构都包括一个指向内核对象的指针,一个访问屏蔽和一些标志.当进程初次被初始化时,它的句柄表是空的.当进程中的线程调用创建内核对象的函数后时,内核就为该对象分配一个内存块,并将其初始化.这时,内核对进程的句柄表进行扫描,找到一个空项.将该索引位置上结构中的指针成员设置为该内核对象数据结构的内存地址,并设置访问屏蔽,以及标志位.1 function CreateEvent(lpEventAttributes: PSecurityAttributes; 2 bMa 阅读全文
posted @ 2011-08-03 20:20 solokey 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 会不会很奇怪,说多线程的故事,为什么会说内核对象.因为说到线程就要说进程,说到进程呢,又要说内核对象,并且解决多线程的同步问题,多要用内核对象.所以,先废话一下内核对象.什么是内核对象?简单的说,就是只有windows内核才能直接访问的对象(内存区域),就是内核对象(进程中的访问是通过句柄).比如:存取符号对象,事件对象,文件对象,文件映射对象,I/O完成端口对象,作业对象,信箱对象,互斥对象,管道对象,进程对象,信标对象,线程对象和等待计时器对象等等.这些对象由一些名为CreateXXXX函数创建,并返回一个内核对象的句柄,由CloseHandle关闭,因为内核对象是使用计数器管理生命周期, 阅读全文
posted @ 2011-08-03 20:18 solokey 阅读(546) 评论(0) 推荐(0) 编辑
摘要: ReadFile: 读取串口接收缓冲区内的数据.WriteFile: 将数据写入串口发送缓冲区.CloseHandle: 关闭用CreateFile打开的串口句柄.Windows的内核对象,大多都是用这个函数来关闭句柄.1 function ReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD; 2 var lpNumberOfBytesRead: DWORD; lpOverlapped: POverlapped): BOOL; stdcall; 3 function WriteFile(hFile: THandle; 阅读全文
posted @ 2011-08-03 20:16 solokey 阅读(2516) 评论(0) 推荐(0) 编辑
摘要: PurgeComm:清空缓冲区.ClearCommError:返回串口错误和报告.(也可以查看缓冲区状态)顺便提一下SetCommBreak:将传输状态挂起,直到调用ClearCommBreak;ClearCommBreak:恢复由SetCommBreak挂起的通信线路.1 function PurgeComm(hFile: THandle; dwFlags: DWORD): BOOL; stdcall; 2 function ClearCommError(hFile: THandle; var lpErrors: DWORD; lpStat: PComStat): BOOL; stdcall 阅读全文
posted @ 2011-08-03 20:14 solokey 阅读(9062) 评论(0) 推荐(0) 编辑
摘要: 卡巴斯基是个好同志..就是强大的有点太过分了...老和下载软件冲突,我就重装,结果杯具,重装失败.查了半天..都让我删注册表..删了也没用..后来找到一个方法,一试就OK...删除C:\WINDOWS\inf\INFCACHE.1这个文件,然后重启电脑,再装,就OK了.还有说修改系统时间的方法..那个就没尝试了... 阅读全文
posted @ 2011-08-03 20:13 solokey 阅读(1996) 评论(0) 推荐(0) 编辑
摘要: 金山迷你背单词默认的MIKE的声音实在是太二了,而且还不允许修改.下载了一个NeoSpeech,在控制面板->语音里设置了默认,却还是那难听的MIKE.网上找到一个解决办法,公布如下:先提供2个好听点的TTS男声:ed2k://|file|Neospeech.%E8%8B%B1%E8%AF%AD.Text-To-Speech.English.Paul.rar|234646887|7ada791554a32648bd10962622a51ad4|女声:ed2k://|file|NeoSpeech.英语.Text-To-Speech.English.Kate.rar|235151367|f2 阅读全文
posted @ 2011-08-03 20:12 solokey 阅读(547) 评论(0) 推荐(0) 编辑
摘要: GetCommMask,SetCommMask:读取和设置串口上的事件掩码.WaitCommEvent:根据SetCommMask设置的事件掩码,以阻塞的方式来等待事件的触发.1 function GetCommMask(hFile: THandle; var lpEvtMask: DWORD): BOOL; stdcall; 2 function SetCommMask(hFile: THandle; dwEvtMask: DWORD): BOOL; stdcall; 3 function WaitCommEvent(hFile: THandle; var lpEvtMask: DWORD; 阅读全文
posted @ 2011-08-03 19:20 solokey 阅读(2851) 评论(0) 推荐(0) 编辑
摘要: GetCommTimeouts, SetCommTimeouts 用于设置串口接收发送数据的超时参数. 1 function GetCommTimeouts(hFile: THandle; var lpCommTimeouts: TCommTimeouts): BOOL; stdcall; 2 function SetCommTimeouts(hFile: THandle; const lpCommTimeouts: TCommTimeouts): BOOL; stdcall; 3 PCommTimeouts = ^TCommTimeouts; 4 _COMMTIMEOUTS = record 阅读全文
posted @ 2011-08-03 19:18 solokey 阅读(2633) 评论(0) 推荐(1) 编辑
摘要: SetupComm 设置串口的缓冲区1 function SetupComm(hFile: THandle; dwInQueue, dwOutQueue: DWORD): BOOL; stdcall; hFile:之前用CreateFile打开的串口句柄.dwInQueue,dwOutQueue:接收缓冲区和发送缓冲区.返回如果是0,表示操作失败.非0表示操作成功.GetCommState 读取串口设置(波特率,校验,停止位,数据位等). 1 function GetCommState(hFile: THandle; var lpDCB: TDCB): BOOL; stdcall; 2 fun 阅读全文
posted @ 2011-08-03 19:17 solokey 阅读(3135) 评论(0) 推荐(0) 编辑
摘要: CreateFile用于打开串口,如果操作成功,返回一个句柄.1 function CreateFile(lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD; 2 lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; 3 hTemplateFile: THandle): THandle; stdcall; 来解释一下参数.lpFileName:要打开的串口逻辑名称,比如:COM1,COM2....,记住 阅读全文
posted @ 2011-08-03 19:15 solokey 阅读(2157) 评论(0) 推荐(1) 编辑
摘要: 突然发现,很多术语还是需要解释一下..看来我又要贴百度百科了..其实,如果只是在应用层面使用串口,这些概念基本只要简单了解一下即可,只要保证上下位机一致即可.至少我只停留在应用层面,欢迎鄙视...波特率:(BaudRate) 模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。 波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示,其单位是波特(Baud)。波特率与比特率的关系是比特率=波特率X单个调制状态对应 阅读全文
posted @ 2011-08-03 19:14 solokey 阅读(672) 评论(0) 推荐(1) 编辑
摘要: 串口接口的图..我就不贴了..这玩意满网络都是...这一章,可能都是我的胡言乱语.很可能....工业设备多中,多用串口作为其设备的通讯接口,近些年USB,TCP/IP的普及,很多设备也提供了相应的接口.相对比较看好TCP/IP接口,毕竟多个设备连接的时候,还是交换机相对便宜些,速度也快些.如果想更多的了解串口的知识和背景,可以参考一下龚建平教授(貌似是这个称呼?)的个人网站.目前我接触到的大部分RS232的串口设备,只需要接3根线(RX,TX,GND).另外,很多USB-RS232的转换器,也只接了这3根线,所以如果设备对其他的引脚也有定义,并需要使用,请不要使用便宜的USB-RS232转换器 阅读全文
posted @ 2011-08-03 19:13 solokey 阅读(735) 评论(0) 推荐(1) 编辑
摘要: 这一章大部分内容都来自百度百科..串口叫做串行接口,也称串行通信接口,按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB等。 RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。USB是近几年发展起来的新型接口标准,主要应用于高速数据传输领域。RS-232-C:也称标准串口,是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标 准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间 串行二进制数据交换接口技术标 阅读全文
posted @ 2011-08-03 19:12 solokey 阅读(1609) 评论(0) 推荐(1) 编辑
摘要: 帮老婆把NOKIA的6303C的固件刷到了最新..结果短信功能彻底挂了,网上查了很多,没有结果.大部分说出现这个问题都是09年9月以后,也有人说换了SIM卡就好了.于是去移动营业厅花了200积分换了一个,果然好了.目前看下来,应该是新固件和老的SIM兼容不好造成的.老婆的SIM卡应该是04年办的.我更杯具..SIM卡是02年办的..所以基本排除了手机的问题,是固件兼容性的问题..要么别刷机.要么刷机后出了问题..去营业厅换个最新的SIM卡... 阅读全文
posted @ 2011-08-03 19:11 solokey 阅读(595) 评论(0) 推荐(0) 编辑