現在補上開發思路
系統接口方法:
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
拆掉包頭,取出數據信息並填入到相應的采集通道(就是某個采集量的定義)
控制處理:
分遙調和遙控
建立遙控包,下發控制命令並回調上報數據
建立遙調包,添加參數,檢索回調的命令