参考基于sockett和plc的远程控制系统.docx

上传人:b****6 文档编号:4126447 上传时间:2022-11-28 格式:DOCX 页数:41 大小:218KB
下载 相关 举报
参考基于sockett和plc的远程控制系统.docx_第1页
第1页 / 共41页
参考基于sockett和plc的远程控制系统.docx_第2页
第2页 / 共41页
参考基于sockett和plc的远程控制系统.docx_第3页
第3页 / 共41页
参考基于sockett和plc的远程控制系统.docx_第4页
第4页 / 共41页
参考基于sockett和plc的远程控制系统.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

参考基于sockett和plc的远程控制系统.docx

《参考基于sockett和plc的远程控制系统.docx》由会员分享,可在线阅读,更多相关《参考基于sockett和plc的远程控制系统.docx(41页珍藏版)》请在冰豆网上搜索。

参考基于sockett和plc的远程控制系统.docx

参考基于sockett和plc的远程控制系统

1  引言

随着Internet的普及和远程控制策略的完善,基于Internet的远程控制成为可能。

基于公众网络(Internet)的远程控制通过廉价的TCP/IP和Ethernet连接克服了工业网络的弊端,大大降低了网络的建设与维护成本,提高了已有设备的利用效率和联合生产能力,并广泛地延伸人类的工作空间。

目前国际上已经成功地应用于远程机器人控制,满足在空间、海洋和医学显微环境中的特殊需求[3]。

Ferrel于1965就提出了在网络控制中时变的网络时延问题。

华盛顿大学的T.J.Tarn教授与K.Brady是基于Internet机器人远程控制第一人。

Wakita等人提出“智能化监视”远程机器人控制系统,指出低带宽、需求的重要性。

Bejczy等人提出远程控制中“虚拟机器人”的概念。

Kuk-HyunHan等人进行机器人系统在KAIST与UCDavis之间的Internet远程控制实验,使用由Java语言编制的GUI监视机器人的状态。

RenC.Luo等人实现了简单迷宫中多障碍存在条件下机器人自动路径寻优,该实现是远程控制与智能控制两种先进控制手段的典型结合。

Rovetta等人使用优化的通讯媒介混合进行远程外科手术。

德国空间研究项目——ROTEX系统是公认的网络远程控制成功范例。

它采用多个超前Kalman滤波器作预测,1993年装备于哥伦比亚航天飞机上。

目前在国内还没有对基于Internet的网络远程控制的系统性研究[4]。

原来的基于公用电话网的远程控制系统[6],虽然实现了双向传输,但是传送/接受速率太低。

基于无线寻呼网络为基础的远程控制系统虽然传输速率较高,但只能单项传输,不能进行反馈。

公用电话网和无线寻呼网,还由于网络覆盖情况等限制,不能应用到家庭。

本文设计的基于socket和plc的远程控制系统,克服了以上两个网络的缺陷。

本文在Winsock的基础上采用TCP/IP传输控制协议来完成数据的远程通信。

由于TCP/IP协议组是为跨越局域网和广域网环境的大规模互联网设计的,因此,利用因特网为传输媒介,满足了远程控制系统应用到家庭上时,对网络覆盖范围的需求。

另外,由于控制信息在因特网上传输时具有较快的速率,因此可以实现实时监控和实时控制。

本系统在因特网上还可以实现信息反馈,使系统更加稳定、健全,实现一个完整的远程控制系统。

用PLC作为本系统的可编程控制器,是因为PLC可以通过通信联网与服务器相连,实现分散控制,集中管理。

PLC内有成百上千个可供使用的编程元件,有很强的功能,可以实现非常复杂的控制功能,具有很高的性能价格比[2]。

本设计的结构图,如下图所示:

 

图1-1  控制系统结构图

 

2  远程控制系统硬件部分及通信相关协议

2.1 PLC简介

PLC主要由CPU模块、输入模块、输出模块和编程器组成。

a. 中央处理单元(CPU)

中央处理单元(CPU)是PLC的控制中枢。

它按照PLC系统程序赋予的功能接收并存储从编程器键入的用户程序和数据;检查电源、存储器、I/O以及警戒定时器的状态,并能诊断用户程序中的语法错误。

当PLC投入运行时,首先它以扫描的方式接收现场各输入装置的状态和数据,并分别存入I/O映象区,然后从用户程序存储器中逐条读取用户程序,经过命令解释后按指令的规定执行逻辑或算数运算的结果送入I/O映象区或数据寄存器内。

