PG4UW的远程控制用户手册.docx

上传人:b****5 文档编号:30211572 上传时间:2023-08-07 格式:DOCX 页数:86 大小:96.29KB
下载 相关 举报
PG4UW的远程控制用户手册.docx_第1页
第1页 / 共86页
PG4UW的远程控制用户手册.docx_第2页
第2页 / 共86页
PG4UW的远程控制用户手册.docx_第3页
第3页 / 共86页
PG4UW的远程控制用户手册.docx_第4页
第4页 / 共86页
PG4UW的远程控制用户手册.docx_第5页
第5页 / 共86页
点击查看更多>>
下载资源
资源描述

PG4UW的远程控制用户手册.docx

《PG4UW的远程控制用户手册.docx》由会员分享,可在线阅读,更多相关《PG4UW的远程控制用户手册.docx(86页珍藏版)》请在冰豆网上搜索。

PG4UW的远程控制用户手册.docx

PG4UW的远程控制用户手册

PG4UW的远程控制用户手册

版本:

1.29

日期:

2013年3月5日

前言

为什么不用pg4uw软件程序直接控制,而是使用其他软件控制的原因很多。

因此,我们提供了一个pg4uw软件远程控制能力。

pg4uw软件可以被其他远程控制功能应用程序控制,用BAT文件命令或使用DLL文件。

本手册介绍了远控制的基本特征,pg4uw控制程序如何实现远程控制功能也在pg4uwremotelb.dll库文件里说明。

 

1.远程控制的基本事实

pg4uw控制程序的远程控制允许其他应用控制pg4uw应用的一些功能。

这是一个非常适合程序员整合大规模生产系统或其他有帮助的应用。

远程控制的主要特点是:

1)远程控制理念:

远程应用程序作为pg4uw服务器控件,pg4uw充当客户端

2)pg4uw和远程服务器之间的通信是通过在remotelb.dll设置命令实现的。

3)通信是异步的,它使用事件处理pg4uw收到的消息

4)pg4uw和服务器应用程序开始的顺序并不重要,但更好的办法是远程服务器作为第一,pg4uw作为第二。

5)pg4uw和远程控制程序之间是通过TCP协议通信的--这允许pg4uw可以安装在一台计算机上,远程控制的应用安装在另一台计算机上,这些计算机将通过网络连接在一起。

6)远程控制库remotelb.dll是写在BorlandDelphiPascal。

可应用在BorlandDelphiPascal,C/C++语言环境或其他编程语言,例如微软VisualBasic6。

默认的TCP通讯设置,远程控制:

端口:

telnet地址:

127.0.0.1或本地

地址设置只适用pg4uw(客户端),端口设置既适用于pg4uw(客户端)也适用于服务器应用程序。

默认设置允许远程控制在(本地地址)计算机上。

pg4uw(客户端)与远程控制服务器必须安装在同一台计算机上。

注意:

如果系统安装有防火墙,远程控制服务器或客户端启动时防火墙会显示警告消息。

当防火墙提问允许或拒绝远程服务器或客户端的网络访问警示时,请选择“允许”选项,否则远程控制将不工作。

当然你可以在防火墙中选择更严格的权限来允许远程服务器/客户端访问指定的地址和端口。

 

2.在remotelb.dll发表的功能

下面描述每一个功能现在的功能,对于个别功能描述的更多信息和参数请查看RemoteCtrl.pas文件。

如果远程服务器应用程序是用C语言写的,需要编写适当的.h文件头使得

remotelb.dll在C/C++工程中可用。

这个Pascal文件RemoteCtrl.pas阐述了更多的函数和参数,可以写在C/C++

头文件中。

2.1客户机/服务器远程控制建立连接和连接参数设置。

见以下函数和程序的用法,看PG4Uwrem应用的例子,尤其是Pascal文件RemoteCtrl.pas。

程序:

CreateClientAndMakeConnectionToServer(vProcessProc:

TProcWithPChar;

vWriteToLogProc:

TProcWithPChar;

vPort,vAddr:

PChar);stdcall;

程序创建客户端通信对象定义的参数,并尝试连接到服务器。

本程序是用在pg4uw(客户)的应用。

服务器应用程序不应该使用这个程序。

CreateServerAndMakeListenToClients(vProcessProc:

TProcWithPChar;

vWriteToLogProc:

TProcWithPChar;

onClientConnectProc:

TProc;

onClientDisconnectProc:

TProc;

vPort:

PChar);stdcall;

