亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? main.pas.~118~

?? 給出一個(gè)工業(yè)PLC聯(lián)網(wǎng)監(jiān)控的例子
?? ~118~
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
		for I := 0 to adoDBSrc.RecordCount - 1 do
		begin
			cbxUser.Items.Add(adoDBSrc.FieldByName('username').AsString);
			adoDBSrc.Next;
		end;
		SB1.Panels[9].Text:='操作員登錄中......';
		if adoDBSrc.Active then	adoDBSrc.Close;
	end;

	with adoDBSrc do  //顯示工程信息
	begin
		if Active then Active:=False;
		adoDBSrc.CommandText:='select * from projectConfig';
		adoDBSrc.Open;
		if True then
		begin
			prjInfo.prjName:=FieldByName('ProjectName').AsString;
			prjInfo.sTime:=FieldByName('SaveDataTime').AsInteger;
			prjInfo.cPort:=FieldByName('ComPort').AsString;
			prjInfo.Baud:=FieldByName('BaundRate').AsString;
		end;
		Active:=False;
	end;
	if (prjInfo.prjName<>'') and(Pos('未定義',prjInfo.prjName)<=0) then
		Caption:=Caption+'  ['+prjInfo.prjName+']';
	
	if not lblFirstRun.Visible then //初始化設(shè)備參數(shù)
	begin
		if adoDBSrc.Active then	adoDBSrc.Close;
		adoDBSrc.CommandText:='select * from DeviceDefine';
		adoDBSrc.Open;
		AddrCount:=adoDBSrc.RecordCount;
		PB1.Max:=AddrCount;//巡測(cè)標(biāo)記條
		PB1.Min:=0;
		PB1.Step:=1;
		PB1.Position:=0;
		if AddrCount>0 then 	//PWSU:動(dòng)態(tài)數(shù)組 使用時(shí)采用 SetLength 初始化
		begin
			SetLength(PWSU, AddrCount+1);
			SetLength(VAdd,AddrCount+1);//有效地址數(shù)組

			with adoDBSrc do
			begin
				mSynComm.U_ID:=0; Randomize;
				for I := 0 to AddrCount - 1 do
				begin
					PwsU[i].Enabled:=FieldByName('Enabled').AsBoolean;
					if PwsU[i].Enabled then
					begin
						VAdd[mSynComm.U_ID]:=i;
						inc(mSynComm.U_ID);
					end;
					PwsU[i].PWSUint:=FieldByName('UnitID').AsInteger;
					PwsU[i].PWSName:=FieldByName('DeviceName').AsString;
					PWSU[i].Addr:=FieldByName('RegisterAddr').AsInteger;
					PWSU[i].Name:=FieldByName('Name').AsString;
					PWSU[i].Max:=FieldByName('MaxValue').AsInteger;
					PWSU[i].Min:=FieldByName('MinValue').AsInteger;
					PWSU[i].Value:=0;
					adoDBSrc.Next;
				end;
				RegisterAddrCount:=mSynComm.U_ID;
				mSynComm.U_ID:=0;
			end;
			if adoDBSrc.Active then	adoDBSrc.Close;
			DrawTreeNode;
		end;//if AddrCount>0 then
	end;//if not lblFirstRun.Visible then //初始化設(shè)備參數(shù)
end;

procedure TfrmMain.Timer1Timer(Sender: TObject);
var
	i:integer;
	scmd,sErr:string;
