您当前的位置:北京赛车pk10技巧 > 通讯编写

基于Delphi的AI仪表上位机控制软件的编制
[发布日期:2011-12-19]

本文地址:http://www.usbye.com/projects_detail.php?classid=11&id=10
文章摘要:,绝口不道亚健康乌集之交,扫描工具镖局烧号。

基于Delphi的AI仪表上位机控制软件的编制

中南大学信息科学与工程学院 作者:熊俊

    摘要:厦门宇电公司的AI系列仪表在工业现场应用广泛,北京赛车pk10技巧:但关于使用Delphi开发AI仪表的监控软件的资料却很少,本文根据自己对AI仪表上位机监控软件的开发经历,详细介绍了基于Delphi开发AI仪表通用程序的过程,其中包括对于AI仪表数据的读写的程序介绍以及在数据读写过程应注意的一些问题。

关键词:Delphi AI仪表 串行通讯

    引言:厦门宇电公司的AI系列仪表具有功能强大,操作简单,控制性能好等特点,并已在工业现场得到了广泛的应用。然而仪表在实际的工业应用中,往往需要利用计算机对其所采集的数据进行读取、保存,以及对于仪表自身参数进行读取与设定。为此宇电公司为用户提供了AI系列仪表的串行通讯接口模块,安装此模块后,用户能够方便地通过计算机232口实现与仪表的数据交换。本文就AI-708P仪表作为范例,详细介绍如何利用Delphi开发AI系列仪表的上位机监控软件。

1.具体实现

    AI仪表是通过计算机串口与计算机连接的,其具有自己的串行通讯协议,软件开发者可以根据此通讯协议实现对仪表的数据读取与设定,以及对仪表状态的读取与设定。网上对于AI仪表通讯程序的例程多为VB编制,并且程序较为简单,功能较为单一,不利于二次开发者对仪表进行全面开发。在此笔者自己针对708P型温度控制器编制了一个AI仪表的上位机监控软件以实现计算机对AI仪表监控。本文根据自己的开发经历,详细介绍了基于delphi开发AI仪表上位机通用程序的开发全过程,以及在开发过程中所应注意的一些事项。
1.1程序功能介绍
    本软件为AI仪表通用监控软件,其包括以下功能:
1. AI仪表检测与识别
2. AI仪表参数的读取与设定
3. AI仪表的状态读取与设定
在下面将对以上功能的实现作相应介绍。
1.2功能实现
    在开发过程中,为了缩短开发周期,软件中使用了第三方控件SPCOMM实现串行通讯功能,当然如果读者感兴趣可以自己尝试使用WINDOWS API函数自行编制此功能,对于WINDOWS API函数以及控件SPCOMM的使用方法,在本文中不作介绍,读者可以参看相关资料。在介绍程序功能前必须先说明两个过程:
    A. 读仪表参数过程TAI.ReadData(var msg: TMessage)程序代码如下:
var
NO1,NO2,NO3,NO4,NO5,NO6,NO7,NO8:Cardinal;
{NO1,NO2,NO3,NO4,NO5,NO6,NO7,NO8分别对应要发送的8个数据}
s : string;
p : PChar;
begin
NO1 := 128 + msg.WParam;//对于读数据过程WParam保存要读仪表的地址
NO2 := NO1;
NO3 := 82;
NO4 := msg.LParam; //对于读数据过程LParam保存要读的参数的参数地址
NO5 := 0;
NO6 := 0;
NO7 := 82 + msg.WParam;
NO8 := msg.LParam;
s := chr(NO1)+chr(NO2)+chr(NO3)+chr(NO4)+chr(NO5)+chr(NO6)+chr(NO7)+chr(NO8);
p := PChar(s);
Comm1.WriteCommData(p,Length(s));
end;

    B. 写仪表参数过程TAI.SetData(var msg: TMessage) 程序代码如下:
var
NO1,NO2,NO3,NO4,NO5,NO6,NO7,NO8:Integer;
{NO1,NO2,NO3,NO4,NO5,NO6,NO7,NO8分别对应要发送的1~8位}
s:string;
p:PChar;
begin
NO1 := 128 + Meter_Addr;// Meter_Addr为全局变量,保存仪表地址
NO2 := NO1;
NO3 := 67;
NO4 := msg.WParam;//对于写过程WParam保存要写参数的参数地址
{按协议要求,计算出NO5、NO6、NO7以及NO8的值}
NO5 := (msg.LParam mod 256);// 对于写过程LParam保存要写参数值
NO6 := (msg.LParam div 256);
NO7 := ((67 + Meter_Addr + msg.LParam + msg.WParam *256) mod 256);
NO8 := ((67 + Meter_Addr + msg.LParam + msg.WParam *256) div 256);
s := chr(NO1)+chr(NO2)+chr(NO3)+chr(NO4)+chr(NO5)+chr(NO6)+chr(NO7)+chr(NO8);
p := PChar(s);
Comm1.WriteCommData(p,Length(s));
end;

    在程序中定义两个消息常量:
WM_Set = WM_USER + 100
WM_Read = WM_USER + 200

    通过发送以上两个消息并附带相应的参数,实现对以上两个过程的调用,从而实现对消息对仪表数据的读取与设定。以上两个过程按照AI仪表通讯协议,计算出每一位发送的数据,然后组合成字符串,一次性发送给仪表。每个参数代表的意义见程序解释。
