基于VC++和MFC的上位机与PLC的通讯系统
- 格式:doc
- 大小:72.00 KB
- 文档页数:6
绪论Visual Basic(VB)是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。
从任何标准来说,VB都是丠界上使用人数最多的语言——不仅是盠赞VB的开发者还是抱怨VB的开发者的数颃。
其中微软的办公软件,比如WORD和EXCEL都是用VB来编写的。
它源自BASIC 编程语言。
VB拥有图形用户界面(GUI )和快速应用程序开发(RAD )系统,可以轻易的使用DAO 、RDO 、ADO 连接数据库,或者轻松的创建ActiveX 控件。
Visual Basic是可视化Basic编程语言,有4.0,5.0和6.0,发展到现在有.NET BASIC,其中Visual Basic 6.0是应用最广泛的初学者编程语言,它基本兼容大多数BASIC下的源代码或稍加改动就能应用于Visual Basic 的代码内,Visual Basic是编译型语言,所生成的EXE文件能在具有VB同版本运行库文件的WINDOWS环境下运行.下一个版本的Visual Basic将引入WebClasses,它是经过精心挑选后确定的网络开发的工具。
因为它更具有scalable、更强大、而且是真正的language-agnostic。
它在Visual Studio的所有的工具中起作用。
如果你注意多层开发的一些基本规则,你可以很容易地完成这个转变。
PLC即可编程控制器(Programmable logic Controller,是指以计算机技术为基础的新型工业控制装置。
“PLC是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。
它采用可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算术运算等操作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。
PLC及其有关的外围设备都应该按易于与工业控制系统形成一个整体,易于扩展其功能的原则而设计。
”PLC具有1可靠性高,抗干扰能力强,2配套齐全,功能完善,适用性强,3易学易用,深受工程技术人员欢迎,4系统的设计、建造工作量小,维护方便,容易改造,5体积小,重量轻,能耗低。
基于VB6.0的上位机与PLC实时通信技术VB6.0是一种编程语言,可用于开发上位机与PLC之间的实时通信技术。
PLC是一种可编程逻辑控制器,用于控制和监控自动化设备。
通过实时通信,上位机可以与PLC进行数据交换和控制操作。
1. 通信协议选择:PLC与上位机之间的通信需要选择适当的通信协议。
常见的通信协议包括Modbus、OPC、Profibus等。
根据实际需求和设备的支持情况选择合适的通信协议。
2. 串口通信:VB6.0通过串口通信与PLC进行连接。
通常采用RS232、RS485等串口通信方式。
在编程中,需要设置串口的波特率、数据位、停止位、校验位等参数。
通过VB6.0的串口通信类库,可以实现数据的读取和写入。
3. 数据采集和监控:通过VB6.0实现对PLC数据的采集和监控。
可以使用定时器触发方式,周期性的读取PLC设备的数据。
通过VB6.0的数据处理和显示功能,可以实时显示PLC设备的状态和数据信息,如温度、压力、流量等。
4. 控制指令的发送:通过VB6.0向PLC发送控制指令,实现对设备的控制。
根据PLC 的控制逻辑,编写相应的控制程序,将控制指令发送给PLC设备。
通过串口通信,将控制指令发送出去,实现设备的开关、调节等操作。
5. 异常处理:在实时通信中,可能会出现通信故障、数据错误等异常情况。
需要在编程中添加异常处理的代码,对异常情况进行处理,保证通信的稳定性和可靠性。
基于VB6.0的上位机与PLC实时通信技术可以广泛应用于自动化控制、工业监控、智能家居等领域。
通过实时通信,可以实现对设备的远程监控和控制,提高设备的自动化程度和工作效率。
在编程过程中,需要注意通信协议的选择和参数的设置,以确保通信的正确和可靠。
需要添加适当的异常处理机制,提升系统的稳定性和可靠性。
上位机与plc网口通讯近年来,随着工业自动化技术的快速发展,上位机与PLC网口通讯成为了工业生产中不可或缺的一部分。
在工厂现场,各种设备和机械需要高效地进行数据与指令的交换,以实现自动化控制和监控。
而上位机与PLC网口通讯作为一种常用的通信方式,正发挥着重要的作用。
一、上位机与PLC网口通讯的基本原理上位机与PLC网口通讯的基本原理是通过以太网等媒体,通过数字信号在上位机和PLC之间进行数据传输和通信。
上位机负责处理和分析数据,而PLC则负责执行实际的控制操作。
通过网口通讯,上位机可以远程监控和控制PLC的运行状态,实现对生产过程的实时监测和管理。
二、上位机与PLC网口通讯的具体应用上位机与PLC网口通讯在工业生产中有着广泛的应用。
以某汽车制造厂为例,该厂采用了上位机与PLC网口通讯技术,实现了对汽车生产线的远程监控和控制。
在生产线上,通过网口通讯,上位机可以获取到各个PLC的运行数据和状态,如温度、压力、电流等参数。
同时,上位机还能够根据这些数据进行实时分析和判断,以便及时发现和修复生产线的故障,并及时对设备进行调整和优化。
这样一来,不仅可以提高生产线的可靠性和稳定性,还能够大大提高生产效率和降低成本。
三、上位机与PLC网口通讯的优势和挑战上位机与PLC网口通讯相较于传统的串口通讯具有许多优势。
首先,网口通讯的传输速率更高,可以实现更快速的数据传输和响应。
其次,网口通讯具有较高的稳定性和可靠性,可在复杂的工业环境下正常工作。
此外,网口通讯还可以远程监控和控制,无需物理接触设备,提高了工作的安全性和便利性。
然而,上位机与PLC网口通讯也面临一些挑战。
首先,对于工业生产而言,要确保网口通讯的稳定性和可靠性,需考虑网络带宽、延迟、抗干扰等因素。
其次,上位机与PLC网口通讯的实现需要一定的技术和设备支持,包括网络设备、通信协议以及相应的软件开发。
四、发展趋势与前景展望上位机与PLC网口通讯作为现代工业自动化技术的重要组成部分,未来有着广阔的发展前景。
VC++编程实现与Omron PLC通讯进行变频控制1.引言当今,在自动化的工业生产中,变频控制往往与计算机远程控制相联系在一起,从而实现电机的远程变频控制。
可编程序控制器系统不仅可作为单一的机电控制设备,而且作为通用的自动控制设备,也被大量地用于过程工业的自动控制。
欧姆龙最新推出的可编程控制器SYSMACCP1H,具有“高度扩张性”的端子台型一体化[1]。
与以往产品CPM2A40点输入输出型为相同尺寸,但处理速度可达到约10倍的性能。
本课题通过控制机(即为PL C)设定比例运行参数,然后控制机通过D/A转换模件发出控制变频调速器的指令,使变频调速器带动振动磨电机按输入的速度和时间运转。
基于OMRONPLC的链接通信(有通信协议),我们采用功能强大的VisualC++6.0语言来实现这种小型集散控制系统的上、下位机的通信和友好的监控界面,实现了上位机与PLC间的通信。
2.通讯软件的设计在本项目中,上位机选用计算机,下位机选用日本Omron公司的CP1H系列XA40DR-A 可编程序控制器。
在计算机外设中,RS-232串口因为其组成方式简单,编程控制方便而成为应用最为广泛的I/O通道之一。
32位下串口通信程序通常采用两种方法实现:一是利用A ctiveX控件;二是使用API通信函数。
使用ActiveX控件,程序实现非常简单,结构清晰,缺点是欠灵活;使用API通信函数的优缺点则基本上相反[2]。
VC++6.0的MSComm是Microsoft 公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法,笔者采用了这种方法。
其端口接线见附图。
2.1上位机与PLC的通讯协议HOSTlink系统使用HOSTlink通信协议进行通信,上位机具有传送优先权,总是首先发出命令并启动通信,HOSTlink通信单元收到命令交由PLC执行,然后将执行结果返回上位机,两者以帧为单位轮流交换数据。
基于VB6.0的上位机与PLC实时通信技术一、引言随着自动化技术的不断发展,PLC(可编程逻辑控制器)已经成为自动化领域中不可或缺的设备。
PLC通常用于控制工业生产线上的设备和机器,而上位机则是用来监控和管理PLC系统的设备。
众所周知,实时通信是保证PLC系统正常运行的重要因素之一。
在这篇文章中,我们将重点介绍基于VB6.0的上位机与PLC实时通信技术。
二、VB6.0简介VB6.0是微软公司于1998年发布的一款集成开发环境(IDE),它是一种编程语言,被广泛用于开发Windows平台下的应用程序。
VB6.0具有简单易学、功能丰富、开发效率高等特点,因此在工业领域得到了广泛应用。
考虑到VB6.0的这些优势,我们可以利用它来开发上位机程序,并实现与PLC的实时通信。
三、PLC实时通信技术1. 串口通信PLC通常通过串口与上位机进行通信。
在VB6.0中,我们可以利用MSCOMM控件来实现串口通信。
通过在VB6.0的界面中添加MSCOMM控件,并设置相应的串口参数(如波特率、数据位、校验位、停止位等),就可以实现与PLC的串口通信。
2. Modbus通信Modbus是一种通信协议,被广泛用于工业控制领域。
通过Modbus协议,我们可以实现上位机与PLC之间的实时通信。
在VB6.0中,我们可以使用第三方的Modbus通信库来实现Modbus通信,例如Modbus ActiveX控件等。
通过这些控件,我们可以轻松地实现Modbus通信,从而实现上位机与PLC的实时数据交换。
3. Socket通信1. 配置MSCOMM控件接下来,我们需要编写VB6.0代码,实现与PLC的串口通信。
您可以编写相应的串口通信代码,例如打开串口、发送数据、接收数据等。
示例代码如下:Private Sub Form_Load()mPort = 1 ' 串口号MSComm1.Settings = "9600,n,8,1" ' 波特率、校验位、数据位、停止位MSComm1.PortOpen = True ' 打开串口End SubPrivate Sub Command1_Click()MSComm1.Output = "010*********FF01" ' 发送数据End Sub3. 运行程序并测试您可以运行程序,并测试与PLC的串口通信是否正常。
上位机与PLC的通信与监控设计2008-7-17 8:46:00 来源:中国自动化网1 引言PLC是专为工业控制而设计的专用计算机,其体积小,具有高可靠性和很强的抗干扰能力,因而在工业控制中得到了广泛的使用。
随着工业的自动化程度的提高,对PLC的应用提出了更高的要求:更快的处理速度,更高的可靠性,控制与管理功能一体化。
控制与管理一体化也就是将计算机信息处理技术,网络通信技术应用于PLC,使PLC用于下位分散控制,用计算机提供图形显示界面,同时对下位机进行监控。
本文讨论的是上位计算机与欧姆龙CPM2A型PLC的通信与监控设计。
2 通信协议2.1 CPM2A 的通信链接方式CPM2A有三种通信联系方式:上位链接系统、同位链接系统、ComPoBus通信系统。
工厂自动化系统中常把三种系统复合起来一起使用来实现工厂自动化系统要求的多级功能。
复合型PLC网络中,上位链接系统处于最高位,负责整个系统的监控优化。
上位机与CMP2A的通信有两种方式:上位机命令与PLC通信命令。
上位机命令方式上位机处于主动,命令由上位机发往PLC。
采用上位机命令方式能方便的实现上位机对PLC的监控。
上位机与CPM2A采用RS-232端口进行通信,串口接线如图1所示。
图1 CPM2A与上位机的链接2.2 CPM2A的上位通信协议CPM2A的数据是以帧的格式发送的,当通信命令小于一帧时,发送格式如图2所示。
其中正文最多122个字符。
当命令块内容大于一帧时,由起始帧、中间帧、及结果帧组成。
起始帧最多131个字符,中间帧及结束帧最多128个字符。
起始帧由设备号、命令码、正文、FCS、和分界符构成。
中间帧有正文、FCS、分界符组成。
结束帧由正文FCS、结束符组成。
上位机每发送完一帧,在收到PLC发回的分界符后再发送下一帧。
图2 CPM2A 通信时命令块的格式命令块中的校验码FCS是8位二进制数转换成的2位ASCⅡ字符。
这8位数据是将一帧数据中校验码前的所有字符的ASCⅡ码位按连续异或的结果。
用VC实现微机与PLC在以太网中的通讯*(扬州大学信息工程学院电气工程系,扬州225009)摘要:介绍了一个使用Visual C++的Socket与OMRON PLC之间的通讯程序,并成功地应用在自动控制系统中,主要实现上位机与OMRON PLC之间的以太网通讯,并对它们之间的通讯协议作了描述,文中所介绍的通讯程序的设计方法具有一定参考价值。
关键词:可编程逻辑控制器,以太网,FINS,控制系统。
A Kind of Communication Program Between Host and OMRON PLC With VC in EthernetCao Wei SHI Wang-wang CHEN Hong(Information Engineering College of Yangzhou University, Yangzhou 225009,China)Abstract: A kind of communication program developed with VC is introduced, which is successfully applied in the automatic control system, and mainly carry out the communication between host and OMRON PLC. The communication protocol between them is dealt with in detail. The design method of communication program has some reference value.Keywords: PLC Ethernet FINS control system1、引言在分布式计算机监控系统中,PLC是常用的现场控制设备,PLC和微机之间的通讯常采用RS-232/RS-485串行通讯方式,这种方法对于数据量较大、通讯距离较远、实时性要求高的控制系统很难满足通讯需要。
vc与西门子plc网口通讯dll 近年来,随着工业自动化的快速发展,PLC(可编程逻辑控制器)成为了现代工业生产中不可或缺的重要设备。
而VC(Visual C++)作为一种广泛应用于软件开发领域的编程语言,与PLC的通讯实现了无缝对接。
而在VC与西门子PLC的网口通讯中,DLL(动态链接库)的作用尤为重要。
一、VC与PLC的通讯在PLC的控制系统中,PLC通过采集传感器和执行器的信号,进行逻辑运算,并通过输入输出口与外部设备进行通讯,实现对工业生产过程的控制。
而VC作为一种功能强大且灵活的编程语言,可以与PLC进行通信,并实现对其进行监控和控制的功能。
二、PLC网口通讯DLL的作用为了实现VC与PLC的通讯,需要使用网口通讯DLL。
DLL 是一种可被多个程序共享的动态链接库文件,用于实现程序之间的交互和功能调用。
在VC与PLC的通讯中,通过调用PLC网口通讯DLL中的函数,可以实现与PLC之间的数据交换和控制命令的传递。
三、西门子PLC网口通讯DLL的特点西门子PLC是行业中最为常见和广泛应用的PLC品牌之一。
其网口通讯DLL具有以下特点:1. 高性能:西门子PLC网口通讯DLL采用低层次的通讯协议,可以实现高速的数据传递和响应。
2. 稳定可靠:经过多次实践和测试,西门子PLC网口通讯DLL具有较高的稳定性和可靠性,能够满足各种复杂工业环境下的需求。
3. 易于使用:通过简单的函数接口,VC程序员可以轻松调用PLC网口通讯DLL中的功能,实现与PLC的通讯。
四、VC与西门子PLC网口通讯DLL的应用VC与西门子PLC网口通讯DLL的应用十分广泛。
以某工厂的生产线为例,生产线上的多个PLC设备需要与VC软件进行通讯,实现对生产过程的监控和控制。
通过调用西门子PLC网口通讯DLL中的函数,VC软件可以获取PLC的数据,实时显示在界面上,并根据需求下发控制命令,实现对生产线的自动控制。
五、VC与西门子PLC网口通讯DLL的开发为了实现VC与西门子PLC的通讯,需要进行相应的DLL开发。
三菱plc网口怎么和上位机通讯三菱PLC(可编程逻辑控制器)是一种广泛应用于工业自动化领域的控制设备,它通过网口(以太网端口)与上位机进行通讯,实现对生产过程的监控和控制。
本文将探讨三菱PLC网口如何与上位机进行通讯的方法和技巧。
一、通讯协议选择三菱PLC网口与上位机通讯的首要任务是选择合适的通讯协议。
常见的通讯协议包括MODBUS TCP、OPC、以太网/IP协议等。
需要确保上位机和PLC使用的通讯协议一致,才能实现正常的数据传输。
二、配置网络参数在实现PLC与上位机通讯之前,需要对网络参数进行配置。
通过PLC的编程软件,可以设置PLC的IP地址、子网掩码、网关等网络参数,确保PLC和上位机位于同一子网内,并且能够相互识别和通讯。
三、编写通讯程序配置网络参数后,需要在PLC的编程软件中编写相应的通讯程序。
根据选择的通讯协议,按照相应的通讯协议规范编写通讯指令。
通常,通讯程序包括建立连接、发送数据、接收数据等步骤,根据具体需求灵活运用。
四、数据处理与交互在PLC和上位机通讯过程中,数据处理和交互是非常重要的环节。
通过编程软件,可以指定PLC读取或写入哪些数据,同时也可以定义上位机发送给PLC的指令和数据。
在数据处理过程中,可以进行数据类型转换、数据解析等操作,确保数据的准确和可靠。
五、错误处理与异常情况在PLC和上位机通讯过程中,难免会遇到一些错误和异常情况。
这时,合理的错误处理机制是必不可少的。
例如,可以通过编程软件设置超时时间,当通讯超时时,可以重新发送指令或者进行其他处理。
此外,还可以通过监控网络连接状态等方式,及时发现和解决通讯故障。
六、安全性考虑在实现PLC与上位机通讯时,安全性是一个需要重视的问题。
为了确保数据的安全传输,可以采取一些安全措施,如加密通讯、访问权限控制等。
此外,还可以定期更改密码和密钥,增强系统的安全性。
七、实时监控与远程操控通过实现PLC与上位机的通讯,可以实现对生产过程的实时监控和远程操控。
欧姆龙plc与上位机网口通讯欧姆龙PLC(可编程逻辑控制器)与上位机网口通讯是现代工业领域中常见的应用。
PLC是一种用于自动化系统和生产过程控制的电子装置,而上位机则是通过计算机对PLC进行监控和管理的工具。
本文将探讨欧姆龙PLC与上位机网口通讯的重要性,通讯原理以及相关的实际应用。
通讯是工业自动化中不可或缺的一环。
在过去,PLC通常以编程硬线连接。
然而,随着信息技术的快速发展,基于网口的通讯成为了更加便捷和灵活的选择。
利用网口通讯,PLC可以通过网络与上位机之间进行数据交换,实现实时监控、远程控制等功能。
欧姆龙PLC的网口通讯采用Modbus通讯协议。
Modbus是一种开放的通讯协议,广泛应用于工控领域。
它采用简单易懂的通讯格式,支持多种不同的通讯介质,如串行口、以太网等。
欧姆龙PLC通过网口与上位机建立连接后,可以通过Modbus协议进行数据交换,实现双方之间的通信。
网口通讯给工业控制系统带来了许多便利。
首先,基于网口的通讯更加稳定可靠。
相比于硬线连接,网口通讯可以避免连接线路容易受到干扰的问题,确保了数据的可靠传输。
其次,网口通讯提供了更大的灵活性。
通过网络,PLC可以远程连接到上位机,实现远程监控和控制。
这在分布式控制系统中尤为重要。
此外,网口通讯还节省了硬线布线的成本和工作量,减少了系统维护的难度。
关于欧姆龙PLC与上位机网口通讯的实际应用,有很多案例可供参考。
例如,在工厂自动化生产线中,PLC与上位机网口通讯可以实现对生产过程的监控和调度。
上位机可以根据PLC传输的数据,实时监测生产线各个环节的状态和效率,并进行相应的调整和优化。
此外,网口通讯还可以用于数据采集和分析。
PLC可以将采集到的数据通过网口传输给上位机,上位机再进行数据处理和分析,为管理层提供决策依据。
在物联网时代,欧姆龙PLC与上位机网口通讯的重要性更加凸显。
随着工业设备的互联互通,通过网口通讯,PLC可以实现与其他智能设备之间的数据交换与共享。
要:本文介绍了用VC++和MFC开发的上位机和PLC的通讯系统,给出了系统的通讯原理和系统的软件设计方法。实践证明整个系统运行稳定,实用性和可扩展性强。 关键词:PLC;VC++;MFC;通讯模式
1 概述 PLC(Programmable Logic Controller)作为新一代工业控制器,以其高性能价格比在工业测控系统中获得了广泛应用。随着微电子及控制技术的不断发展,PLC已逐渐成为一种智能型、综合型控制器,由PLC构成的集散控制是现代工业控制的一个重要组成部分。在众多的小型集散控制系统中,若使用专业工控组态软件,如INTOUCH、FIX等,制作上位机的监控界面,而以专用的PLC通信接口模块以及其厂家推荐的DDE Server作为联系上位机和PLC的桥梁,则成本较高、投资较大。所以上位机直接与PLC的通讯是一种很好的技术方案。 在Windows环境下开发与工业PLC通讯,可以利用C并借助Windows SDK提供的应用程序接口函数来完成软件的设计,但这样开发的程序很复杂;也可以利用Visual Basic提供的通讯控件来开发串行通讯程序,程序的编制十分简单,但在现实中,许多大的应用系统都是基于VC++平台开发的,VC++是现今最复杂、但也是最强大的一种Windows应用程序开发工程软件。它在图形处理和数据库管理等方面具有较强的优势,并且用它来实现底层的通讯控制有着更快的效率,使用MFC设计的界面与Visual Basic设计的界面一样简练。因此我们利用VC++6.0提供的通讯控件MSComm,以MFC来设计界面编制程序,构造与PLC的通讯系统。系统中的PLC为西门子公司的S7-200系列CPU226型。 2 系统的通讯原理 西门子S7-226型PLC是一种模块化结构的小型PLC,具有较高的性能价格比,它带有两个RS485通讯口,而上位机即工控机的串行口是RS232,所以采用西门子公司专用的PC/PPI编程电缆作为上下位机的连接电缆,它实现了RS232和RS485的转换,并且具有隔离抗干扰功能。整个系统原理图如图1所示。 CPU226自带的通讯口RS485采用半双工通讯,只需用两根数据线TXD和RXD来发送数据和接收数据,所以通讯中没有硬件握手信号,而只能采用软件握手的通讯方式保持数据传输的同步。为了保证通讯的安全性,必须对发送的数据帧中加入帧校验码(FCS),采取的方法是:把所发送的数据帧中的数据按照字节进行异或运算后得到的FCS连同数据一起发送。接收方收到后,进行同样的运算,并把结果与FCS比较,如果两者不相等,则认为传输数据出错。对于检验到出错的数据采取放弃的措施,并立即发送反馈信号要求发送方重发数据。因此上位机和PLC发送数据的格式分别为表1和表2所示。控制命令如请求、应答等信号另有则不必加上校验码。
3 系统的软件设计 3.1系统的控制流程 整个通讯由上位机触发开始,首先由上位机发送握手信号,PLC接收到握手信号后,发送回握信号;上位机收到回握信号,则开始发送请求指令,PLC收到指令后发送数据给上位机;上位机收到数据进行校验,出错则要求PLC重发,没有错误则处理输出显示。下面图2和图3分别就是上位机和PLC的通讯程序流程图。 3.2 PLC软件设计
S7-200系列PLC有两种通讯模式:一种是点对点(PPI)通讯模式,另一种是对用户完全开放的自由口通讯模式(free port mode),PPI模式用于PLC间直接连接的通讯,可以组成网络,自由口模式应用于PLC与计算机间以及PLC间无线通讯等方面。本通讯系统采用自由口通讯模式。在通讯之前通过改写SMB30或SMB130来选择通讯模式,设定波特率以及数据长度和校验位。对于数据发送,采用专用发送指令XMT TABLE, PORT,其中TABLE为发送缓冲区的首地址,首地址中保存要发送的字节数,即数据长度,最大为255,其后的地址中保存要发送的数据,PORT指定用于发送的端口。对于数据接收,使用接收指令RCV TABLE, PORT,接收指令激活初始化或结束接收信息,通过指定端口(PORT)接收信息并存储于数据缓冲区(TABLE),数据缓冲区的第一个数据指明了接收的字节数。在西门子PLC编程语言中,共有33个中断事件,其中用于通讯口的中断事件就有6个。在通讯过程中,我们利用中断来实现发送数据和接收数据的切换,当数据发送完成,会产生发送字符中断事件,在中断程序中切换到接收状态;当接收数据完成,会产生接收信息完成中断事件,在中断程序中切换到发送状态,由于收发切换有一定的间隔,所以必须延时一段时间再发送数据,我们用定时中断来产生延时。为了产生接收信息完成中断事件,必须要对RCV指令设定结束信息作为判断接收完成的条件,通过向SMB89或SMB189中装入字符来设置,这个字符必须与上位机发送来的结束信息相吻合。 以下是PLC的部分程序: MAIN(主程序) NETWORK 1 LD SM0.1 MOVB 16#09, SMB30//初始化自由端口,选择9600波特率,8位数据,无校验 MOVB 16#A0, SMB87//RCV允许,检测信息结束字符 MOVB '@',SMB89//设定信息结束字符为'@' MOVB 10, SMB94//设定最大字符数为10 MOVB 5, SMB34 //定时中断0为5ms ATCH 0,23//接收完成事件连接到中断0 ENI//允许全局中断 NETWORK 2 RCV VB300, 0//接收数据 NETWORK 3 LD SM0.0 MOVB 16,VB200//发送16个字符 MOVD 16#4521347E, VD201//以下是实验数据 MOVW +9860, VW205 MOVD 16#12345678, VD207 MOVW +10562, VW211 MOVW +8568, VW213 MOVB 8, VB215 CALL SBR_0 INT_0 (中断0子程序) NETWORK 1//如果接收到的字符为'K',则继续接收 LDB= VB302, 'K' RCV VB300, 0 NETWORK 2 //如果接收到的字符为'A'、'C'或者'R',则发送数据 LDB= VB302, 'A' OB= VB302, 'R' OB= VB302, 'C' ATCH INT_1, 10//启动定时中断 NETWORK 3 //如果接收到的字符为“Z”,则停止延时发送 LDB= VB302, 'Z' DTCH 10 INT_1 (中断1子程序) LD SM0.0 XMT VB200, 0//发送数据 DTCH 10//关定时中断 3.3 上位机软件设计 系统中上位机的软件部分利用VC++提供的通讯控件MSComm,以MFC为基础编制通讯程序。MSComm通讯控件提供了使用RS232开发串行通讯软件的细则,它使用事件驱动或查询方式来解决开发通讯软件中遇到的问题。事件驱动是一种功能强大的处理问题的方法,对事件发生的跟踪和处理在通讯控件中是用OnComm来实现的,它包括检测和处理通讯错误以及数据的处理显示等。为了清楚了解现场的工作状态,可以在界面上实时显示摄像机观察到的内容,为此,需要对图像采集卡采集到的图像进行分析处理,这里就不再详述。图4为通讯界面。 程序设计方法如下: (1)建立项目:启动VC++6.0,利用MFC AppWizard(exe)应用向导建立一个基于对话框的应用程序ScommTest。
(2)在项目中插入MSComm控件:选择Project菜单下Add To Project子菜单中的 Components and Controls...选项,在弹出的对话框中双击Registered ActiveX Controls项,选择Microsoft Communications Control version 6.0,单击Insert按钮将它插入到Project中来,接受缺省的选项。 (3)在对话框中添加控件:向主对话框中添加通讯 控件、按钮、文本框、编辑框和组合框,其中部分属性如表3所示。
(4)初始化串口:在OnInitDialog()函数中添加初始化串口参数的代码
// TODO: Add extra initialization here if(m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE); m_ctrlComm.SetCommPort(1); //选择com1 if( !m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("cannot open serial port"); m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位 m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据 m_ctrlComm.SetRThreshold(16); //参数15表示每当串口接收缓冲区中有多于或等于15个字符时将引发一个接收数据的OnComm事件 m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0 m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据 (5)编写帧校验函数:首先在CSCommTestDlg类中加入公共成员函数说明 BYTE PLCData[30];//定义输入数据存储区 Void verfun(BYTE vdata[],int n);//定义校验函数 然后写帧校验函数: void CSCommTestDlg::verfun(BYTE vdata[],int n) { int i; BYTE sum=vdata[0]; for(i=1;i<=n-2;i++) sum^=vdata[i];//计算校验码 vdata[n]=sum;//保存帧校验码 } (6)为通讯控件IDC_MSComm1添加OnComm消息处理函数OnComm() void CSCommTestDlg::OnComm() { VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; //设置BYTE数组(8位无符号整数) CString strtemp; if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { variant_inp=m_ctrlComm.GetInput();//读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k safearray_inp.GetElement(&&k,rxdata+k);//转换为BYTE型数组 for(k=0;k { PLCData[k]=rxdata[k]; } verfun(PLCData,16);//计算校验码 if(PLCData[15]==PLCData[16]) { //接收数据正确发送确认信号