begin
	i:=VAdd[mSynComm.U_ID]; //工作代碼
	if PWSU[i].Enabled then //MkPTCmd(U,A,L); //采用word模式讀寫操作
	begin
		mSynComm.CurrentUnit:=PwsU[i].PWSUint;
		mSynComm.CurrentAddr:=PWSU[i].Addr;
		scmd:=MkPTCmd(PwsU[i].PWSUint,PWSU[i].Addr,2);

		if mSynComm.NextAddr then //上次通訊正確返回
		begin
			if scmd<>'' then
			begin
				SB1.Panels[9].Text:=scmd;
				comm1.writecommdata(pchar(scmd),Length(scmd)); //采用word模式讀寫操作.
			end;
			inc( mSynComm.CommErrCount); //如果沒(méi)有收到采樣信息增加出錯(cuò)計(jì)數(shù)
			mSynComm.NextAddr:=False;
		end;

		if mSynComm.CommErrCount>5 then
		begin
			mSynComm.NextAddr:=True;
			mSynComm.CommErrCount:=0;
			sErr:=FormatDateTime('dddddd',now)+Format('------站號(hào):%d通訊失敗!',[PwsU[i].PWSUint]);
			meoRunEvent.Lines.Add(sErr);
			mSynComm.NextAddr:=True;//跳出陷阱
			inc(mSynComm.U_ID);
		end;
	end;
	PB1.Position:=mSynComm.U_ID;
end;


procedure TfrmMain.RunOnOff(runon: boolean);
begin
   btnStart.Enabled:=not runon;
   btnStop.Enabled:=runon;
   meuStart.Enabled:=not runon;
   meuStop.Enabled:=runon;
   if runon then
      SB1.Panels[9].Text:='系統(tǒng)正在監(jiān)控...'
   else
      SB1.Panels[9].Text:='系統(tǒng)停止監(jiān)控...';
end;

procedure TfrmMain.UpdateMenu(Fun_ID: integer);
var
  mFg:boolean;
begin
  case Fun_ID of
    -1: begin
       mFg:=False;
       btnStart.Enabled:=mFg;
       btnStop.Enabled:=mFg;
       N7.Enabled:=mFg;
       N8.Enabled:=mFg;
       N10.Enabled:=mFg;
       meuStart.Enabled:=mFg;
       meuStop.Enabled:=mFg;
       SB1.Panels[9].Text:='未登錄系統(tǒng)......';
    end;
    2,1:begin
       mFg:=True; ////////////////////////
       N7.Enabled:=mFg;
       N8.Enabled:=mFg;
       N10.Enabled:=mFg;
      SB1.Panels[9].Text:='管理員登錄...';
    end;
    0:begin
       mFg:=True; ////////////////////////
       N7.Enabled:=not mFg;
       N8.Enabled:=not mFg;
       N10.Enabled:=not mFg;
      SB1.Panels[9].Text:='操作員登錄...';
    end;
  end;


end;

procedure TfrmMain.meuSereachClick(Sender: TObject);
begin //歷史記錄查詢
  RzURLLabel1.Click;
end;