等所有的用户程序执行完毕之后,最后将I/O映象区的各输出状态或输出寄存器内的数据传送到相应的输出装置,如此循环运行,直到停止运行。

为了进一步提高PLC的可靠性,近年来对大型PLC还采用双CPU构成冗余系统,或采用三CPU的表决式系统。

这样,即使某个CPU出现故障,整个系统仍能正常运行。

b.输入(Input)模块和输出模块(Output)

输入(Input)模块和输出模块(Output)简称为I/O模块,是联系外部现场设备和CPU模块的桥梁。

输入模块用来接收和采集输入信号,开关量输入模块用来从按钮、选择开关、数字拨码开关、限位开关、接近开关、压力继电器等来的开关量输入信号。

模拟量输入模块用来接收电位器,测速发动机和各种变送器提供的连续变化的模拟量电流电压信号。

开关量输出模块用来控制接触器、电磁阀、指示灯数字显示装置和报警装置等输出设备,模拟量输出模块用来控制调节阀,变频器等执行装置[5]。

c.编程器

编程器用来生成用户程序,用它来进行编辑、检查、修改和监视用户程序的执行情况。

使用编程软件可以在计算机的屏幕上直接生成和编辑梯形图和指令表程序,并可以实现不同编程语言之间的互换。

程序被编译后下载到PLC,也可以将PLC中的程序上传到计算机。

2.2RS-232C协议

RS-232-C是美国电子工业协会EIA(ElectronicIndustryAssociation)制定的一种串行接口标准。

RS是“推荐标准”的缩写,232为标识号,C表示修改次数。

RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道。

在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。

RS-232-C标准规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、4800、9600、19200波特。

RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。

传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。

一般个人计算机上会有两组RS-232接口,分别称为COM1和COM2。

2.3TCP/IP协议

TCP/IP(传输控制协议/网际协议)是互联网中的基本通信语言或协议。

在私网中,它也被用作通信协议。

当用户直接网络连接时,用户的计算机应提供一个TCP/程序的副本,此时接收所发送的信息的计算机也应有一个TCP/IP程序的副本。

TCP/IP是一个两层的程序。

高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。

这些包通过网络传送到接收端的TCP层,接收端的TCP层把包还原为原始文件。

低层是网际协议,它处理每个包的地址部分,使这些包正确地到达目的地。

网络上的网关计算机根据信息的地址来进行路由选择。

即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。

TCP/IP使用客户端/服务器模式进行通信。

TCP/IP通信是点对点的,意思是通信是网络中的一台主机与另一台主机之间的。

TCP/IP与上层应用程序之间可以说是“没有国籍的”,因为每个客户请求都被看做是与上一个请求无关的。

正是它们之间的“无国籍的”释放了网络路径,才是每个人都可以连续不断的使用网络。

许多用户熟悉使用TCP/IP协议的高层应用协议。

包括的超文本传输协议(HTTP),文件传输协议(FTP),远程网络访问协议()和简单邮件传输协议(SMTP)。

这些协议通常和TCP/IP协议打包在一起。

使用模拟电话调制解调器连接网络的个人电脑通常是使用串行线路接口协议(SLIP)和点对点协议()。

这些协议压缩IP包后通过拨号电话线发送到对方的调制解调器中。

与TCP/IP协议相关的协议还包括用户数据报协议(),它代替TCP/IP协议来达到特殊的目的。

其他协议是网络主机用来交换路由信息的,包括控制信息协议(),内部网关协议(),外部网关协议(EGP),边界网关协议()。

2.4客户端/服务器端(C/S)通信

Client(客户端)Server(服务器端)PLC

 

图2-1  控制信息流程图

如图2-1客户端和服务器端之间通过Internet进行通信,采用了业界标准的协议组(TCP/IP)。

因为(TCP/IP)协议组是为跨越局域网和广域网环境的大规模互联网络设计的,因此,在互联网中进行远程控制,需采用(TCP/IP)协议组[7]。

所有的网络在传输协议上都是分层的,层的集合通常称为栈。

应用程序跟最高层通话,最底层则跟网络通话。

图2-2显示了客户端和服务器端TCP/IP协议栈的结构[9],每一层在逻辑上与另一端相对应的层进行连接和通信;物理数据是从协议栈的上部传送到底部,通过网络传输到另一端协议栈的底部,然后再从栈的低端往上传送到对应的层。

图中右边是服务程序,左边是客户程序,可以把基于HTTP协议的WWW服务器程序认为是服务程序,把自己计算机上的浏览器程序认为是客户程序。

 

