现在补上开发思路
系统接口方法:
Query ExecCmd PROC_RPTSIGNAL PROC_RPTRUNTIMEMSG
添加的方法:
{--------------计算校验和的过程------------------------------------}
{-------@param inputBuf: 输入的字节数组----------------------}
{-------2005-06-28 add by Fane--------------------------------------}
procedure setchecksum(var inputBuf: array of Byte);
{--------------建立发送命令的过程------------------------------------------------}
{-------@param Ver: byte 版本号--------------------------------------------------}
{-------@param Addr: byte 地址---------------------------------------------------}
{-------@param Cid1: byte 控制标识码------------------------------------------}
{-------@param Cid2: byte 命令信息:控制标识码相应信息---------------}
{-------@param InfoLen:integer 命令内容长度------------------------------}
{-------------将程序里的全局变量SendCommand填充-----------------------}
{-------2005-06-17 add by Fane-----------------------------------------------------}
procedure fillSendCommand(Ver,Addr,Cid1,Cid2: byte;InfoLen:integer);
{--------------得到通信版本的函数-------------------------------------------------------------------------}
{-------@param hComm: longword 通道号---------------------------------------------------------------}
{-------@param version:Byte 版本号(保持默认或为0)------------------------------------------------}
{-------@param nMAddr:LongInt 地址--------------------------------------------------------------------}
{-------@param Aportmethod:Byte 通讯模式-------------------------------------------------------------}
{-------@return :Byte-----得到程序的版本并返回-------------------------------------------------------}
{-------2005-06-20 add by Fane------------------------------------------------------------------------------}
function getVersion(hComm: longword;version:Byte;nMAddr:LongInt;Aportmethod:Byte):Byte;
{--------------得到转化字节的过程----------------------------------}
{-------@param input1: Byte 数据高位-----------------------------}
{-------@param input2: Byte 数据低位-----------------------------}
{-------@param reAssign: Byte 得到的数据-----------------------}
{-------2005-06-27 add by Fane---------------------------------------}
procedure change2to1(input1,input2:Byte;var reAssign: Byte);
修改采集程序
回报类型:
4: 中间过程采集发
5:中间过程采集收
中间过程数据采用4,5回报
添加 getNoData, isCheckError, isRtnError 三个方法来替代检查部分,简化程序
{--------------是否有数据返回的过程--------------------------------------------}
{-------@param nModuleIdx: longint 模块序号------------------------------------}
{-------@param lenact: Integer 接收到的数据长度--------------------------------}
{-------@param proc: PROC_RPTSIGNAL 回调接口(报告分解)-------------------------}
{-------@param procRpt: PROC_RPTRUNTIMEMSG 回调接口(报告收发过程)-------------}
{-------@param ReturnBuf: array of Byte 组成的返回包---------------------------}
{-------2005-07-01 add by Fane-------------------------------------------------}
function hasNoData(nModuleIdx: longint;lenact: Integer;proc: PROC_RPTSIGNAL;procRpt: PROC_RPTRUNTIMEMSG;var ReturnBuf:array of Byte):Boolean;
{--------------校验和错误的过程------------------------------------------------}
{-------@param nModuleIdx: longint 模块序号------------------------------------}
{-------@param Databuf: array of Byte 接收到的数据-----------------------------}
{-------@param proc: PROC_RPTSIGNAL 回调接口(报告分解)-------------------------}
{-------@param procRpt: PROC_RPTRUNTIMEMSG 回调接口(报告收发过程)-------------}
{-------@param ReturnBuf: array of Byte 组成的返回包---------------------------}
{-------2005-07-01 add by Fane-------------------------------------------------}
function isCheckError(nModuleIdx: longint;Databuf: array of Byte;proc: PROC_RPTSIGNAL;procRpt: PROC_RPTRUNTIMEMSG;var ReturnBuf:array of Byte):Boolean;
{--------------返回码是否正确的过程--------------------------------------------}
{-------@param nModuleIdx: longint 模块序号------------------------------------}
{-------@param Databuf: array of Byte 接收到的数据-----------------------------}
{-------@param proc: PROC_RPTSIGNAL 回调接口(报告分解)-------------------------}
{-------@param procRpt: PROC_RPTRUNTIMEMSG 回调接口(报告收发过程)-------------}
{-------@param ReturnBuf: array of Byte 组成的返回包---------------------------}
{-------@param I: Integer 开始位置---------------------------------------------}
{-------2005-07-01 add by Fane-------------------------------------------------}
function isRtnError(nModuleIdx: longint;Databuf: array of Byte;proc: PROC_RPTSIGNAL;procRpt: PROC_RPTRUNTIMEMSG;var ReturnBuf:array of Byte;I: Integer):Boolean;
上层采集程序调用Query方法-----实现智能设备数据采集
首先必须确保通信的版本一致
在Query方法里先调用getVersion来得到通信的版本,再版本为0时,对version赋值$20
根据采集需要,建立11个采集命令
分别是
交流配电模拟量采集(浮点),交流配电开关量采集,交流配电告警量采集,交流配电参数采集
整流配电模拟量采集(浮点),整流配电开关量采集,整流配电模拟量采集
直流配电模拟量采集(浮点),直流配电告警量采集,直流配电参数采集
系统状态采集
数据接收处理:
先通过hasNoData判断是否有数据回报,返回为真表示无数据,上报通信故障
isCheckError判断是否是校验和错误,返回真时表校验和错误,报故障
isRtnError判断是否返回码错误,返回为真时表相应错误,报故障
接着对得到的数据解析DataBuf
拆掉包头,取出数据信息并填入到相应的采集通道(就是某个采集量的定义)
控制处理:
分遥调和遥控
建立遥控包,下发控制命令并回调上报数据
建立遥调包,添加参数,检索回调的命令