程序创建服务器的通信对象,定义参数和开始等待客户端。

本程序应用在服务器应用程序--远程控制程序。

输入参数:

vprocessproc:

tprocwithpchar-定义指向每一次服务器接收从(pg4uw)客户

端消息的回调函数指针。

这通常是接收信息的方式或来自远程pg4uw客户端的命令。

如果vProcessProc定义为0,表示没有客户端命令接收,这儿只有一个方法怎么使用GetCommandStringFromFIFO函数准确的接收来自客户端的消息和命令。

详细信息请查看GetCommandStringFromFIFO函数的功能。

vWriteToLogProc:

TprocWithPChar-定义一个指向任意的回调函数,主要用在服务器之间调试,当任意一个客户端与服务器之间的通信事件发生时函数将被调用。

通信事件是:

客户端与服务器之间的断开或连接;发送消息给客户端;从客户端接收消息,程序包含用户自定义写备忘录或服务器端的log窗口。

如果它定义为0,没有write-to-log事件可以使用。

onClientConnectProc:

Tproc-客户端连接服务器任意一个回调过程事件,如果定义为0,没有on-clientconnect事件可以使用。

onClientDisconnectProc:

TProc-客户端断开服务器任意一个回调过程事件,如果定义为0,没有on-clientdisconnect事件可以使用。

vPort:

PChar-定义TCP通信端口(默认为telnet)。

服务器本身没有定义地址。

内部服务器已定义的地址为0.0.0.0,这意味着,服务器接受来自客户的所有接口。

 

代码示例(回调方法):

procedureintServerProcessProc(CMDline:

ansistring);

//procedurehandlesonelineofmessagefromclient

var

tmpstr:

string;

index,q:

integer;

begin

CMDline:

=trim(CMDline);

//nowtrytoobtainclientindexfromCMDline(notusedinsingleprogrammingmode)

ifpos(TCP_KEYWORD_CINDEX,LowerCase(CMDline))=1then

begin

tmpstr:

=trim(copy(CMDline,length(TCP_KEYWORD_CINDEX)+1,length(CMDline)));

tmpstr:

=trim(copy(tmpstr,1,pos('|',tmpstr)-1));

ifnotStr2int(tmpstr,index)thenexit;

q:

=pos('|',CMDline);

ifq>0thenCMDline:

=trim(copy(CMDline,q+1,length(CMDline)))

elseCMDline:

='';

end;{ifpos(TCP_KEYWORD_CINDEX,LowerCase(CMDline))=1...}

{CMDprogramisbusy}

ifCompareText(CMDline,TCP_CMD_PROG_IS_BUSY)=0then

Process_CMD_PROG_IS_BUSY

{.....etc.(processingofothercommands)}

end;

procedureServerProcessProc(CMDline:

PChar);stdcall;

{Thisprocedureisusedlikecallbackprocedure.

ithandlesoneormorelinesofmessagesfromclientbysequential

callsofintServerProcessProc.Eachlineofstringrepresentsonemessage.

Morelinesinstringmeanmorecommands.}

const

CRLF=#13#10;

var

tmpline,tmpstr:

ansistring;

q:

integer;

begin

tmpline:

=CMDline;

//morecommandscanbecumulatedintoonepacket,eachcommandisatonelinerepeat

q:

=Pos(CRLF,tmpline);

ifq>0then

begin

tmpstr:

=copy(tmpline,1,q-1);

delete(tmpline,1,q+length(CRLF)-1);

end

else

tmpstr:

=tmpline;

iftmpstr<>''thenintServerProcessProc(tmpstr);

untilq=0;

end;{procedure}

CreateServerAndMakeListenToClients(ServerProcessProc,//CallbackProcPtr

nil,//WriteToLogwindowProc

nil,//onClientConnectProc

nil,//onClientdisconnectProc

PChar(remote_ctrl_settings.Client_Server_Port));

代码示例(非回调方法):

procedureintServerProcessProc(CMDline:

ansistring);

//procedurehandlesonelineofmessagefromclient

var

tmpstr:

string;

index,q:

integer;

begin

CMDline:

=trim(CMDline);

//nowtrytoobtainclientindexfromCMDline(notusedinsingleprogrammingmode)