procedure TfrmMain.meuStartClick(Sender: TObject);
begin 	//加入期限限制代碼
  if not Manger then
  begin
    if MessageDlg('您確認(rèn)要開(kāi)始監(jiān)控嗎?',mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
       CanOP:=True;
  end;

  if CanOP or Manger then
  begin
    comm1.StopComm;
	  comm1.StartComm;
	  mSynComm.NextAddr:=True;
	  Timer1.Enabled:=True;
    Timer2.Enabled:=True;
	  SB1.Panels[9].Text:='';
	  PB1.Max:=RegisterAddrCount-1;
    RunOnOff(True);
  end;
end;

procedure TfrmMain.meuStopClick(Sender: TObject);
begin
  if not Manger then
  begin
    if MessageDlg('您確認(rèn)要停止監(jiān)控嗎?',mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
       CanOP:=True;
  end;

  if CanOP or Manger then
  begin
    Timer1.Enabled:=False;
    Timer2.Enabled:=False;
	  Sleep(200);
  	comm1.StopComm;
	  SB1.Panels[9].Text:='';
	  PB1.Position:=0;
    RunOnOff(False);
  end;
end;

procedure TfrmMain.N10Click(Sender: TObject);
begin
	prcmenu('用戶設(shè)置','select * from user')
end;

procedure TfrmMain.N5Click(Sender: TObject);
begin
   Close;
end;

procedure TfrmMain.N7Click(Sender: TObject);
begin
	prcmenu('工程信息','select * from projectConfig')
end;

procedure TfrmMain.N8Click(Sender: TObject);
begin
	prcmenu('設(shè)備組群','select * from DeviceDefine');
end;

procedure TfrmMain.prcmenu(meuInfo, DBSql: string);
begin
	//加入期限限制代碼
	showmessage('加入期限限制代碼');
	lblConfig.Caption:=meuInfo;
	if adoDBSrc.Active then
		adoDBSrc.Close;
	adoDBSrc.CommandText:=DBSql;
	adoDBSrc.Open;
	Panel4.Visible:=False;
	Panel1.Align:=alClient;
	Panel1.Visible:=True;//工程信息
end;


procedure TfrmMain.SetCommPort(cPort, Baud: string);
var 
	reg : TRegistry;
	ts : TStrings;
	i : integer;
	commFlg:boolean;
begin 
	reg := TRegistry.Create;
	reg.RootKey := HKEY_LOCAL_MACHINE;
	reg.OpenKey('hardware\devicemap\serialcomm',false);
	ts := TStringList.Create;
	reg.GetValueNames(ts);
	commFlg:=False;
	for i := 0 to ts.Count -1 do
	begin
		if reg.ReadString(ts.Strings[i])=cPort then commFlg:=True;
	end;
	ts.Free;
	reg.CloseKey;
	reg.free;
	Comm1.StopComm;
	if commFlg then
	begin
		Comm1.CommName:=cPort;
		Comm1.BaudRate:=strtointdef(Baud,9600);
		Comm1.StartComm;
		SB1.Panels[5].Text:=cPort;
		SB1.Panels[7].Text:=Baud;
	end	else
		Showmessage('您的串口設(shè)置有誤!'+#13+'請(qǐng)?jiān)俟こ淘O(shè)置中重新設(shè)定!');
end;

procedure TfrmMain.lblRecivedChange(Sender: TObject);
var
	rData,mU,mV:string;
	i:integer;
begin//收到通訊返回信息,解碼處理顯示
	rData:=lblRecived.Text;
	i:=length(rData);
	if i>9 then mU:=rData[2]+rData[3];
	case ord(rData[1])of
		$6:       //  數(shù)據(jù)正常
			begin
				if i<13 then //11位數(shù)據(jù)  #6XXRDDDDBC#13
					mV:=rData[5]+rData[6]+rData[7]+rData[8]
				else //15位數(shù)據(jù)  #6XXRDDDDDDDDBC#13
					mV:=rData[5]+rData[6]+rData[7]+rData[8]+rData[9]+rData[10]+rData[11]+rData[12];
				//處理收到的值
				i:=VAdd[mSynComm.U_ID];
				PwsU[i].Value:=strtointdef(mV,0);
				txtUnitNo.Caption:=inttostr(mSynComm.CurrentUnit);
				txtDevName.Caption:=PwsU[i].PWSName;
				txtDevAddrName.Caption:=PwsU[i].Name;
				RzLEDDisplay1.Caption:=mV;
				edtDecStatus.Text:='OK...';
        PWSU[i].CommErr:='';
			end;
		$15://Communication Error Code //#21XXREEBC#13      出錯(cuò)Len=9
			 begin
				 mV:=rData[5]+rData[6];
				 i:=strtointdef(mV,0);
				 case i of
					 01:mV:='數(shù)據(jù)幀錯(cuò)誤';
					 02:mV:='校驗(yàn)錯(cuò)誤';
					 03:mV:='幀校驗(yàn)錯(cuò)誤';
					 04:mV:='Invalid message size';
					 05:mV:='Invalid command';
					 06:mV:='Invalid unit number';
					 07:mV:='地址定義錯(cuò)';
					 08:mV:='地址超范圍';
					 09:mV:='Invalid data size';
					 10:mV:='Invalid range';
					 11:mV:='Invalid data';
				 end;
				 //處理通訊出錯(cuò)信息代碼
				 i:=VAdd[mSynComm.U_ID];
				 txtUnitNo.Caption:=inttostr(mSynComm.CurrentUnit);
				 txtDevName.Caption:=PwsU[i].PWSName;
				 txtDevAddrName.Caption:=PwsU[i].Name;
				 RzLEDDisplay1.Caption:='';
				 edtDecStatus.Text:=mV;
         PWSU[i].CommErr:=mV;
			 end;
		$5: //模擬通訊
			begin
        i:=VAdd[mSynComm.U_ID];
				txtUnitNo.Caption:=inttostr(mSynComm.CurrentUnit);
				txtDevName.Caption:=PwsU[i].PWSName;
				txtDevAddrName.Caption:=PwsU[i].Name;
				PwsU[i].Value:=random(5432);
				RzLEDDisplay1.Caption:=Format('%d',[PwsU[i].Value]);
				edtDecStatus.Text:='模擬運(yùn)行中...';//
        PWSU[i].CommErr:='';
			end;
	end;// end case
	DrawTreeNodeValue;//DrawTreeNode;
	mSynComm.NextAddr:=True;//信號(hào)標(biāo)志亮
	mSynComm.CommErrCount:=0;
	inc(mSynComm.U_ID);     //采樣地址增加
	if mSynComm.U_ID>=RegisterAddrCount then //巡檢計(jì)數(shù)器處理代碼
		mSynComm.U_ID:=0;   //從頭開(kāi)始
end;

procedure TfrmMain.Timer2Timer(Sender: TObject);//保存數(shù)據(jù)
var
  st1:TDateTime;
  t,tt:Extended	;
  ts:TTimeStamp;
begin // 計(jì)算從開(kāi)始到現(xiàn)在的時(shí)間(秒)
  ts:=DateTimeToTimeStamp(prjInfo.SavDataTime) ;
  t:=TimeStampToMSecs(ts);
  st1:=Now;
  ts:=DateTimeToTimeStamp(St1);
  tt:=TimeStampToMSecs(ts);
  t:=(tt-t)/60000; ;//毫秒->秒->分鐘
  if t>prjInfo.sTime then //保存數(shù)據(jù)
  begin
    prjInfo.SavDataTime:=St1;
    savDataFromTreeNode;
  end;
end;

procedure TfrmMain.savDataFromTreeNode;
var
  UID,grcount,p,v,v1,i:integer;
	snode,s,UName:string;
begin
  UID:=-1;
  grcount:=  trvAllDev.Items.Count;
  with adoDBSrc do  //adoDBSrc.
  begin
    if Active then Close;
      CommandText:='select DeviceID, DeviceName, AddrName, ReadValue, SaveTime from RecordData';
    if not Active then Open;
    for I := 0 to  grcount - 1 do //讀取現(xiàn)在的顯示值
    begin
     snode := trvAllDev.Items[I].Text;//節(jié)點(diǎn)的標(biāo)簽
      p:=pos('-',snode);
      if p>0 then //站號(hào)
      begin  //'PWS'+inttostr(PwsU[i].PWSUint)+'-'+PwsU[i].PWSName;  //站號(hào)
        Append;
        s:=Copy(snode,4,p-4);
        val(s,v,v1);
        if V1=0 then UID:= v;//站號(hào)
        UName:=Copy(snode,p+1,Length(snode)-p);//設(shè)備名
      end;
      p:=pos('[',snode);
      v:=pos(']',snode);
      if (p>0) and (v>0) then //PWSU[i].Name+'['____']'
      begin
        Append;
        FieldByName('DeviceID').AsInteger:=UID;
        FieldByName('DeviceName').AsString:=UName;
        FieldByName('SaveTime').AsDateTime:=Now;
        s:=Copy(snode,p+1,v-p-1);
        val(s,v,v1);
        if V1=0 then    // 正常 PWSU[i].Name+'['+Format('%4x',[PWSU[i].Value])+']'
        begin
          FieldByName('ReadValue').AsInteger:= v;
          s:=Copy(snode,1,Length(snode)-p-1);//地址名
          FieldByName('AddrName').AsString:=s;
        end else
        begin  //PWSU[i].Name+'['+PWSU[i].CommErr+']';   出錯(cuò)
          FieldByName('AddrName').AsString:=s;
          FieldByName('ReadValue').AsInteger:=-1;//出錯(cuò)時(shí)默認(rèn)賦值-1
        end;
        Post;
      end; 
    end;  //遍歷結(jié)束
    Close;//關(guān)閉數(shù)據(jù)庫(kù)
  end; // //adoDBSrc.
end;


end.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区av电影| 一本高清dvd不卡在线观看| 亚洲成av人**亚洲成av**| 1024国产精品| 1024成人网色www| 亚洲丝袜美腿综合| 国产精品成人免费精品自在线观看 | 国产一区二区三区久久久| 午夜激情一区二区| 亚洲国产精品久久人人爱蜜臀 | 99久久99久久精品国产片果冻| 国产高清在线精品| 国产毛片精品视频| 高清视频一区二区| av在线免费不卡| 一本一本大道香蕉久在线精品 | 处破女av一区二区| 成人爱爱电影网址| 99re这里都是精品| 99视频超级精品| 色偷偷一区二区三区| 欧美亚洲尤物久久| 正在播放一区二区| 欧美电影免费观看完整版| 欧美xxxxx牲另类人与| www激情久久| 国产精品第13页| 亚洲福利国产精品| 捆绑紧缚一区二区三区视频| 激情图片小说一区| 欧美日韩亚洲综合在线| 欧美视频三区在线播放| 欧美精品在线一区二区三区| 91精品国产高清一区二区三区| 日韩亚洲欧美在线| 久久久噜噜噜久噜久久综合| 国产精品二区一区二区aⅴ污介绍| 成人免费在线播放视频| 午夜精品视频一区| 韩国女主播一区| 97久久精品人人做人人爽50路| 欧美性色综合网| 日韩三级视频在线看| 国产日韩三级在线| 亚洲一区在线看| 精品一区二区三区免费视频| 99视频精品在线| 日韩一本二本av| 亚洲丝袜另类动漫二区| 奇米四色…亚洲| 99久久国产综合精品色伊| 欧美老女人在线| 国产偷国产偷亚洲高清人白洁| 中文字幕在线一区| 日本aⅴ精品一区二区三区| 国产成人免费在线观看不卡| 欧美主播一区二区三区美女| 精品国产免费视频| 亚洲精品久久嫩草网站秘色| 毛片不卡一区二区| 日韩精品一区二区三区中文精品| 中文欧美字幕免费| 午夜精品久久久久久久久久| 国产超碰在线一区| 6080国产精品一区二区| 国产精品久久久久久久久图文区 | 成人a区在线观看| 欧美欧美午夜aⅴ在线观看| 国产午夜精品在线观看| 亚洲最新在线观看| 国产99久久久国产精品免费看 | 久久久久久久网| 五月婷婷激情综合网| 成人激情小说网站| 精品久久久久久无| 亚洲一区二区三区国产| 成人免费毛片高清视频| 欧美成人一区二区三区| 亚洲午夜久久久久久久久电影网| 国产电影一区二区三区| 正在播放一区二区| 亚洲午夜私人影院| av在线播放一区二区三区| 久久夜色精品国产噜噜av| 日日摸夜夜添夜夜添亚洲女人| 91蝌蚪porny| 国产精品乱人伦| 国产麻豆一精品一av一免费| 日韩欧美在线不卡| 天堂蜜桃一区二区三区| 欧美日韩亚洲综合一区| 亚洲欧洲www| 国产成人av福利| 欧美精品一区二区三区很污很色的| 亚洲国产一区二区a毛片| 91丨九色porny丨蝌蚪| 中文无字幕一区二区三区| 国产福利一区二区三区视频在线| 精品国产人成亚洲区| 免费日韩伦理电影| 欧美一区二区观看视频| 午夜不卡av在线| 欧美日韩国产高清一区| 亚洲欧美一区二区三区国产精品| 不卡在线视频中文字幕| 国产精品伦一区| 成人免费视频一区| 国产欧美日韩另类一区| 国产高清久久久| 国产精品免费免费| caoporn国产一区二区| 日韩毛片精品高清免费| 91浏览器入口在线观看| 亚洲免费观看高清完整版在线观看熊| av成人免费在线观看| 蜜臀av一级做a爰片久久| 69久久99精品久久久久婷婷| 免费人成精品欧美精品| 精品日本一线二线三线不卡| 另类的小说在线视频另类成人小视频在线| 日韩精品在线一区二区| 蜜桃免费网站一区二区三区 | 丝袜美腿亚洲一区| 欧美绝品在线观看成人午夜影视| 日韩国产精品久久| 日韩视频一区二区三区| 国产精品996| 欧美三级视频在线观看| 日韩精品免费视频人成| 日韩欧美在线影院| 粉嫩蜜臀av国产精品网站| 中文字幕视频一区二区三区久| 91女神在线视频| 午夜视频在线观看一区二区三区| 欧美美女激情18p| 韩国理伦片一区二区三区在线播放 | 日本韩国精品一区二区在线观看| 亚洲午夜私人影院| 精品99999| 成人午夜电影久久影院| 一区二区三区中文字幕| 欧美另类变人与禽xxxxx| 国内一区二区在线| 中文字幕av免费专区久久| 99久久er热在这里只有精品66| 亚洲夂夂婷婷色拍ww47| 欧美tickling挠脚心丨vk| 成人app软件下载大全免费| 亚洲第四色夜色| 久久婷婷国产综合精品青草| 99热这里都是精品| 奇米888四色在线精品| 国产日韩三级在线| 欧美嫩在线观看| 国产一二三精品| 亚洲香肠在线观看| 久久久久国产成人精品亚洲午夜| 色乱码一区二区三区88| 久久66热偷产精品| 亚洲欧美日韩在线不卡| 日韩一区二区三区免费看| 成人va在线观看| 伦理电影国产精品| 亚洲婷婷综合色高清在线| 91精品国产综合久久精品麻豆 | 欧美亚洲尤物久久| 大白屁股一区二区视频| 午夜精品国产更新| 国产精品麻豆一区二区| 日韩一区二区电影| 91福利在线导航| 成人激情黄色小说| 久久超碰97人人做人人爱| 首页国产欧美日韩丝袜| 综合在线观看色| 久久综合色综合88| 在线91免费看| 一本色道综合亚洲| 懂色av一区二区三区免费看| 日产国产欧美视频一区精品| 亚洲欧美日韩系列| 久久精品男人的天堂| 9191久久久久久久久久久| 91精彩视频在线观看| 春色校园综合激情亚洲| 国产美女在线观看一区| 青青草国产成人99久久| 亚洲第一久久影院| 亚洲人成精品久久久久| 欧美经典三级视频一区二区三区| 欧美一区二区成人6969| 欧美亚洲国产一区在线观看网站| aaa欧美色吧激情视频| 国产成人亚洲精品狼色在线| 麻豆国产欧美日韩综合精品二区 | 开心九九激情九九欧美日韩精美视频电影 | 69堂国产成人免费视频| 欧美系列一区二区| 欧美日韩在线亚洲一区蜜芽| 色婷婷综合久久久久中文一区二区|