1.2.1 AI仪表检测
    在实际应用中,计算机往往不止连接一个仪表,所以需要对不同地址仪表进行检索和识别:
    对于仪表检索是通过对地址的辨识实现的,利用AI通讯协议的读动作读取不同地址的仪表的地址参数,如果此时会返回值,并且其读回的数据与发送所设定的地址变量值相等,则确定检索到此地址的仪表,并添加到仪表队列中。
    对于仪表的识别即对已存在的仪表的识别的,即仪表必须有其明确且独立的地址。识别仪表关键在识别仪表的段数(单段或多段),对于不同段数的仪表,其某些参数地址所对应的参数意义有所不同。在软件中是通过读取一个固定参数地址的数据实现的,比如说:对于多段仪表来说,读取某一段的数据时(其参数地址通常都会大于25),仪表会返回相应参数地址的返回值,然而对于单段仪表,向该地址发送数据仪表并不会作任何反应。
1.2.2 AI仪表参数读取
    软件能够读取仪表内所有可读取的数据,包括采集的数据、控制数据以及对仪表的设定。自动识别小数点位数,按仪表表盘显示格式显示读取的数据。对于仪表的读取过程实现可以参看以上的ReadData过程以及宇电的仪表通讯协议。需要指出的是在读取过程中需要注意对某些特殊数据的处理,其中包括小数点的处理以及负数的处理。
A. 小数点的处理
    在仪表数据的读取过程中,当你获得了仪表的返回数据后,必须按照AI通讯协议对返回的数据进行分析和计算。其中存在一个问题,通过计算后有的数据可能是实际数据的10倍,而有的数据可能与实际数据相同。根据笔者的观察,在仪表说明书中允许带小数点的数据都需要进行10倍处理,即将返回数据计算得到的结果然后作除10计算才能得到正确的数据。
B. 负数的处理
    在仪表数据的读取过程中,往往会碰到负数的问题,此时按照AI通讯协议计算得到的数据往往会很大并且数值与实际数值不符。对于这种小于零的数据需要进行负数处理。但是如何识别一个负数呢?其实对于负数而言,当其被读取时其高位往往大于127,于是我们可以通过判断高位来识别负数。当识别到负数后,我们要显示正确的数据就存在一个转换,从二进制的角度分析可知仪表返回的数据的高位的最高位为标志位,当其为0时代表正数,当其为1时代表负数。根据以上分析,如果我们需要得到负数的数值,只需将计算出来的数据减去65536即可。
    以下是接收过程中的一些处理程序:
    接收过程:
var
p : PChar;
begin
p := Buffer;

buffer为SPCOMM的接收过程中所接收到的数据。
    负数处理过程:
if (p7>127 then
ReData:=((p6+p7*256)-65536)/10
else
ReData := (p6+p7*256)/10;

p6、p7是接收到数据的第7位和第8位的转化为整数后的值,可以通过p6:=ord(p[6])(p为接收过程中的p)获得。根据以上过程得到的数据ReData再经过小数点分析及即可得到与仪表一致的数据。
1.2.3 状态的读取
    仪表的状态包括运行状态及报警状态,可以通过读取仪表的第21号参数同时获取。
    读取21号参数时,仪表返回的参数值是系统仪表的运行状态值,由于各个位代表的仪表运行状态不同,所以需要对其进行分析。返回数据的第3位代表停止位,第2位代表暂停位,其余的0位和1位代表运行位。只要2和3位不为1即代表仪表处于运行状态。所以当我们检测仪表的运行状态时,我们只需要对这些位进行识别即可。
    读取21号参数时,仪表同时会返回报警状态,通过对报警状态位的识别,可以获取仪表的报警状态。MV值的0、1、2、3位分别代表仪表的上限报警、下限报警、正偏差报警、负偏差报警状态,其为1有效。
1.2.4 参数设定
    对于参数的设定可以参考仪表通讯协议以及过程SetData,其需要注意的是其数据的计算、小数点处理以及负数的处理。其处理方式与数据的读取基本相同,在此不再详细讲叙。

2.结语

    通过以上方法可以实现仪表与计算机的数据交换,并且具有程序简单、模块化、运行可靠、功能全面等特点。该程序源代码已被本公司广泛应用于AI仪表的工业应用软件中。

北京赛车pk10技巧
pk10买9码杀一码好方法 pk拾计划软件 北京pk10开奖结果记录 dpk100驱动 北京pk10免费计划
沉迷北京赛车输每天输 pk10在线直播 北京赛车pk10游戏规则 北京pk10赛车计划大群 pk10开位号杀下期一码
pk10特别号是什么 北京赛车pk10春节停吗 pk10号码统计数据网 北京赛车pk10系统出租 北京pk10开奖统计
北京赛车pk10最快直播 北京pk10六码稳赚技巧 北京pk10规则 北京赛车七码方法 pk10龙虎
天津快乐十分官网 北京赛车pk10稳赢公式 福建快三一定有 吉林十一选五前三直走势图 赚钱儿
北京快乐8官网 宁夏11选5开奖结果查询 排列五网站论坛 重庆时时彩开奖直播 北京快乐8全天计划
贵州十一选五助手 湖北体育彩票 秒速时时彩玩法 内蒙古福彩快3下载 超过21的牌叫什么牌
重庆时时彩官网下载平台 北京快3所有号码图☆北京快3公交堵车吗☆北京快3开奖结果查☆北京快3开奖直播视频 云南时时彩走势 名门国际 京城彩票