图2-2  TCP/IP协议栈的结构

2.5服务器和PLC之间通信

PLC与服务器的comm端口进行通信,采用了RS-232C串行通信方式,PLC需安装FX2N—232—BD通信用功能扩展板,硬件接线如图2-3所示。

RXD,TXD和SG分别是接收端、发送端和信号公共线。

 

232-BD计算机(comm)

 

计算机和PLC之间的数据流有三种形式:

计算机从PLC中读数据;计算机向PLC写数据和PLC向计算机写数据。

a.计算机读PLC的数据

计算机从PLC中读取数据的过程分为三步:

(1)计算机向PLC发送读数据命令。

(2)PLC接收到命令以后,执行相应的操作,将计算机要读取的数据发送给它。

(3)计算机在接收到相应的数据后,向PLC发送确认响应,表示数据已经收到。

b.计算机向PLC写数据

计算机向PLC写数据的过程分为两步:

(1)计算机首先向PLC发送写数据命令。

(2)PLC接收到写数据命令以后,执行相应的操作,执行完成后向计算机发送确认信号,表示写数据操作已完成。

c.PLC发送请求式(on-demand)数据给计算机

PLC直接向上位机发送数据,计算机收到后进行相应的处理,不会向PLC发送确认信息[8]。

 

3  远程控制系统软件部分

3.1 服务器端与客户端通信编程

3.1.1 采用VC++下的MFC框架编程

MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。

所以我们要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。

MicrosoftVisualC++提供了相应的工具来完成这个工作:

AppWizard可以用来生成初步的框架文件;资源编辑器用于帮助直观地设计用户接口;ClassWizard用来帮助添加代码到框架文件;最后进行编译[1]。

MFC提供了两个用于WinSock编程的类:

CAsyncSocket和CSocket,它们避免了程序被挂起的可能,使得应用程序更高效。

例如:

通过套接字发送一个字符串到另一台主机,我们可以调用socket的Send()函数,此函数尝试发送数据,但如果套接字没有准备好并在等待则Send()就返回;当套接字准备好时,一个消息发往套接字窗口,并由该窗口捕获消息并发送数据,这样就实现了异步Winsocket通信。

此外,MFC还把复杂的WinsockAPI封装到类里,这使得编写应用程序更加容易。

3.1.2 客户端开发整体流程

Sockets的大部分工作是基于连接的:

两个应用程序在每一端使用一个套接字形成一个连接,此后应用程序沿着此连接发送及接收数据。

WinSock支持两种类型的套接字:

流式套接字(SOCK_STREAM)和数据包套接字(SOCK_DGRAM)。

流式套接字提供了一个面向连接的,可靠的,数据无错的,无重复发送的及按发送顺序接收数据的服务。

流式套接字使用传输控制协议(TCP)。

当用户想发送大批量数据时或想让发送的数据按顺序无重复的到达目的地时,使用流式套接字是最方便的。

客户端程序的编写过程如下:

(1)创建一个基于对话框的项目Client。

(2)去掉Ok和Cancel两个按钮,增加IDC_BUTTON_CONNECT(连接)、IDC_BUTTON_EXIT(关闭)、IDC_BUTTON_SEND(空调开)等按钮,增加Edit控件IDC_EDIT_IPADDR(用来输入IP地址)和IDC_EDIT_PORT(用来输入端口号)。

(3)CAsyncSocket类用DoCallBack()函数处理MFC消息,当一个网络事件发生时,DoCallBack()函数按网络事件类型:

FD_READ、FD_WRITE、FD_ACCEPT、FD_CONNECT分别调用OnReceive()、OnSend()、OnAccept()、OnConnect()函数。

由于MFC把这些事件处理函数定义为虚函数,所以要生成一个新的C++类以重载这些函数,具体做法如下:

以Public方式继承CAsyncSocket类,生成新类MySocket;为MySocket添加虚函数OnReceive()、OnConnect()、OnSend()。

3.1.3 创建CAsyncSocket对象,生成套接字

在使用一个套接字以前必须创建它,这个工作分为两步:

首先构造一个CAsyncSocket对象,接着调用CAsycSocket类的成员函数Creat()来创建底层的套接字。

CAsyncSocket:

Creat()函数的声明如下:

BOOLCreat(

UINTnSocketPort=0,

IntnSocketType=SOCKET_STREAM,

longlEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE

LPCTSTRlpszSocketAddress=NULL

);

其中,第一个参数nSocketPort指定一个分配给套接字的端口号,默认值为0。