ifpos(TCP_KEYWORD_CINDEX,LowerCase(CMDline))=1then

begin

tmpstr:

=trim(copy(CMDline,length(TCP_KEYWORD_CINDEX)+1,length(CMDline)));

tmpstr:

=trim(copy(tmpstr,1,pos('|',tmpstr)-1));

ifnotStr2int(tmpstr,index)thenexit;

q:

=pos('|',CMDline);

ifq>0thenCMDline:

=trim(copy(CMDline,q+1,length(CMDline)))

elseCMDline:

='';

end;{ifpos(TCP_KEYWORD_CINDEX,LowerCase(CMDline))=1...}

{CMDprogramisbusy}

ifCompareText(CMDline,TCP_CMD_PROG_IS_BUSY)=0then

Process_CMD_PROG_IS_BUSY

{.....etc.(processingofothercommands)}

end;

 

procedureProcessProcByFIFO;

{ThisprocedureisusedforreceivinginfoandcommandsfromCLientPg4uwapp.

Theprocedurecanbeusedwhennocallbackprocedureisdefinedincalling

ofprocedureCreateServerAndMakeListenToClients.Callbackprocisnotdefined

bysettingitsvaluetonil.}

const

MAX_ITERATIONS=3;

proc_iterations:

integer=0;

var

received_cmd:

PChar;

begin

ifproc_iterations>MAX_ITERATIONSthenexit;

inc(proc_iterations);

try

//getcommandfromFIFO

received_cmd:

=GetCommandStringFromFIFO;

whilereceived_cmd<>nildobegin

//iftherewascommandreceivedfromFIFO,calltheprocessproctoprocessthecommand

intServerProcessProc(received_cmd);

//trytogetnextcommandfromFIFO

received_cmd:

=GetCommandStringFromFIFO;

end;{while}

finally

ifproc_iterations>0thendec(proc_iterations);

end;{try}

end;{procedure}

CreateServerAndMakeListenToClients(nil,//CallbackProcPtr

nil,//WriteToLogwindowProc

nil,//onClientConnectProc

nil,//onClientdisconnectProc

PChar(remote_ctrl_settings.Client_Server_Port));

程序MakeClientConnectionToServer(FailedrrDisplay:

boolean);stdcall;

程序试图连接客户端到服务器。

这个函数用在PG4UW应用内部,服务器应用不能应用这个函数。

程序MakeClientDisconnectionFromServer;stdcall;

程序试图断开客户端到服务器。

这个函数用在PG4UW应用内部,服务器应用不能应用这个函数。

程序MakeClientServertCloseConnectionAndFree;stdcall;

程序是用于客户端和服务器应用程序关闭连接和空闲的TCP客户机/服务器通信对象。

当这个例程关闭时客户端和服务器应用程序自动调用。

程序SendOperationResultToServer(op_result:

TOpResultForRemote);stdcall;

程序是用在向服务器发送消息的客户端应用程序。

服务器应用程序不应该使用这个程序。

程序SendLineToServer(line:

PChar);stdcall;

程序是用在向服务器发送消息的客户端应用程序。

服务器应用程序不应该使用这个程序。

函数ClientServerObjectExists:

boolean;stdcall;

函数返回真,客户端/服务器对象已经存在,如果返回为假,函数没有测试连接状态。

函数ClientConnectionIsClosed:

boolean;stdcall;

函数返回为真,客户端连接状态为关闭,反之返回为假。

函数用在PG4UW客户端,服务器不应该使用这个函数。

函数ServerHasConnectedClient:

boolean;stdcall;

函数用在服务器应用程序,函数返回为真,客户端已经连接服务器。

否则返回为假。

程序EnableWriteEventsToLog(value:

boolean);stdcall;

程序用在客户端和服务器的应用程序,该程序的目的是阻止调用程序vwritetologproc定义为参数CreateClientAndMakeConnectionToServerandCreateServerAndMakeListenToClients.

函数GetCurrentPort:

PChar;stdcall;

程序用在客户端和服务器的应用程序,函数返回值为目前端口,例如2020,telnet等。

函数GetCurrentAddr:

PChar;stdcall;

函数用在客户端,函数返回为目前地址,例如localhost,127.0.0.1,192.168.0.10

对服务器,函数总是返回0.0.0.0。

程序GetCurrentAddr:

PChar;stdcall;

程序用在快速建立一个工作的消息泵。

