| 導購 | 订阅 | 在线投稿
分享
 
 
 

用Delphi開發DLL來代替8581協議控制和采集華爲PSM—A10電源 (三.思路)

來源:互聯網網民  2006-01-31 22:23:05  評論

現在補上開發思路

系統接口方法:

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

拆掉包頭,取出數據信息並填入到相應的采集通道(就是某個采集量的定義)

控制處理:

分遙調和遙控

建立遙控包,下發控制命令並回調上報數據

建立遙調包,添加參數,檢索回調的命令

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
現在補上開發思路 系統接口方法: 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 拆掉包頭,取出數據信息並填入到相應的采集通道(就是某個采集量的定義) 控制處理: 分遙調和遙控 建立遙控包,下發控制命令並回調上報數據 建立遙調包,添加參數,檢索回調的命令
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有