编程口通信(精选7篇)
编程口通信 篇1
摘要:自动分拣线监控系统由两个主控单元三菱FX2N系列PLC构成,上位机则通过主站PLC的编程口,对自动分拣线的生产情况进行监控。对自动分拣线架构做了系统介绍,对PC与PLC的接线做了介绍,分析了三菱FX系列PLC编程口协议,介绍了VB6.0的MSCOMM串口通信控件的设置。
关键词:PLC,编程口通信,VB6.0,组网
1. 引言
PLC是专为工业控制而设计的专用计算机,其体积小,具有高可靠性和很强的抗干扰能力,配置灵活和完善的功能,因此在工业控制系统中得到了广泛的使用。随着工业自动化程度的提高,对PLC的应用提出了更高的要求:更快的处理速度,更高的可靠性,控制与管理功能一体化。控制与管理一体化也就是将计算机信息处理技术、网络通信技术应用于PLC,使用下位分散控制,用计算机提供图形显示界面,同时对下位机进行监控,所以通常采用计算机PC与PLC组成一个完整的监控系统。由于三菱的扩展通信口用作为主从站及与变频器之间的通信,故PLC与上位机的通信就选用了SC-09编程口,该编程口的通信协议是固定的,本文将FX系列PLC与PC的通信问题进行分析。
上位机的程序编写选用了VB6.0,它是可视化的、面向对象、采用事件驱动方式的高级程序设计语言。它提供了一个预定义对象—MSComm通讯控件,可通过设置该控件的属性等参数设置,编写程序,向下位机发送信息,同时可以收集下位机对PC的响应数据,可以很方便地完成用户应用程序之间的串行通讯,对于通过编程口与串行口进行数据通讯的PLC与上位计算机组成的监控系统,可不必增加通信扩展模块,又可以使得系统设计快速便捷可靠。
2. 自动分拣线监控系统的结构组成
自动分拣线监控系统用于对工业生产的成品进行分拣,该系统可分为三层:
(1)管理级计算机层:即PC,对自动线进行监视与操作,可直观地对各类产品的具体情况进行查询。
(2)控制级计算机层:即PLC,对产品的颜色、材质、高度形状进行识别和分析,并对产品的状况进行分析汇总,向管理级计算机上传产品数据。
(3)执行级现场设备层:如传感器,机械手,变频器,电机等。机械手由气动压力驱动。
整个系统的框架图如图1所示:
在图1中,自动分拣线监控系统由两个三菱FX2N系列PLC组成,一个作为主站,另一个则作为从站,主从站之间是通过RS485-BD模块实现串行通信实现互联分布式控制方式的。从站主要负责成品的入站,将成品放入到输送带上前行,经过各类传感器的检测识别,并在皮带末端对其进行高度检测,之后通过并行链接将成品的信息告知主站,主站则控制机械手对各种成品进行归类,处理,并且将产品的数据信息上传给监控室中的PC机。PLC通过输出口控制气动阀岛,使得机械结构按控制工艺执行动作。
3. 三菱FX系列PLC编程口与PC通信的接线
在图1中,PC与PLC都是采用一致的异步通信接口总线标准,由于PC机上的是RS232接口,而PLC编程口是RS422接口,故两者无法直接连接。而是需要FX-232AW进行RS232C/RS422的变换,三菱FXPLC连接下载线MEDOC-SC 09满足此要求。需要注意的是,不要在两头都带电的情况下插拔编程电缆,以免烧坏通信端口。图2是MEDOC-SC 09通信线的内部结构图。
4. 三菱FX系列PLC编程口的通信协议
三菱FX系列PLC编程口通信协议是固定的,且无法改变的,其协议为:数据传输速率为9600bps,偶校验方式,7位数据位,1位停止位。通信字符为十六进制的数码O~F,采用ASCII码形式传输[3]。
计算机要与PLC建立通信时,要向PLC发送一串命令字,PLC根据接收到的这串指令就可判断出下步要做的工作。FX系列PLC有4种命令码,即读命令0(30H)、写命令1(31H)、强制通7(37H)、强制断8(38H)。
FX系列采用面向字符的传输规程,有5个通信控制字符,其中ENQ(05H)用于向计算机发出请求,ACK(06H)是PLC对ENQ的确定回答,NAK(15H)是PLC对ENQ的否定回答,STX(02H)是信息帧开始标志,ETX(03H)是信息帧结束标志。
编程口的通信格式如下:
(1)当PC以字节为单位批量读取PLC的数据时,通信数据的形式如图3所示。
(2)当PC以字节为单位向PLC批量写入数据时,通信数据的形式如图4所示。
上述通信格式中,各类元件的寻址方式是不一样的,须参照表1地址算法表[1]。
(3)当PC强制PLC的位元件置位和复位时,通信数据的形式如图5所示。
图5通信格式中,各类元件的寻址方式是不一样的,须参照表2地址算法格式。
在实际的通信强制元件置位、复位过程中,还需将表2中的地址的高低字节进行互换,如Y20的地址为1005H,M50的地址为320E。
5. 利用VB编写上位机监控程序
VB有着丰富的控件,使用MSComm通讯控件,设定好通信协议后,便可以很方便与PLC进行通信,如果要对PC的数据进行监控,则常常用PLC的Timer控件,通过时间的切换,对每个需要监控区域进行扫描。
(1)MSComm控件的参数设定
MSComm控件主要设置CommPort,Settings和PortOpen这三个属性,必须设置与Fx系列的标准通讯一致的参数“9600,E,7,1”。
CommPort属性:设置或返回通讯端口号。
Settings属性:以字符串的形式设置或返回串行通讯协议。该属性值由4个设置值组成,有如下的形式:“BBBB,P,D,S”,BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。
PortOpen属性:设置并返回通讯端口的状态。
故可在VB程序加载时运行以下VB代码:
MSComm1.CommPort=1
MSComm1.Settings="9600,E,7,1"
MSComm1.PortOpen=True
(2)Timer控件的使用
事实上为了能够让数据以更快速地进行轮询读写、上位机程序更简单,建议在PLC的T形图中对需要进行操作的软元件统一管理、相邻放置。这样上位机就可以对这些数据进行一次性读写了。
(3)PLC批量读的VB程序
上位机对PLC进行批量读须遵循PLC编程口批量读的通信格式,可简写为以下代码:
Monitor.MSComm1.Output=Chr(2)+RdOutput+ChkSum(RdOutput)’
(4)批量写的VB程序
上位机对PLC进行批量写须遵循PLC编程口批量写的通信格式,可简写为以下代码:
Monitor.MSComm1.Output=Chr(2)+Wr Output+ChkSum(WrOutput)
(5)强制置位复位的VB程序
上位机对PLC进行强制置位复位须遵循PLC编程口通信格式,可简写为以下代码:
Operate.MSComm1.Output=Chr(2)+Op Output+ChkSum(OpOutput)’
最终完成后的界面如图6所示:
6. 结束语
采用FX系列PLC编程口实现数据监控成本低,通信过程不易受到干扰,且通过将PC强大的运算能力和PLC的抗干扰能力强、可靠性高、编程简单等优点结合起来,使得系统的操作更简易化、智能化。
参考文献
[1]马宁.基于PLC编程口的通信及实现方法[J].中国科技博览,2009,4;250-251.
[2]李长林.Visual Basic串口通信技术与典型实例[M].北京:清华大学出版社,2006.
[3]漆海霞.基于FX编程口的PC与PLC的通信[J].工业计算机,2009,22(2):23-24.
[4].FX系列PLC的链接通信及VB图形监控[M].北京:北京航空航天大学出版社,2008.
[5]廖常初.FX系列PLC编程及应用[M.北京:机械工业出版社,2006.
编程口通信 篇2
已知溜煤眼在石门中的上口坐标 (1号点) , 溜煤眼的倾角 (δ) , 皮带道中线上的两点 (2、3) 。求溜煤眼在皮带道中的下口 (M) 坐标。由于1、2、3三点的坐标和高程均已知, 要求M点的坐标及高程。其数学模型为解算空间一条直线 (直线23) 和圆锥面的交点 (顶点在1号点倾角为δ的圆锥面) 。显然交点有两个, 应根据实际工程选取其中一个。
2 解算方法
根据皮带机上山2、3点坐标列出一条空间直线方程;
根据溜煤眼上口坐标和溜煤眼倾角列出圆锥面方程, 通过
解联立方程组求得溜煤眼下口M点坐标xM、yM、zM。
3 原程序
4 程序运行
【例】溜煤眼的上口 (1号点) 坐标、高程;皮带上山2、3点坐标、高程分列如下:
运行程序
按屏幕显示, 按上下翻页键LMY文件名高亮度显示时, 按屏幕显示δ=?, 此时输入溜煤眼倾角, 按, 显示x1=?
输入1号点x坐标234.656, 按
, 按屏幕显示依次输入1号点y、H值和2、3点坐标和高程。按回车键, 依次显示M点第一组x、y、H和该点到溜煤眼上口斜长及倾角, 显示为:243.0076793, M点x值;2 5 3.0 2 4 6 7 9 1, M点y值;1 7 2 4.2 2 7 7 3, M点H值;2 7.81934143, M点到1号点的斜长;55, M点到1号点的倾角 (用以检核) ;再连续按回车键, 则依次显示点M第二组x、y、H和该点到溜煤眼上口斜长及倾角, 显示为:226.5280997;286.7415202;1716.024922;37.83312066。程序运行完毕后, 按结束。按, 按上下翻页键可查看数据。
5 结语
煤矿井下溜煤眼是煤炭生产中必备的井巷, 施工频率较高。以往工程技术人员通常采用逐渐趋近法来计算下口坐标, 通常需要计算若干次才能得到准确值。若利用精确的计算方法, 计算量又较大。本程序利用精确的计算方法并且大幅度降低了计算工作量, 具有广泛的应用性。
参考文献
[1]覃辉, 段长虹.fx-9860G SD矩阵串列编程计算器实用测量程序[D].华南理工大学, 2006 (10) .
[2]覃辉, 覃楠.CASIO fx-5800编程计算器基于数据库子程序的测量程序与案例[D].同济大学, 2010 (6) .
编程口通信 篇3
1 JAVA语言概述
其主要特征包括以下几个方面:1) 语言难度较低, 从语法上来看JAVA与C++较为相似, 因此只要具有一定的C++基础都可较好的适应JAVA, 同时Java语言不使用指针, 而是引用并且还具备了自动废料手机, 因此程序员无需担心内存管理。2) JAVA语言在面向对象时具有一定的强制性, 一般只支持类之间的单继承, 对于接口而言则可支持多承接, 同时JAVA语言支持动态绑定, 也就是说JAVA语言属于典型的面向对象语言。3) 分布性。在JAVA应用当中其编程接口存在一个javanet, 它带来了网络应用编程类库从而使JAVA具备了分布性。4) 安全性。JAVA具备专门的安全机制可有效避免恶意代码攻击, 同时网络下载的类也具备了与Class Loader相似的安全防范功能。5) 动态性[2]。JAVA语言最初设计目标是能够让语言可满足环境动态变化, 这便于应用升级。在这个过程中JAVA可动态性地被置于运行环境当中, 同时也能够利用网络环境向其中置入类。
2 基于JAVA的网络安全通信分析
由于JAVA对于网络环境具有专门的面向性, 因此可以完全面向对象的方式带来相关的支持, 从机制方面来看主要分为两个层次:1) 通过是利用Socket实现CLIENT/SERVER通信模式的类库。在通信协议的支持下类库也可采取两种方式进行通信, 首先可通过具备连接的流方式进行通信。在此连接上, 可采取相同进程提供字节流服务, 而这些字节流具有可靠性、有序性等特征, 保证了通信的稳定。2) 数据报方式在无连接条件下进行。该方式无需在系统初始化时连接, 并且I/O操作可由不同主机完成亦可在不同进程当中操作, 同时可进行独立分组进行传输, 长度一般为32kb[3]。在传输过程中并不能保证数据的顺序性、可靠性等特性。因此在安全性上也不如流方式。
另一方面JAVA可以通过统一资源来对URL进行有效定位, 那么当用户对应用类库进行访问时就无须对URL当中的条件协议进行处理, 这也使其可给予HTTP充分的支持。以JSSE客户端为例, 基于JSSE可为Java应用程序提供Java API, 同时JSSE可支持数据加密并可实现服务器端身份验证, 可保持数据的完整性, 利用JSSE可保证基于HTTP、Telnet、FTP等协议的客户程序与服务器进行有效的数据交换。若要使JSSE可顺利进行上述过程, 需要相关证书作为保证。以下为客户端局部代码:
3 结语
正是由于利用JAVA可对各类用户接口进行有效处理, 为设置网络访问权限提供了极大的便捷并且适用于各个平台, 需要注意的是利在JAVA (JSSE) 的应用过程中要先置入有效的证书才能使其正常工作。JAVA为网络安全通信来说带来了强力的技术支持, 值得推广。
参考文献
[1]廉洁, 赵群荣, 乌兰.Java网络安全研究[J].内蒙古民族大学学报 (自然科学版) , 2008.
[2]范婕, 贾伟.电子商务中的安全问题及对策探讨[J].大众科技, 2008.
论网络编程中的异步通信 篇4
1 网络编程中异步通信概述
网络编程分为同步、异步、阻塞和非阻塞四种调用模式、其中异步的概念是和同步相对的, 当一个异步过程调用发出后, 调用者不能立刻得到结果。实际处理这个调用的部件在完成后, 通过状态、通知和回调来通知调用者。网络编程中最常用的客户机/服务器模型是一种非对称式编程模式。该模式的基本思想是把集中在一起的应用划分成为功能不同的两个部分, 分别在不同的计算机上运行, 通过它们之间的分工合作来实现一个完整的功能。对于这种模式而言其中一部分需要作为服务器, 用来响应并为客户提供固定的服务;另一部分则作为客户机程序用来向服务器提出请求或要求某种服务。因此, 解决编程过程中的阻塞问题是提高网络编程人员工作效率的关键, 采用异步通信方式能够极大的提高网络编程人员的工作效率。
2 网络编程中的异步通信方式的实现
网络编程中的异步通信实现有多种方式, 以下就常用的集中方式进行了简要的论述。
2.1 C#异步网络编程的实现
在使用C#异步网络编程过程中常常会遇到函数以阻塞的方式执行, 导致不能同时做其他工作, 影响工作效率。采用C#异步网络编程方式Asynchronous Sockets, 及调用非阻塞的Socket Methods都能够解决这一问题。
Asynchronous Sockets的方法:Socket类的很多连接, 发送, 接收函数都有相应的异步版本, 如:Begin Accept, Begin Receive, Begin Send, End Accept, 等。这些函数都是成对出现的, 利用了Windows的事件机制, 应用这些函数, 能够避免网络编程通信过程中出现阻塞。在Begin XXX函数中, 注册一个回调函数, 当相应事件发生后, 此回调函数得到调用, 在此回调函数内再调用相应的End XXX函数, 得到返回值。
Asynchronous Sockets的方法是基于消息事件的操作系统特有的, 利用了Windows的事件机制, 在控制台应用程序中不能够应用这种方法。另一种方法是在进行网络通信过程中, 在真正通信之前先察看状态, 如果不会阻塞, 才进行通信。Socket类中的Poll () 函数和Select () 函数能够完成这种功能。Poll函数可以察看是否有可用数据可读, 可用连接可建立, 是否可写等, 还可以设定超时时间。Poll函数只针对一个Socket, 而Select函数可以针对一组Socket。异步Sockets实际上是采用了多线程的机制实现的。利用异步Sockets, 可以不涉及多线程的情况下, 完成多线程才能做的工作。
2.2 Java中的异步网络编程
对于编写客户服务器应用的Java程序员来讲, 如何解决程序在对方出现故障时仍然可以继续稳定的运行时编程中的重要事项。利用网络编程异步通信可以很好的解决这一问题。例如:如果客户程序运行先于服务程序, 则客户程序则需要在服务程序启动后再自动连接服务程序;在客户程序运行中如果服务程序中途停止, 则也需要在不停止的条件下, 等待服务程序运行并重新连接。例如:客户应用启动后, 检测服务应用是否存在。如果不存在, 则等待服务应用启动, 同时不堵塞客户应用其他任务的执行。一旦服务应用启动, 客户应用应该及时的与其建立连接。客户应用和服务应用在数据通信中, 服务应用异常退出后, 客户应用应可以检测到服务应用的退出。同时客户应用自动清除该通信链路, 回到初始状态, 等待服务应用重新启动。该网络异步编程首先涉及到一个定时器和定时器事件。该定时器用于不断的检测网络中客户应用和服务应用是否连通, 同时在服务应用出现异常时中止数据通信, 返回到初始状态。网络的故障可以通过网络方法的异常处理获知。定时器包含在网络通信类中, 使得使用该类的应用感知不到定时器的存在, 而方便的处理网络信息。
3 Windows Sockets API实现网络异步通讯
为TCP/IP网络通信开发的专门用于网络通讯开发的API提高了网络开发人员高性能网络通讯程序的设计的便捷性。API是当今在TCP/IP网络最为通用的一种API, 也是在互联网上进行应用开发最为通用的一种API。基于TCP/IP的客户机/服务器模型和面向连接的流式套接字是现代网络编程中常用的模式, 。其通信原理为:服务器端和客户端都必须建立通信套接字, 而且服务器端应先进入监听状态, 然后客户端套接字发出连接请求, 服务器端收到请求后, 建立另一个套接字进行通信, 原来负责监听的套接字仍进行监听, 如果有其它客户发来连接请求, 则再建立一个套接字。默认状态下最多可同时接收5个客户的连接请求, 并与之建立通信关系。相对于服务器, 客户端的工作就显得比较简单了, 当客户端打开套接字之后, 便可通过调用connect () 和服务器建立连接。连接建立之后, 客户和服务器之间就可以通过连接发送和接收资料。最后资料传送结束, 双方调用closesocket () 关闭套接字来结束这次通讯。
4 结论
网络编程对现代计算机网络系统发展有着重要的促进作用, 提高网络编程人员的工作效率是现代软件开发企业的重要工作。积极利用网络编程中的异步通信技术能够有效提高网络编程人员的工作效率。编程人员应认识到异步通信技术在网络编程中的重要性, 提高对异步通信技术在网络编程的认识, 加大异步通信技术在编程中的应用, 以此提高工作效率, 为程序编写工作的便捷性、可靠性奠定基础。
参考文献
[1]杨海涛.网络编程实例教学[J].程序开发, 2008, 12.
[2]黄力威.网络编程通信机制概述[J].站长资讯, 2009, 4.
[3]刘立军.网络编程异步通信的实现[J].网络学院, 2008, 12.
[4]阎宏涛.网络编程的基本步骤[J].脚本资讯, 2009, 1.
编程口通信 篇5
利用Visual C#语言可快速编写各种基于Microsof.NET平台的应用程序, .NET平台集成了对解决方案的设计、调试、开发、部署和管理的功能, 其一整套的开发工具组件, 也为C#提供了一个易用且逻辑结构一致的程序设计环境。
1 网络通信基础
Internet时代的软件应用系统基本上均会涉及到网络技术, 单机软件开发技术已无法满足大中型的项目开发。所以, 为使计算机、不同的网络之间能够相互连接, 实现资源共享, 便需要一个标准的通信规则, 使计算机与相关设备按照相同的协议进行通信。目前在网络通讯上使用最为广泛的是TCP/IP协议[1]。
从名称上看, TCP/IP包括两个协议, 即传输控制协议 (Transfer Control Protocol, TCP) 和网际协议 (Internet Protocol, IP) , 但实际上TCP/IP并非单独的协议, 而是一个协议簇, 其包括了上百个功能众多的协议, 如地址解析协议 (ARP) 、Internet控制消息协议 (ICMP) 等。该协议簇分为4层次:链路层、网络层、传输层和应用层。通过TCP/IP协议, 互联的计算机之间可通过通信共享网络上的资源[2]。
2. NET中实现网络编程的类
.NET框架下的System.NET命名空间为需进行网络访问的开发人员提供了Win Sock接口的托管实现。其中的Socket类用于实现Berkeley套接字接口, 并为实现网络编程提供了大量方法。Socket作为其他网络协议的基础, 既可面向客户端开发, 又可面向服务器端开发, 在传输层面上使用较多。但在网络编程中, 通常传输的是海量数据, 若按Socket类的收发, 则会过慢, 无法满足网络传输的需要[3]。因此, 在应用协议层面上, 通常使用构建于Socket类之上的Tcp Client类和Tcp Listener类。其位于System.NET.Sockets命名空间中。相比位于底层的Socket类提供了更高层次的抽象, 封装TCP套接字的创建, 无需处理连接的细节。
2.1 Tcp Client类
Tcpclient类为TCP网络服务提供客户端连接, 其构建于Socket类之上, 以提供较高级别的TCP服务, 即用于在同步阻止模式下通过网络连接、发送和接收流数据。并通过与Network Stream对象关联, 使得用户可通过流操作方式实现对网络连接状态下海量数据的发送与接收。Tcp Client类的常用属性和方法如表1所示[4]。
利用Tcp Client类实现与TCP主机通信的步骤如下:
(1) 创建Tcp Client实例。Tcp Client类有4种构造函数的重载形式, 分别是Tcp Client () 、Tcp Client (Address Family) 、Tcp Client (IPEnd Point) 、Tcp Client (String, Int32) 。其中, Address Family是地址族, 定义了网络类型, 一般使用Address Family.Inter Network;IPEnd Point将网络端点表示为IP地址和端口号, 用于指定在建立远程主机连接时所使用的本地网络接口。
(2) 连接远程主机。若在实例化Tcp Client时未与远程主机连接, 则可通过Tcp Client类的Connect方法连接。Connect方法使用主机名和端口号将客户端连接到远程主机。
(3) 发送和接收数据。Tcp Client使用标准的Stream流处理技术, 利用Network Stream实例的读写操作来实现网络数据的发送和接收。Network Stream与普通的Stream流不同, Network Stream没有当前位置的概念, 不支持查找和对数据流的随机访问。Network Stream实现通过网络套接字发送和接收数据的标准.NET框架流机制, Network Stream支持对网络数据流的同步和异步访问, 但不支持对网络数据流的随机访问。
所以, Tcp Client实例只有在建立并与远程主机连接成功后, 才能使用Get Stream方法以返回NetworkStream实例, 然后通过获取的Network Stream实例的读写方法Write和Read来发送和接收数据。这两种方法的原型是
int Write (byte[]buffer, int offset, int size) ;//把buffer中的数据写入Network Stream中
int Read (byte[]buffer, int offset, int size) ;//从Network Stream中读取数据到buffer
需注意, Network Stream的读写均是针对字节数组, 即Byte数据类型进行的, 若要对读写的内容进一步操作, 则需将Byte转换成字符串, 即string类型。
(4) 关闭TCP套接字。在与服务器完成通信后, 必须调用Close方法释放所有的资源。
2.2 Tcp Listener类
通常情况下, 服务器端应用程序在启动时将首先绑定本地网络接口的IP地址和端口号, 然后进入侦听客户请求的状态, 以便于客户端应用程序提出显示请求。一旦侦听到有客户端应用程序请求连接侦听端口, 服务器应用程序将接受请求, 并建立一个负责与客户端应用程序通信的信道, 即通过创建连接套接字与客户端应用程序建立连接, 由连接套接字完成与客户端应用程序的数据传送操作, 服务器端应用程序继续侦听更多客户端连接请求。
Tcp Listener类是专为服务器端设计的, 用于监视TCP端口上传入的请求, 接收传入的连接请求并创建Tcp Client实例以处理请求, 并可使用此连接发送和接收数据包。该类的常用属性和方法如表2所示。
通过Tcp Listener类创建服务器端以完成通信的步骤如下:
(1) 创建Tcp Listener实例。Tcp Listener类提供了3种构造函数的重载形式, 分别是Tcp Listener (port) 、Tcp Listener (IPEnd Point) 、Tcp Listener (IPAddress, port) , 其分别根据指定的侦听端口、IPEnd Point对象、IPAddress对象和端口号来创建Tcp Listener的实例, 且实现与默认端口或指定IP地址和指定端口的绑定。
(2) 启动侦听。Tcp Listener实例创建成功后, 便可调用Start方法启动侦听, 该方法会自动调用Tcp Listener实例的基础Socket上的Listen方法, 开始侦听客户的连接请求。
(3) 接受连接请求。一旦Tcp Listener侦听到有客户连接请求时, 便可使用Accept Socket或Accept Tcp Client方法来接受当前在队列中挂起的连接请求。这两种方法分别返回一个Socket或Tcp Client实例以实现与提出连接请求客户的数据交流。
(4) 发送和接收数据。若接受连接请求时返回的是Socket实例, 则可用其自身的Send和Receive方法实现与客户端的通信;若返回的是Tcp Client实例, 则可通过对Network Stream数据流的读写Read和Write方法来实现与客户端的数据通信。在实际中, 与服务器连接的通常不止一个客户端, 服务器需同时与多个客户建立连接并通信, 此时需引入多线程技术, 为每个客户的连接建立一个线程, 并在该线程中进行数据通信。
(5) 关闭连接。在与客户程序完成通信后, 必须停止侦听套接字, 其可通过调用Tcp Listener类的Stop方法来实现。同时也必须关闭从Accept Socket或Accept Tcp Client返回的任何实例, 以释放相关资源。
3 通信流程
在使用TCP/IP协议进行通信时, 应先建立服务器的对象, 一般以当前主机作为服务器, 所以IP地址选取本机地址, 通信端口一般选取>1 024的闲置端口, 利用IP地址和端口建立完成服务器后, 调用Start () 方法开始侦听该端口上是否有挂起的连接请求, 一旦有客户端发出连接, 服务器经判断调用Accept Tcp Client () 方法接受连接请求, 并同时产生一个连接套接字负责与该客户端应用程序进行通信, 以实现数据的发送与接收。一般服务器在创建新的进程与客户通信后, 会返回调用处等待是否有新的连接。客户端进程一般先创建Tcp Client类的实例, 然后使用Connect () 方法向一个指定服务器的指定端口发起连接, 一旦连接成功, 便说明该客户端与服务器的通信信道建立完成, 可利用网络流Network Stream的读写Read () 和Write () 方法实现发送或接收数据包。使用Tcp Client类和Tcp Listener类建立Socket连接的流程如图1所示。
4 程序框架
利用Tcp Client和Tcp Listener编写基于TCP/IP协议的网络通信代码, 不论是服务器端或是客户端, 均要首先在命名空间部分引入System..Net和System.Net.Sockets。当运行程序时, 先运行服务器端, 使其保持在监听连接状态, 然后再运行客户端程序。
(1) 服务器端。
同时可利用网络流读取客户端发送给服务器的数据。Network Stream类的实例将数据以Read () 方法读取到一个字节数组byt, 若用户需将读取到的数据进行显示以证明是否无误, 则必须将byt转化成字符串的形式。
(2) 客户端。
此时需注意, Connect () 方法中的参数IP地址和端口必须与服务器的设置保持一致。成功连接到服务器后, 客户端就可向其发送数据。
5 结束语
文中对利用Visual C#语言进行网络通信的编程方法作了探讨, 尤其是使用Tcp Client类和Tcp Listener类, 可方便高效地建立网络连接并收发数据。通过实验证明, 其生成的界面友好, 编写的程序也能较好地完成通信功能任务。
参考文献
[1]杨富国.Visual C#.NET网络编程案例解析[M].北京:清华大学出版社, 北京交通大学出版社, 2009.
[2]金华, 华进.C#网络编程技术教程[M].北京:人民邮电出版社, 2009.
[3]李新峰, 付志涛, 缪勇.亮剑.NET:图解C#开发实战[M].北京:电子工业出版社, 2009.
使用VB语言编程OPC通信技术 篇6
标准化的OPC系统包括4个部分:
(1) OPC服务器:为上位机与PLC提供过程数据。
(2) OPC代理占位DLL:为VB或者VBA开发的OPC应用程序提供OPC服务器接口数据格式交换服务。
(3) OPC自动化包装DLL:提供OPC服务器的自动化接口变换服务。VB或者VBA开发的上位机应用程序需要通过该接口访问OPC服务器。
(4) OPC应用程序:设计人员使用VB等语言设计的提供给用户的人机界面程序, 含有用户要求的所有功能。
上述中OPC服务器、OPC占位代理DLL、OPC自动化包装DLL这三部分是由第三方开发的DLL文件。本文以KEPWARE公司的OPC软件产品为例, 介绍如何编程VB与OPC数据通讯。在KEPWARE中所连接的设备以通道 (CHANNEL) 的形式描述, 每连接一个设备就使用一个CHANNEL, 同时每一个CHANNEL对应OPC服务器一个OPC组 (下面会介绍到) 。在对应的CHANNEL里面设置好通信端口即可。以串口1为例是COM1, 也支持以太网通信。
通过VB访问OPC服务器主要有三种对象, 这三种对象有各自的参数、属性、方法。
(1) OPC服务器。
(2) OPC组 (OPC组集合) 。
(3) OPC标签 (OPC标签集合) 。
OPC组、OPC标签在访问之前需要在KEPWARE一侧建立, 并配置好标签的对应PLC内部地址。下面分步介绍如何编程访问OPC服务器, 以操作PLC数据的。
1 连接OPC服务器
在使用VB编程OPC访问程序的时候, 首先建立OPC服务器名并建立连接。
声明OPC服务器:
Public opc_Server Obj As OPCServer//声明全局OPC服务器, 变量名opc_Server Obj
Set opc_Server Obj=New OPCServer//建立OPC服务器
连接OPC服务器可以显式访问也可以隐式访问。
连接服务器:
opc_Server Obj.Connect (my OPCInfor.OPC_Server) //隐式访问, 使用my OPCinfor.OPC子过程返回的值作为访问参数。这样可以灵活指定所访问的OPC服务器。
2 添加OPC组
在OPC服务器中OPC组集合是自动包含的, 可以使用OPC组集合的Add方法在里面添加OPC组。代码示例:
Public opc_Group Obj As OPCGroup//全局声明opc_Grouop Ob变量作为OPC组属性
Set opc_Group Obj=opc_Server Obj.OPCGroups.Add (my OPCInfor.OPC_Group) //添加OPC组名称, 同样使用隐式访问, 添加的组名称为变量”my OPCInfor.OPC_Group”中内容。
Set my Group1=opc_Server Obj.OPCGroups.Add ("Group1") //显式声明一个名称为Group1的OPC组
3 指定OPC标签集合名称
在KEPWARE中配置的OPC标签集合名称在编程时要一致, OPC组的名称也要一致, 否则无法通讯。下面是使用变量间接指定的例子。代码示例:my OPCInfor.OPC_Item=my Confi g.Get String Value ("OP CInfo", "OPCItem", "", m_str Confi guration File Name) //同样通过Land文件当中的“OPCinfo”字段中的“OPCItem”项内容来指定OPC组集合字符串。
4 添加OPC项
OPC项是指定访问OPC服务器数据的名称, 其通过OPC服务器与PLC相关联, 指向要访问的PLC某个数据地址。编程OPC服务器之前, 先在KEPWAR软件当中配置好需要访问的OPC项, 将其与PLC内部的某个地址相关联, 软件中称为“TAG”。比如:新建项并命名TAG1, 配置地址为D200。那么在设计应用程序访问地址D20的数据时, 就指定访问名TAG1就可以了。但是在使用OPC项之前, 先进行添加, 取得相应的句柄并妥善保存。如果要对OPC组内大量项标签进行读写操作的时, 这个句柄就非常有用。
Setopc_Item Obj=opc_Group Obj.OPCItems.Add Item (my OPCInfor.OPC_Group+my OPCInfor.OPC_Item+"Test Max"+CStr (i) , 1) //在OPC组中的项标签集合里面添加10个名称从Test Max (1) 到Test Max (10) 的OPC项标签 (item) 。
Serverhandles (i) =opc_Item Obj.Server Handle//通过数组取得项标签的句柄。
5 枚举所有项标签
在应用程序设计中, 如果需要读写项集合内的某个项数据, 需要取得标签集合中该项标签的符号, 这就需要用到枚举方法。就是在标签集合中进行项标签枚举, 直到找到指定的的项。
在程序代码中编写子过程用以实现枚举标签集合中所有的项标签功能。这个子过程可以作为一个功能块在所有读写项标签的语句中调用。在调用过程中只需要通过传值的形式传递项标签标识符, 子过程就可以完成查找、返回项符号, 进而进行读写操作。
代码示例:
返回的项标签符号存入变量OPC_Item Obj中, 可以方便的进行读写操作。
代码示例:
6 读写PLC数据
OPC服务器支持同步与异步的读写方式。同步方式是指在应用程序发出读写请求之后, 直到OPC服务器操作结束后继续程序执行。异步方式是在应用程序发出读写请求之后, 应用程序继续执行, 在OPC服务器数据处理结束后, 告之应用程序处理完毕。在数据同步性要求不高的情况下两者区别不大。
同步读取代码示例:
上面的代码示例适合于批量读取PLC内部数据, 如果需要单独读写某个项标签的数据, 可以使用项标签的Read与Write方法。
代码示例:opc_Item Obj.Write (True) //对变量OPC_Item Obj赋值的OPC项标签进行写操作。
编程口通信 篇7
引信电磁感应装定是目前国内外小口径火炮引信较为先进的装定模式, 主要分为静态装定和膛口动态感应装定。其中膛口动态感应装定以装定快速、准确等优点广泛应用于榴弹、高炮等武器系统, 如瑞士35 mm“空中卫士”系统、美国的20 mm理想单兵战斗武器 (OICW) 和25 mm理想班组支援武器均采用膛口动态装定方式。它通过弹丸发射从炮口感应装定线圈中穿过过程中的瞬间进行装定的方式, 适用于一般火炮。但由于弹丸在出炮口的时间极短, 一般为μs级。因此, 膛口动态感应装定对其通信链路的可靠性要求极高, 应进行精确的检测验证。而从现今国内可查阅的资料来看, 对该系统的可靠性检测还是采用实验室仿真分析和静态检测模式, 这就忽略了在高速运行环境下感应装定通信链路波形畸变、相位偏移等因素;同时, 信息进行感应装定后由引信电路处理解码, 后进行读取检测, 使引信与装定器有发生互检的可能, 并不能完全、真实、可靠地反应感应装定通信链路的状况[1,2,3]。因此研制膛口感应装定通信链路可靠性动态测试系统迫在眉睫。本文提出一种对膛口感应装定通信链路进行动态测试的方法, 可较好地解决现存在的问题。
1动态测试原理
膛口感应装定通信链路动态测试的基本原理是利用高压气体快放时产生的推进动力, 使测试高速运行的弹丸, 在模拟初次级线圈高速相对运动的动态环境中完成感应装定, 并将装定信号采集存储由软件进行解码测试。
动态测试系统工作原理如图1所示。
如图1所示, 动态测试主要由动态测试环境的建立和软件解码测试两个关键步骤完成:系统通过计算机发出装定信息, 由装定器进行编码调制传送至装定装置;快放存储的高压气体, 推动测试弹丸以高速运行, 在装定位置达到理想初速, 在动态中完成信息的感应装定, 接收到的装定信息由安装在弹丸上的高速采集卡采集存储;对测试弹丸进行回收处理, 将采集卡中的采集信号读入计算机, 由感应装定专用测试软件进行处理解码, 判定感应装定通信链路的可靠性。其中高速采集卡安装在测试弹丸引信接口电路的输入端, 以避免引信与装定器发生互检。
2动态测试环境的建立
动态测试的第一步是模拟弹丸以初速运行的动态环境, 建立弹丸高速运行的通道。建立如图2所示的模拟加速装置。
加速装置主要由模拟炮推进装置、测速装置、装定装置和消声回收装置构成。模拟炮推进装置包括带有空气压缩与净化过滤功能的储气缸, 一端带有活塞阀并与装弹仓连接, 发射时利用存储在气缸内的高压气体获得足够的推进动力, 经过快放活塞推进发射筒内的弹丸高速运动, 弹丸运动到装定装置位置时进行感应装定, 安装在测试弹丸上的采集系统对获得的装定信号进行存储, 同时由测速装置对弹丸进行测速, 最后由缓冲回收装置进行消声回收处理。
在系统进行测试以前, 高压气体先充到储气缸中, 储气缸中安装了数字式压力传感器, 可以精确检测储气缸中的压力。当储气缸容积、发射筒容积、空气常数、弹丸质量等值一定时, 可以通过改变缸中的压力值来控制弹丸的初速, 以模拟不同标准的初速。
弹丸初速的推算可参照公式 (1) 。
其中:v是弹丸的初速;P0为初始压力;V0为储气缸初始容积;V1为发射筒容积;a为空气常数。现常用小口径武器系统的弹丸初速大多大于190 m/s, 可根据不同需求来调节所需的压力值。
加速装置的运行由计算机自动控制和测量, 包括储气缸压力的精确调节, 弹丸初速的测量, 装定信号的发送等。
3基于LabVIEW技术的专用感应装定测试软件
动态测试的第二步是将采集系统采集到的装定信号读入计算机, 调用专用测试软件对信号进行检测。装定信号的通信步骤为编码、调制、解调、解码, 因此测试软件的功能是模拟各种极限参数下的虚拟引信, 替代引信中的硬件解码电路, 对装定信号进行解调解码, 判定装定的可靠性。软件的开发基于LabVIEW的编程技术。
LabVIEW是一个基于图形化编程语言的具有革命性的图形化开发环境, 它内置信号采集、测量分析与数据显示功能, 具有强大的功能和系统灵活性, 并将广泛的数据采集、分析与显示功能集中在同一个环境中, 使用户可以在自己的平台上便捷地集成一套完整的应用方案[4,5]。
软件解码测试原理如图3所示。
装定信号由安装在测试弹丸上的高速采集卡采集并存储, 通过I/O文件读入, 进入测试软件平台, 分析引信接口阻抗各种边界条件对装定信号的影响, 对波形进行相关调理, 然后进行信号解调、解码, 最后将数据回读并在软件前面板中显示, 与输入装定码比对判定装定通信链路的可靠性。
其中信号的调制采用2FSK (二进制频移键控) 模式, 相应的解调采用非相干解调方式[6,7], 解调原理如图4所示。
4软件解码测试仿真
建立装定信号通信仿真, 设输入的二进制数据为“0100111000”, 通过计算机串口发出由装定器接收, 进行编码产生相应的二进制矩形脉冲序列, 采用2FSK模式进行信号调制, 信号调制速度f为1 MHz, 载波频率f1为10 MHz, 代表状态“0”, f2为20 MHz, 代表状态“1”, 信号幅值为1 V。矩形脉冲序列与调制波形如图5所示。
该信号由装定器发出至装定装置与高速运行的测试弹丸进行动态感应装定, 接收到的装定信号由采集卡采集存储通过I/O文件形式读入计算机, 设装定信号经放大传输未发生畸变, 信号幅度变为5 V, 采集波形如图6所示。
采集信号进行解调前应分析引信接口电路的阻抗对波形产生的影响, 对波形进行调理。对引信接口电路进行等效串联处理, 接口阻抗Z=R+jωL+1/jωC, 其中, ω为信号传输频率, R为接口电路等效电阻, C为等效电容, L是等效电感。则阻抗分压Uz=I×Z=I×[R+ (ωL-1/ωC) j], 因此装定信号通过接口阻抗时, 其幅值会有一定的衰减, 波形有所移位, 同时也会产生一定的噪声干扰。
打开LabVIEW函数选板, 选择“信号处理”, 在其子菜单中选择“波形生成”, 再选择“均匀白噪声波形”, 噪声各项参数可调, 幅值取0.1 V;然后调用“算术与比较”中的“公式”函数, 将采集信号与噪声信号相加;调用乘法器, 并创建衰减控件y, 用于控制信号的幅值衰减;调用“信号运算”中的函数“Y=X[i-n]”, 创建输入控件n, 模拟波形移位带来的影响。衰减y=0.8, 移位n=-T/10=-0.1μs。处理后波形及程序前面板界面如图7所示。
处理后的信号分两路进入带通滤波器进行滤波。再次选择函数菜单中的“信号处理”项, 其子菜单“滤波器”中列出多种可供选择的滤波器类型, 这里选用Butterworth滤波器, 滤波器类型选择Bandpass;设定采样率为常量, 其值等于高速采集卡速率, 设定高低频截止频率和阶数为可变输入控件, 输入相应的频率和阶数, 对波形进行带通滤波。两路信号经滤波后的波形如图8所示。
包络检波分两步进行, 先调用数学运算函数取其模值, 对波形进行整流, 后经低通滤波器进行包络选取。两路包络相减得到判决波形, 如图9所示。
判决波形需通过引信单片机的串口通信协议, 由串口正确接收回读。参照串口通信协议, 通信两端的串口波特率应保持一致, 这意味着数据线上的采样率应等于该波特率。因此应对解调信号进行降采样处理, 采样间隔等于一个调制周期T。调用信号运算函数“降采样”, 采样间隔dt=T=1/f=1 μs, 对解调信号进行重新采样;对于2FSK信号, 一个调制周期 (0-T) 即对应一个码元, 故再选用波形函数“数模转换”, 分辨率设为1, 将信号转换为二进制数字波形, 最后调用数字函数“数字至二进制转换”将回读结果在界面上显示。显示结果如图10所示。
如上图所示, 回读结果为“0100111000”, 与输入的二进制数据一致, 说明解码无误, 波形可由串口正确接收, 感应装定通信链路具有一定可靠性;但要判定其可靠性达到标准需求, 需进行近一步分析。
仿真过程中建立了多个可变的输入控件, 其中波形衰减参数y, 波形移位参数n, 添加噪声的幅值、采样率, 对应引信接口阻抗的各元件参数;带通滤波器高低频截止频率、滤波器阶数以及包络检波器中各参数控件均对应实际解码电路中各元件参数;降采样间隔dt的值等于接收串口的波特率分之一。将这些可变输入控件对应引信硬件电路中的各参数用来模拟实际参数误差对解码测试产生的影响。如在实际装定过程中, 引信与装定器进行串口通信时设定的波特率会有微小差异, 则重采样间隔dt的值应确认在T1至T2所包含的范围内, 其中T1<T<T2, 要确保装定信号能被串口正确接收, 需使dt值在此范围内连续变化均回读无误。当各输入控件在其范围内变化均可使回读结果正确, 则解码无误, 可判定感应装定通信链路的可靠性达到需求;各控件的输入值范围即为引信硬件电路中各参数的极限值, 保证测试软件可以建立各种极限参数下的虚拟引信电路, 以实现对感应装定通信链路全面、准确的检测。
5结论
膛口动态感应装定通信链路的可靠性在感应装定通信链路设计、研制过程中具有非常重要的作用, 它是膛口动态感应装定参数冗余设计中关键的取决因素。开发与其匹配的动态检测技术将为引信动态装定可靠性的设计、调整和优化, 提供重要的依据, 可大幅提高引信动态感应装定功能可靠性。加速装置通过压力调节可使测试弹丸在装定时达到所需的实际初速, 模拟初次级线圈相对高速运动的动态装定环境, 使装定信息在相对真实的环境下进行感应装定;用高速采集卡从引信接口电路的输入端采集装定信号, 避免引信、装定器发生互检;以基于LabVIEW编程技术的专用测试软件替代引信的解码电路, 模拟各种极限情况下的解码状态, 对装定信号进行解码判定;整个测试过程基本完成了对膛口感应装定通信链路可靠性的动态测试。测试系统更多细节问题将在今后的工作中进行更深层次的分析探讨, 使动态测试环境最大限度地贴近实际环境, 以更好地实现对膛口感应装定通信链路进行全面、真实的检测。
参考文献
[1]纪霞, 沙文龙, 王利.感应装定中炮口速度测定方法研究.弹箭与制导学报, 2004;24 (5) :542—544
[2]马少杰, 张合, 李长生, 等.火箭弹引信电磁感应装定仿真分析.探测与控制学报, 2008;30 (2) :68—72
[3]曲秀杰, 李杰.电子时间引信装定技术研究.探测与控制学报, 2001;23 (3) :21—24
[4]高侃坷, 周军.基于LabVIEW的通信仿真.http://d.wanfang-data.com.cn/Periodical_jrdz200504014.aspx, 2005
[5]王磊, 陶梅.精通LabVIEW8.0.北京:电子工业出版社, 2007
[6]樊昌信, 张甫翊, 徐炳祥, 等.通信原理.北京:国防工业出版社, 2001
【编程口通信】推荐阅读:
实验三 单片机串行口编程06-06
串行通信口09-26
串行口通信技术开题报告11-16
编程优化01-17
自动编程06-01
编程游戏06-21
编程控制06-22
编程平台07-11
编程模式08-26
小学编程08-27