它循环处理消息直到所有的消息处理完毕,这个程序与TApplication.ProcessMessage()非常相似。

这个程序非常适合你的应用程序没有Tapplication对象。

2.2从远程服务器到PG4UW客户端发送基本命令的程序

程序SEND_CMD_BringToFront;stdcall;

程序用于发送消息'bringtofront'到客户端,当客户端接收到消息,它将做BringToFront操作,BringToFront操作主要激活客户端应用窗口。

例如:

Serverrequest:

SEND_CMD_BringToFront;

Answerfromclient:

clientsendnoanswer

程序SEND_CMD_ShowMainForm;stdcall;

程序用于发送消息'showmainform'到客户端,当客户端接收到消息,它使客户端应用程序的主窗口显示命令。

如果没有消息客户端的主窗口是可见的。

请在客户端应用程序没有运行情况下使用该命令。

例如:

Serverrequest:

SEND_CMD_ShowMainForm;

Answerfromclient:

clientsendnoanswer

程序SEND_CMD_HideMainForm;stdcall;

程序用于发送消息'HideMainFor'到客户端,当客户端接收到消息,它使客户端应用程序的主窗口的命令隐藏。

同时客户端的图标放在任务栏将隐藏和小图标出现在托盘面板,如果没有消息客户端应用程序的主窗口是隐藏的。

请只在客户端应用程序没有操作的情况下使用该命令。

例如:

Serverrequest:

SEND_CMD_HideMainForm;

Answerfromclient:

-clientsendnoanswer

程序SEND_CMD_CloseApp;stdcall;

程序用于发送消息'CloseApp'到客户端,当客户端接收到消息,它使客户端应用程序的主窗口的命令关闭。

没有客户端应用程序运行时,该关闭命令可以正确执行。

请在设备没有操作运行和没有模态对话框显示的情况下使用send_cmd_closeapp.为了确保目前设备没有操作运行,可以使用SEND_CMD_GetProgStatus命令。

也可以使用SEND_CMD_Stop命令让操作停止。

更多详情请见所附远程控制在Pascal和C++语言的例子。

例在本手册第三章描述。

例1:

Serverrequest:

SEND_CMD_CloseApp;

Answerfromclient:

-clientsendnoanswer

例2:

procedureTformsimpledemo.btnDisconnectProgClick(Sender:

TObject);

begin

ifnotServerHasConnectedClientthen

btnConnectProg.enabled:

=true

else

//checkifPg4uwappisnotbusy

ifdevice_progress.busythen

begin

{if}application.MessageBox(Pchar('Programmerisstillbusy.'#13#10#13#10+

'PleasewaittocompletecurrentoperationonrunningprogrammeroruseStopcommand'#13#10+

'tostopcurrentoperation'),

PChar(caption),

mb_ok+MB_ICONWARNING);exit;

end{ifdevice_progress[index].busy...}

elsebegin

//thefirststepistosendcommandsStopoperations-twotimes

SEND_CMD_Stop;

Application.ProcessMessages;

Sleep(250);{wait}

SEND_CMD_Stop;

Application.ProcessMessages;

Sleep(250);{wait}

//thenextstepistosendcommandsCloseaplication

SEND_CMD_CloseApp;

Application.ProcessMessages;

Sleep(250);{wait}

btnConnectProg.enabled:

=true;

end;{ifdevice_progress.busy...}

//ifSenderis"Close"button,let'scloseremotecontrolapplication

disconnect_was_Successful:

=true;

end;{procedure}

程序SEND_CMD_BlankCheckDevice;stdcall;

程序用于发送消息'BlankCheck'到客户端,当客户端接收到消息,它将开始对设备进行空白检查。

在操作最后,客户端向服务器发送操作结果,客户端操作结果命令到达能够被服务器应用程序中定义的指针参数vProcessProcinprocedureCreateServerAndMakeListenToClients处理。

当目前客户端PG4UW没有操作时,客户端PG4UW才能接收BlankCheck命令。

如果PG4UW正在运行一些操作,这Blankcheck命令将被忽略。

程序员为了接收目前的状态,用命令SEND_CMD_GetProgStatus。

当最后的设备操作与目前选择的设备操作不一样时,我们不得不发送stop命令去关闭在PG4UW重复等待的对话框。

例1:

Serverrequest:

SEND_CMD_BlankCheckDevice;

Answerfromclient:

-client

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1