在很多情况下,特别是在服务器应用程序中,用户要明确地分配一个公认的的端口号给套接字,这个端口一旦确定就不应该随意改动,因为客户端应用程序可以使用这个端口和服务器应用程序相连接。

本程序中创建套接字的过程如下:

首先创建CAsyncSocket对象m_clientSocket;

再由m_clientSocket调用CAsyncSocket的成员函数Creat();

m_clientSocket.Creat(0,SOCK_STREAM,FD_CONNECT);

3.1.4 套接字与服务器连接

使用流式套接字就存在一个在客户端和服务器端建立连接的过程,只有在客户端和服务器端之间建立了连接,套接字才能进行数据传输工作。

客户端应用程序的流式套接字可以使用Connect()成员函数来和服务器端进行连接。

Connect()成员函数,实际上是向服务器发出一个连接请求,这个连接请求如果被服务器接受,则两端的链接顺利实现;如果连接请求得不到响应,那么连接无法建立。

对于异步事件,CAsyncSocket对象使用通知回调(notificationcallback)。

在这种情况下,如果Connect()成员函数不能得到立即响应,它将返回FALSE。

无论Connect()成员函数调用成功与否,在结束调用之后,OnConnect()事件处理函数都将被调用。

本程序中套接字与服务器连接的过程如下:

m_clientSocket.Connect(m_szServerAdr,m_szPort);

其中m_szServerAdr表示主机名,m_szPort指定连接的端口号。

3.1.5 服务器接受客户端的连接

对于服务器端应用程序,为了能够获得客户端的请求,必须创建一个专门的服务器套接字来监听是否有连接请求。

在服务器端,用户创建了套接字对象后,可以调用Listen()成员函数来监听连接请求[14]。

本程序中服务器接受客户端连接的过程如下:

m_srvrSocket.Listen

(2);

其中参数2指定了WinSock在请求被接受以前或WinSock开始试图向请求连接的客户机返回WSAENCONNECTREFUSED之前,等待队列中最大的连接请求数为2。

为了接受客户端的请求,服务器端应用程序可以调用Accept()成员函数[11]。

Accept(*pSocket)

对象pSocket是一个CAsyncSocket对象,它是用来和客户端套接字建立连接的服务器套接字,在使用这个对象之前,用户不需要调用Creat()成员函数来构建底层的套接字,在Accept()成员函数的调用过程中,函数本身会处理。

Accept()成员函数一般在OnAccept()事件处理函数中被调用。

3.1.6 发送并接收流式数据

一旦在服务器和客户端之间建立了连接,数据就可以通过套接字被传递了。

从流式套接字发送数据,使用CAsyncSocket类的Send()成员函数;接受数据则使用Receive()成员函数[12]。

本程序中发送流式数据过程如下:

Send(m_szBuffer,m_nLength,0);

其中m_szBuffer是一个缓冲区的指针,参数nBufLen制定了该缓冲区的长度。

在Send()成员函数,该缓冲区存放了要发送的数据。

本程序中接收流式数据过程如下:

Receive(m_szBuffer,4096*sizeof(char),0)

其中m_szBuffer是一个缓冲区的指针,参数4096*sizeof(char)制定了该缓冲的长度。

在Reiceive()函数,缓冲区用来存储将要接收的数据。

3.1.7 关闭套接字

结束了数据传输工作之后,在关闭应用程序之前,应该调用CAsyncSocket类的成员函数Close()来释放与套接字有关的系统资源。

Close()成员函数也可以在CAsynSocket对象被删除时由该类的析构函数来调用[13]。

本程序中客户端关闭套接字过程如下:

m_clientSocket.Close();

客户端运行后如下图所示:

图3-1  远程控制客户端界面

服务器端运行后如下图所示:

图3-2  远程控制服务器端界面

3.2 服务器端与PLC通信编程

MSComm(MicrosoftCommunicationsControl)控件是Microsoft公司提供方的用于简化Windows环境下串行编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

MSComm控件的常用属性:

SetCommPort:

设置并返回通信端口号。

SetSettings:

设置并返回波特率、奇偶校验、数据位、停止位参数。

其中字符n、o、e分别代表无校验,奇校验和偶校验。

SetPortOpen:

设置并返回通信端口的状态。

设置为True时,打开端口;设置为False时,关闭端口。

SetInputModel:

设置从从缓冲区读取数据的格式,设为0时为字符串格式(Text);设为1时为二进制格式(Binary)

SetRThreshold:

在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm事件之前,接收缓冲区接收的最小字节数。

若设为0,不会产生OnComm事件。

一般设为1,接收缓冲区收到每一个字符都会使MSComm控件产生OnComm事件。

SetInputLen:

设置和返回Input每次读出的字节数,设为0时读出接收缓冲区中的全部内容[10]。

在本程序中串口编程如下:

if(m_ctrlComm.GetPortOpen())

m_ctrlComm.SetPortOpen(FALSE);

m_ctrlComm.SetCommPort

(1);//选择com1

if(!

m_ctrlComm.GetPortOpen())

m_ctrlComm.SetPortOpen(TRUE);//打开串口

else

AfxMessageBox("cannotopenserialport");

m_ctrlComm.SetSettings("9600,n,8,1");//波特率9600,无校验,8个数据位,1个停止位

m_ctrlComm.SetInputModel

(1);//1:

表示以二进制方式检取数据

m_ctrlComm.SetRThreshold

(1); 

//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件

m_ctrlComm.SetInputLen(0);//设置当前接收区数据长度为0

m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据

4  实验

4.1 实验目的

验证控制信息能否正确无误地从客户端传到服务器端,再由服务器端传到PLC。

4.2 实验整体流程

运行远程控制程序,首先打开服务器端,设置监听端口,以便监听来自客户端的链接请求。

在客户端,输入服务器IP地址和端口号,来和服务器端进行通信。

服务器端和客户端成功建立通信连接后,客户端发出一个控制信息,验证服务器端是否能正确接收,服务器端再通过串口来和PLC进行通信,验证PLC端能否正确就收服务器传过来的信息。

4.2.1 服务器端通信设置

图4-1  服务器端设置

  如上图所示,在监听端口文本框里输入端口号:

8888,然后单击按钮“监听”按钮,来监听客户端的连接请求,与客户端建立连接做准备。

选中数据采集框,以便把建立连接后从客户端传来的控制信息,传送给PLC。

4.2.2 客户端通信设置

图4-2  客户端设置

如上图所示,首先在IP地址文本栏里输入服务器端IP地址,在端口号文本栏里输入服务器正在监听的端口号。

然后再单击连接按钮。

此时服务器端将和客户端建立连接,如果连接成功则会出现下图所示的连接成功提示框。

图4-3  连接成功提示框

4.2.3 串口调试软件的应用

本程序中用串口调试软件来模拟PLC接收到的控制信息,当服务器端发出控制信息时,就把控制信息传给串口调试软件。

如下图4-4所示。

图4-4  串口调试助手

4.2.4 验证信息传输

当客户端和服务器端正确建立连接以后,单击图4-2所示的打开空调按钮时,客户端就会发出控制信息H5HDHA,服务器端正确接收信息,如图4-1文本框接收到的信息所示。

服务器端再采集由客户端发过来的信息传给PLC,PLC接收到了正确的信息H5HDHA如图4-4所示。

说明此系统通信成功。

 

5  结论

随着Internet的普及和远程控制策略的完善,基于Internet的远程控制成为可能。

基于公众网络(Internet)的远程控制通过廉价的TCP/IP和Ethernet连接克服了工业网络的弊端,大大降低了网络的建设与维护成本,提高了已有设备的利用效率和联合生产能力,并广泛地延伸人类的工作空间。

本文在Winsock的基础上采用TCP/IP传输控制协议来完成数据的远程通信。

由于TCP/IP协议组是为跨越局域网和广域网环境的大规模互联网设计的,因此,利用因特网为传输媒介,满足了远程控制系统应用到家庭上时,对网络覆盖范围的需求。

基于Internet的远程控制系统是现代控制尤其是远程机器人,远程医疗,智能家庭等控制领域的一个很有发展前景的新颖的体系结构。

远程控制的安全性,有效性,廉价性,远程实时性和可见性都可以达到。

基于Internet远程控制在不久的将来会有更广阔的市场前景

参考:

毕业论文(设计)工作记录及成绩评定册

题目:

学生姓名:

学号:

专业:

班级:

指导教师:

职称:

助理指导教师:

职称:

 

年月日

实验中心制

使用说明

一、此册中各项内容为对学生毕业论文(设计)的工作和成绩评定记录,请各环节记录人用黑色或蓝色钢笔(签字笔)认真填写(建议填写前先写出相应草稿,以避免填错),并妥善保存。

二、此册于学院组织对各专业题目审查完成后,各教研室汇编选题

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

当前位置:首页 > 初中教育 > 政史地

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

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