已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 VBA简介Visual Basic的应用程序版(VBA)是Microsoft公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft 可编程应用软件所共享。在没有VBA以前,一些应用软件如Excel、Word、Access、Project等都采用自己的宏语言供用户开发使用,但每种宏语言都是独立的,需要用户专门往学习,它们之间互不兼容,使得应用软件之间不能在程序上互联。拥有一种可跨越多个应用软件,使各应用软件产品具有高效、灵活且一致性的开发工具是至关重要的。VBA作为一种新一代的标准宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序设计职员仅需学习一种同一的标准宏语言,就可以转换到特定的应用软件上往,程序设计职员在编程和调试代码时所看到的是相同的用户界面,而且VBA与原应用软件的宏语言相兼容,以保障用户在代码和工作上的投资。有了VBA以后,多种应用程序共用一种宏语言,节省了程序职员的学习时间,进步了不同应用软件间的相互开发和调用能力。 2 串口通讯程序简单的串口通讯程序一般是先由上位机向下位机发送读(write)或写(read)数据命令,然后等待下位机应答;下位机接受到命令之后,首先要对数据命令进行校验,对于符合校验约束的命令下位机会将相应的数据回复到上位机,对于不符合校验约束的命令下位机或将其抛弃或回复错误信息;上位机接收到下位机的响应之后,首先要对接收到的回复信息进行校验,对不符合校验约束的数据进行异常处理,对符合校验约束的信息进行解码,解码之后的信息便是上位机从下位机获得的有效信息了。上位机向串口发送读命令之后需要等待下位机应答并读取回复信息,常用的等待有3种方式:1) 轮询式上位机向串口发送读命令之后一直等待下位机应答,通讯程序处于一个等待循环中。优点:速度快、误码率低(几乎不存在误码)。缺点:消耗CPU。(解决办法:使用Sleep()API函数)。2) 消息式消息式通讯是采用响应WINDOWS消息的办法读取串口。优点:节省CPU、误码率低。缺点:发送接收机制过于繁琐。3) 定时接收式定时接收式通讯是根据预设的定时器时间进行读取数据。优点:发送接收机制相对简单、节省CPU。缺点:误码率太高,不同的硬件需要配置不同的通讯时间参数,需要严格的校验运算。 3 EXCEL-VBA串口通讯实例软件:EXCEL。硬件:艾默生EC10 PLC。功能:通过EXCEL中的按钮控制PLC的输出继电器Y0。界面:RUN(运行通讯)、STOP(停止通讯)、Y0(Y0 ON/OFF控制)。 主程序:Option ExplicitPublic Declare Sub Sleep Lib kernel32 (ByVal dwMilliseconds As Long)Public Declare Function SetTimer Lib user32 (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As LongPublic Declare Function KillTimer Lib user32 (ByVal hwnd As Long, ByVal nIDEvent As Long) As LongPublic com1 As New MSCommLib.MSCommPublic y0Stt As BooleanPublic y0_on As BooleanPublic tmrFlag As BooleanPublic tmr As LongSub runn()On Error GoTo edcom1.Settings = 9600,e,8,1If com1.PortOpen = False Thencom1.PortOpen = TrueEnd Iftmr = SetTimer(0, 0, 500, AddressOf ontimer)Exit Subed:MsgBox 串口打开错误!End SubSub stopp()If com1.PortOpen = True Thencom1.PortOpen = FalseKillTimer 0, tmrEnd IfEnd SubPublic Function ontimer()Dim a(7) As ByteDim add As LongOn Error GoTo edIf tmrFlag = False ThentmrFlag = TrueIf y0_on = True Theny0_on = FalseIf y0Stt = True Thena(0) = &H1 a(1) = &H5 a(2) = &H0 a(3) = &H0 a(4) = &HFF a(5) = &H0 a(6) = &H8C a(7) = &H3A com1.Output = a add = 0DoDoEventsSleep 10add = add + 1If add = 100 ThenExit DoEnd IfLoop Until com1.InBufferCount = 8 Elsea(0) = &H1 a(1) = &H5 a(2) = &H0 a(3) = &H0 a(4) = &H0 a(5) = &H0 a(6) = &HCD a(7) = &HCA com1.Output = a add = 0DoDoEventsSleep 10add = add + 1If add = 100 ThenExit DoEnd IfLoop Until com1.InBufferCount = 8End IfEnd IfEnd IftmrFlag = FalseExit Functioned: MsgBox 串口错误!tmrFlag = FalseEnd Function 界面程序:Private Sub cmd1_Click()y0_on = Truey0Stt = Not y0SttEnd SubPrivate Sub cmdRun_Click()runnCheckBox1.Value = 1End SubPrivate Sub cmdStop_Click()stoppCheckBox1.Value = 0End Sub 4 结束语由上可见,VBA已经广泛应用于微软的应用软件当中,所以为更好的完善二次开发功能,众多的组态软件都在VBA支持上做了努力,世纪星组态软件开发语言已与VBA非常相似,相信在未来的版本中,世纪星将全面支持VBA,它的二次开发功能会迈上一个新的台阶。可编程序控制器(PLC)都有一个编程口。以日本三菱公司生产的PLC为例(包括FX系列和A系列),其编程口为RS-422格式,根据PLC型号不同又分为8针座编程口和25针座编程口。对于后者,可直接将SC08编程电缆将PLC的编程口和微型计算机的RS232口连接起来;对于后者,则还需要一根转换电缆将PLC 的8针座编程口和25针编程电缆相连。无论何种情况,一旦将PLC用户程序由微型计算机编程环境传到PLC 用户程序区,其编程口大多就没有被再利用。其实,这是一种浪费。也就是说,可利用此编程口实现微型计算机和PLC 的数据通讯,将PLC的工作状态纳入微型计算机管理之下。二、编程口操作命令类型与通讯端口初始化串行通讯是计算机与其它机器之间进行通讯的一种常用方法,在WINDOWS操作系统中提供了实现各种串行通讯的API函数。通过SC08编程电缆或FX232AW模块,可将微型计算机的串行通讯口RS232和PLC 的编程口连接起来,这样微型计算机就可对PLC的RAM区数据进行读、写操作。由PLC本身所具有的特性,可对PLC进行以下四种类型的操作:(1)位元件或字元件状态读操作(CMD0);(2)位元件或字元件状态写操作(CMD1);(3)位元件强制ON操作(CMD7);(4)位元件强制OFF操作(CMD8)。另外,在进行上述四类操作以前,首先要对端口进行初始化操作,即设定通讯协议(包括设置通讯波特率、数据位数、数据停止位及奇偶校验)。在WINDOWS的SDK中定义了一个结构DCB,该结构详细地说明了如何对通讯端口进行控制,所以通讯端口的初始化也是围绕着对这个结构的正确设置为中心进行的。用VC语言实现端口初始化如下:BOOL CSerial:Open(int nPort)/nPort 为微型计算机串行通讯口端口号。nport=1为端口1;nPort=2为端口2。char szPort15;DCB dob;m_hIDComDev=CreateFile(szPort, GENERIC_READGENERIC_WRITE,O,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMALFILE_FLAG_OVERLAPPED,NULL);dcb.DCB1ength=sizeof(DCB);GetCommState(m_hIDComDev,&dcb);/取得通讯资源当前设置dcb.BaudRate=9600;/设定波特率为9600dcb.ByteSize=7;/7数据位dcb.Parity=2;/偶校验dcb.StopBits=0;/设定1个停止位if(SetCommState(m_hIDComDev,&dcb)return(TRUE);else return(FALSE);/设置端口,若设置成功则返回TRUE,否则返回FALSE需要说明的是CSerial是一个用于串行通讯的类,它包含了进行串行通讯的所需的函数。除上述端口初始化成员函数Open外,还包括另两个重要成员函数:一个是endData,把数据从一个缓冲区发送到串行端口。另一个是ReadData,从端口的接收缓冲区中读入数据。其次,在每进行一次上述四类操作中的一种操作以前,还要进行握手联络。对PLC发请求讯号ENQ(代码为OX05),然后读PLC 的响应讯号。如果读到的响应讯号为ACK(代码为OX06),则表示PLC已准备就绪,等待接收通讯数据。握手联络VC语言示PLC已准备就绪,等待
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年舟山辅警招聘考试题库含答案详解
- 2023年红河州辅警招聘考试真题含答案详解(夺分金卷)
- 2023年鄂尔多斯辅警招聘考试真题及答案详解(有一套)
- 2024年威海辅警招聘考试真题及答案详解(基础+提升)
- 2024年天水辅警招聘考试题库有完整答案详解
- 2023年铜川辅警招聘考试题库及答案详解(历年真题)
- 2024年呼和浩特辅警招聘考试真题及一套参考答案详解
- 2024年大兴安岭辅警招聘考试题库完整答案详解
- 2024年六盘水辅警招聘考试真题及答案详解(易错题)
- 2024年北京辅警协警招聘考试真题含答案详解(基础题)
- GB/T 5296.5-2025消费品使用说明第5部分:玩具
- 私人交易采购合同范本
- 《机械制图》期末考试题库388题(含答案)
- 原子簇化合物
- 高中化学答题卡模板1
- 2023年高三物理第二轮总复习(全套精品)
- 高一物理人教版必修一知识点重点总复习教学课件
- 冬季应急预案
- 产品设计开发流程记录
- 流感样病例暴发疫情相关信息登记表
- 最新液化气站风险分级及隐患治理体系手册
评论
0/150
提交评论