没有合适的资源?快使用搜索试试~ 我知道了~
首页基于Socket和PLC的远程控制系统设计及应用研究.doc
基于Socket和PLC的远程控制系统设计及应用研究.doc
0 下载量 139 浏览量
更新于2023-11-24
收藏 443KB DOC 举报
本文主要介绍了基于socket和plc的远程控制系统的设计。随着Internet的普及和远程控制策略的完善,基于Internet的远程控制成为可能。通过廉价的TCP/IP和Ethernet连接,基于公众网络的远程控制系统克服了工业网络的弊端,降低了网络建设和维护的成本,提高了设备利用效率和联合生产能力。该系统已经成功应用于远程机器人控制,并满足了空间、海洋和医学显微环境中的特殊需求。一些研究者提出了远程控制中时变的网络时延问题和低带宽的重要性,并引入了虚拟机器人的概念。一些研究者还进行了机器人系统在不同地点之间的Internet远程控制实验,实现了简单迷宫中多障碍存在条件下机器人自动路径寻优。此外,还有一些成功的网络远程控制系统案例,如德国空间研究项目ROTEX系统。然而,在国内还没有对基于Internet的网络远程控制系统进行系统性研究。根据此前基于公用电话网和无线寻呼网的远程控制系统存在速率低、单项传输和网络覆盖限制等问题,本文提出了基于socket和plc的远程控制系统的设计。该系统克服了之前系统的问题,实现了双向传输,并且能够在家庭中应用。通过对该系统的设计和实现,本文旨在提供一种可行的远程控制解决方案,为相关研究和应用提供参考。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/87956627/bg8.jpg)
有问题请 EMAIL:vesor@126.com
8
3 远程控制系统软件部分
3.1 服务器端与客户端通信编程
3.1.1 采用 VC++下的 MFC 框架编程
MFC 框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。所以我
们要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard 可以用来生成
初步的框架文件;资源编辑器用于帮助直观地设计用户接口;ClassWizard 用来帮助
添加代码到框架文件;最后进行编译
[1]
。
MFC 提供了两个用于 WinSock 编程的类:CAsyncSocket 和 CSocket,它们避免
了程序被挂起的可能,使得应用程序更高效。例如:通过套接字发送一个字符串到
另一台主机,我们可以调用 socket 的 Send()函数,此函数尝试发送数据,但如
果套接字没有准备好并在等待则 Send()就返回;当套接字准备好时,一个消息发
往套接字窗口,并由该窗口捕获消息并发送数据,这样就实现了异步 Winsocket 通
信。此外,MFC 还把复杂的 Winsock API 封装到类里,这使得编写应用程序更加容易。
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()。
![](https://csdnimg.cn/release/download_crawler_static/87956627/bg9.jpg)
有问题请 EMAIL:vesor@126.com
9
3.1.3 创建 CAsyncSocket 对象,生成套接字
在使用一个套接字以前必须创建它,这个工作分为两步:首先构造一个
CAsyncSocket 对象,接着调用 CAsycSocket 类的成员函数 Creat()来创建底层的
套接字。
CAsyncSocket::Creat()函数的声明如下:
BOOL Creat(
UINT nSocketPort=0,
Int nSocketType=SOCKET_STREAM,
long lEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE
LPCTSTR lpszSocketAddress=NULL
);
其中,第一个参数 nSocketPort 指定一个分配给套接字的端口号,默认值为 0。
在很多情况下,特别是在服务器应用程序中,用户要明确地分配一个公认的的端口
号给套接字,这个端口一旦确定就不应该随意改动,因为客户端应用程序可以使用
这个端口和服务器应用程序相连接。
本程序中创建套接字的过程如下:
首先创建 CAsyncSocket 对象 m_clientSocket;
再由 m_clientSocket 调用 CAsyncSocket 的成员函数 Creat();
m_clientSocket.Creat(0,SOCK_STREAM,FD_CONNECT);
3.1.4 套接字与服务器连接
使用流式套接字就存在一个在客户端和服务器端建立连接的过程,只有在客户
端和服务器端之间建立了连接,套接字才能进行数据传输工作。
客户端应用程序的流式套接字可以使用 Connect()成员函数来和服务器端进
行连接。Connect()成员函数,实际上是向服务器发出一个连接请求,这个连接请
求如果被服务器接受,则两端的链接顺利实现;如果连接请求得不到响应,那么连
接无法建立。对于异步事件,CAsyncSocket 对象使用通知回调(notification
callback)。在这种情况下,如果 Connect()成员函数不能得到立即响应,它将返
回 FALSE。无论 Connect()成员函数调用成功与否,在结束调用之后,OnConnect
()事件处理函数都将被调用。
本程序中套接字与服务器连接的过程如下:
m_clientSocket.Connect(m_szServerAdr,m_szPort);
其中 m_szServerAdr 表示主机名,m_szPort 指定连接的端口号。
3.1.5 服务器接受客户端的连接
剩余42页未读,继续阅读
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
xinkai1688
- 粉丝: 352
- 资源: 8万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- VMP技术解析:Handle块优化与壳模板初始化
- C++ Primer 第四版更新:现代编程风格与标准库
- 计算机系统基础实验:缓冲区溢出攻击(Lab3)
- 中国结算网上业务平台:证券登记操作详解与常见问题
- FPGA驱动的五子棋博弈系统:加速与创新娱乐体验
- 多旋翼飞行器定点位置控制器设计实验
- 基于流量预测与潮汐效应的动态载频优化策略
- SQL练习:查询分析与高级操作
- 海底数据中心散热优化:从MATLAB到动态模拟
- 移动应用作业:MyDiaryBook - Google Material Design 日记APP
- Linux提权技术详解:从内核漏洞到Sudo配置错误
- 93分钟快速入门 LaTeX:从入门到实践
- 5G测试新挑战与罗德与施瓦茨解决方案
- EAS系统性能优化与故障诊断指南
- Java并发编程:JUC核心概念解析与应用
- 数据结构实验报告:基于不同存储结构的线性表和树实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)