?? econv230p.pas
字號:
//-----------------------------------------------------------
//* Copyright (c) 2001,北京易控微網科技有限公司
//* All rights reserved.
//*
//* 文件名稱:econv230p.pas
//* 摘 要:主程序文件
//* 當前版本:2.30
//
//* 作 者:夏紅健
//* 完成日期:2004年5月26日
//* 取代版本:2.21
//* 原作者 :夏紅健
//* 完成日期:2005年6月2日
//* 修改說明:
// 1.增加用戶訂制波特率功能
// 2.終端錯誤幀數據采取丟棄處理
// 3.將STRTOINT函數改為STRTOINTDEF函數,防出錯
// 4.將編程風格規范化
//-----------------------------------------------------------
unit econv230p; //單元名
interface
uses
//-----------------------------------------------------------
//* 外部單元說明:
// VaClasses, VaComm 串口通訊控件 版本 Version 2.01 (Info@varian-software.com)
// func 為外部函數庫
// aboutp 為關于窗口
// tempp 為設置數據臨時窗口
// filedefine 為teconfile類的定義
//-----------------------------------------------------------
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls, ComCtrls, Menus, ExtCtrls, Buttons,
VaClasses,VaComm, func, aboutp, tempp, filedefine;
type
TMainForm = class(TForm)
PAGECON: TPageControl;
INPUTSTATE: TTabSheet; // 開關量輸入頁面
COILSTATE: TTabSheet; // 開關量輸出頁面
HOLDREGISTER: TTabSheet; // 保持寄存器頁面
INPUTREGISTER: TTabSheet; // 輸入寄存器頁面
PROTECT: TTabSheet; // 保護頁面
COMMUNICATION: TTabSheet; // 通訊頁面
HELP: TTabSheet; // 幫助頁面
DATADEF: TTabSheet; // 數據定義頁面
POWER: TTabSheet; // 電度頁面
XIANGLIANG: TTabSheet; // 相量圖頁面
TESTRPT: TTabSheet; // 測試報告頁面
helpMemo: TMemo; // 幫助MEMO
datamemo: TMemo; // 數據定義MEMO
sendmemo: TMemo; // 計算機發送數據MEMO
revmemo: TMemo; // 計算機接收數據MEMO
eventmemo: TMemo; // 事件MEMO
testrptmemo: TMemo; // 測試報告MEMO
inputregistergrid: TStringGrid; // 輸入寄存器表
protectgrid: TStringGrid; // 保護數據表
holdregistergrid: TStringGrid; // 保持寄存器表
coilstategrid: TStringGrid; // 開關量輸出表
inputstategrid: TStringGrid; // 開關量輸入表
PowerGrid: TStringGrid; // 電度數據表
xianglianggrid: TStringGrid; // 相量數據表
MainMenu: TMainMenu;
m_rtutpye: TMenuItem; // 終端類型子菜單
fileopen: TMenuItem; // 打開終端類型描述文件
m_comset: TMenuItem; // 通訊設置子菜單
m_baudrate: TMenuItem; // 波特率菜單
b110: TMenuItem; // 110
b300: TMenuItem; // 300
b600: TMenuItem; // 600
b1200: TMenuItem; // 1200
b2400: TMenuItem; // 2400
b4800: TMenuItem; // 4800
b9600: TMenuItem; // 9600
b14400: TMenuItem; // 14400
b19200: TMenuItem; // 19200
b38400: TMenuItem; // 38400
b56000: TMenuItem; // 56000
b57600: TMenuItem; // 57600
b115200: TMenuItem; // 115200
b128000: TMenuItem; // 128000
b256000: TMenuItem; // 256000
buser: TMenuItem; // 用戶定義波特率
m_protocol: TMenuItem; // 通訊協議菜單
MODBUSRTU1: TMenuItem; // MODBUS RTU
MODBUSASCII1: TMenuItem; // MODBUS ASCII
cdt1: TMenuItem; // 其它協議 空
m_port: TMenuItem; // 通訊端口菜單
COM11: TMenuItem; // com0
COM21: TMenuItem; // com1
COM31: TMenuItem; // com2
COM41: TMenuItem; // com3
COM51: TMenuItem; // com4
COM61: TMenuItem; // com5
COM71: TMenuItem; // com6
COM81: TMenuItem; // com7
COM91: TMenuItem; // com8
COM101: TMenuItem; // com9
m_verify: TMenuItem; // 通訊奇偶校驗菜單
paritynone: TMenuItem; // 無
parityodd: TMenuItem; // 奇校驗
parityeven: TMenuItem; // 偶校驗
m_address: TMenuItem; // 通訊終端地址菜單
address1: TMenuItem; // 1
address2: TMenuItem; // 2
address3: TMenuItem; // 3
address4: TMenuItem; // 4
address5: TMenuItem; // 5
address6: TMenuItem; // 6
address7: TMenuItem; // 7
address8: TMenuItem; // 8
address9: TMenuItem; // 9
address10: TMenuItem; // 10
address11: TMenuItem; // 11
address12: TMenuItem; // 12
address13: TMenuItem; // 13
address14: TMenuItem; // 14
address15: TMenuItem; // 15
address16: TMenuItem; // 16
address17: TMenuItem; // 17
address18: TMenuItem; // 18
address19: TMenuItem; // 19
address20: TMenuItem; // 20
address21: TMenuItem; // 21
address22: TMenuItem; // 22
address23: TMenuItem; // 23
address24: TMenuItem; // 24
address25: TMenuItem; // 25
address26: TMenuItem; // 26
address27: TMenuItem; // 27
address28: TMenuItem; // 28
address29: TMenuItem; // 29
address30: TMenuItem; // 30
address31: TMenuItem; // 31
address32: TMenuItem; // 接收等待時間菜單
m_comcontrol: TMenuItem; // 通訊啟停控制菜單
m_help: TMenuItem; // 幫助菜單
m_about: TMenuItem; // 關于菜單
StatusBar1: TStatusBar; // 通訊狀態指示欄
sendtimer: TTimer; // 發送時間定時器
revtimer: TTimer; // 接收時間定時器
readholdtimer: TTimer; // 讀保持寄存器定時器 自動讀取
readfifotimer: TTimer; // 讀FIFO定時器 自動讀取
PopupMenu1: TPopupMenu; // 右鍵彈出菜單1 用在數據定義頁面
save: TMenuItem; // 保存數據定義文件
saveas: TMenuItem; // 另存數據定義
Save1: TSaveDialog; // 保存對話框
open1: TOpenDialog; // 串口通訊控件
PopupMenu2: TPopupMenu; // 右鍵彈出菜單2 用在保存幫助文件
save2: TMenuItem; // 保存幫助文件
rptbtn: TBitBtn; // 生成報告按鈕
saverptbtn: TBitBtn; // 保存報告按鈕
ClrRptBtn: TBitBtn; // 清除報告按鈕
Splitter1: TSplitter;
Splitter2: TSplitter;
Panel1: TPanel;
Image1: TImage;
XIEBO: TTabSheet;
XieBoGrid: TStringGrid;
N1: TMenuItem;
TimerOut1: TTimer;
N2: TMenuItem;
VaComm1: TVaComm; // 相量圖形顯示
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
// 菜單處理
procedure fileopenClick(Sender: TObject); // 打開數據定義文件
procedure b110Click(Sender: TObject); // 修改波特率
procedure MODBUSRTU1Click(Sender: TObject); // 修改協議
procedure COM11Click(Sender: TObject); // 修改端口
procedure paritynoneClick(Sender: TObject); // 修改奇偶校驗
procedure address1Click(Sender: TObject); // 修改地址
procedure m_comcontrolClick(Sender: TObject); // 開停通訊
procedure m_aboutClick(Sender: TObject); // 顯示關于窗口
// 通訊定時器處理
procedure VaComm1RxFlag(Sender: TObject); // 產生數據接收標志處理
procedure revtimerTimer(Sender: TObject); // 接收定時器處理
procedure sendtimerTimer(Sender: TObject); // 發送定時器處理
procedure readholdtimerTimer(Sender: TObject); // 讀保持寄存器間隔
procedure readfifotimerTimer(Sender: TObject); // 讀FIFO間隔
// 文件保存
procedure saveClick(Sender: TObject); // 保存數據定義
procedure saveasClick(Sender: TObject); // 另存數據定義
procedure save2Click(Sender: TObject); // 保存幫助
// 終端數據處理
procedure coilstategridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean); // 遙控繼電器
procedure holdregistergridSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean); // 修改保持寄存器
procedure PowerGridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean); // 修改電度初值
procedure protectgridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean); // 修改保護定值
procedure inputregistergridSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean); // 修改輸入寄存器對應系數
// 測試報告相關處理
procedure saverptbtnClick(Sender: TObject);
procedure rptbtnClick(Sender: TObject);
procedure ClrRptBtnClick(Sender: TObject);
procedure XieBoGridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure N1Click(Sender: TObject);
procedure TimerOut1Timer(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure VaComm1RxChar(Sender: TObject; Count: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
econfile: Teconfile;
getfilename: string;
smindex: integer; // 存貯表格操作的列值
comm_status: bool; // 通訊狀態,TRUE為運行狀態,FALSE為停止狀態
poll_count: integer;
read_index: integer;
sendflag1: boolean;//特殊幀標志
procedure system_init; // 系統初始化
procedure drawxiangliang; // 畫相量圖
procedure start_comm; // 啟動通訊
procedure stop_comm; // 停止通訊
implementation
{$R *.DFM}
//----------------------系統初始化---------------------------
procedure system_init;
var
temp: string;
begin
with mainform do
begin
helpmemo.lines.loadfromfile('help.txt'); // 調入幫助文件
datainit; // 初始化變量
comm_status := false; // 通訊狀態初始為停止
smindex := 0;
poll_count := 0;
read_index := 0;
sendflag1 := false;
econfile := Teconfile.init; // 構造ECONFILE對象
getdatafromfile(datamemo, getfilename, econfile);// 調入數據定義中的系統設置
// 根據數據定義文件初始化界面
if econfile.coilstatetotal>0 then displaycoilstate(econfile,coilstategrid);
coilstate.TabVisible := econfile.coilstatetotal>0;
if econfile.inputstatetotal>0 then displayinputstate(econfile,inputstategrid);
inputstate.TabVisible := econfile.inputstatetotal>0;
if econfile.holdregistertotal>0 then displayholdregister(econfile,holdregistergrid);
holdregister.TabVisible := econfile.holdregistertotal>0;
if econfile.inputregistertotal>0 then displayinputregister(econfile,inputregistergrid);
inputregister.TabVisible := econfile.inputregistertotal>0;
if econfile.setprotecttotal>0 then displayprotect(econfile,protectgrid);
protect.TabVisible := econfile.setprotecttotal>0;
if econfile.setpowertotal>0 then displaypower(econfile,powergrid);
power.TabVisible := econfile.setpowertotal>0;
if econfile.setxiangliangtotal>0 then displayxiangliang(econfile,xianglianggrid);
xiangliang.TabVisible := econfile.setxiangliangtotal>0;
if econfile.setxiebototal>0 then displayxiebo(econfile,xiebogrid);
xiebo.TabVisible := econfile.setxiebototal>0;
mainform.pagecon.Visible := true;
statusbar1.Panels[0].Text := '通訊未開始';
temp := econfile.comm.mode;
if (uppercase(temp)='RTU') then modbusrtu1.Checked:=true;
if (uppercase(temp)='ASCII') then modbusascii1.Checked:=true;
case econfile.comm.portnum of
1: com11.Checked := true;
2: com21.Checked := true;
3: com31.checked := true;
4: com41.checked := true;
else com11.checked := true;
end;
case econfile.comm.parity of
0: paritynone.Checked := true;
1: parityodd.Checked := true;
2: parityeven.checked := true;
end;
case econfile.comm.baudrate of
110: b110.Checked := true;
300: b300.Checked := true;
600: b600.Checked := true;
1200: b1200.Checked := true;
2400: b2400.Checked := true;
4800: b4800.Checked := true;
9600: b9600.Checked := true;
14400: b14400.Checked := true;
19200: b19200.Checked := true;
38400: b38400.Checked := true;
56000: b56000.Checked := true;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -