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

現在補上開發思路

系統接口方法:

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

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

控制處理:

分遙調和遙控

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

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

 
用Delphi開發DLL來代替8581協議控制和采集華爲PSM—A10電源(二)
匹配地址:交流模擬量 11個 cid1=40 cid2=41一個交流屏 兩路交流I是所得到的包頭 7E回報350包偏移內容返回報地址30-31輸出電流AI+85~I+9232-33輸出電流BI+93~I+10034-35輸出電流CI+101~I+10836-371路交流A相電壓I+1...查看完整版>>用Delphi開發DLL來代替8581協議控制和采集華爲PSM—A10電源(二)
 
[PB+Delphi]主應用程序用的是PB,操作界面調用Delphi開發的DLL
需求:由于最近接到這樣的項目,甲方他們要求我們開發的功能加入他們原先已經存在的一個PB開發的應用程序中。唯一的目的是不想有兩個exe應用程序。方案:把Delphi的應用程序用dll的形式打包,然後在PB裏調用。設計:...查看完整版>>[PB+Delphi]主應用程序用的是PB,操作界面調用Delphi開發的DLL
 
利用Delphi 5.0開發OLE自動化控制器操縱Excel
---- OLE自動化是Windows應用程序之間互相操縱的一種技巧。被操縱的一方稱爲自動化服務器(也稱自動化對象),典型的自動化服務器有Microsoft Word、Excel和Powerpoint。操縱自動化服務器的一方稱爲自動化控制器。在...查看完整版>>利用Delphi 5.0開發OLE自動化控制器操縱Excel
 
無進程DLL木馬的又一開發思路與實現
  一.Windows下進程的隱藏  二.Windows Socket 2 SPI技術概述  三.基于SPI的DLL木馬技術  四.主要代碼分析  五.小結與後記  六.附錄之源代碼  一)Windows下進程的隱藏  在M$的32位操作系統中,有許...查看完整版>>無進程DLL木馬的又一開發思路與實現
 
無進程DLL木馬的又一開發思路與實現
一.Windows下進程的隱藏二.Windows Socket 2 SPI技術概述三.基于SPI的DLL木馬技術四.主要代碼分析五.小結與後記六.附錄之源代碼一)Windows下進程的隱藏 在M$的32位操作系統中,有許許多多的辦法可以實現進程隱藏...查看完整版>>無進程DLL木馬的又一開發思路與實現