- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VBA 与PLC通讯
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 Explicit Public Declare Sub Sleep Lib kernel32 (ByValdwMilliseconds As Long) Public Declare Function SetTimer Lib user32 (ByValhwnd As Long, ByValnIDEvent As Long, ByValuElapse As Long, ByVallpTimerFunc As Long) As Long Public Declare Function KillTimer Lib user32 (ByValhwnd As Long, ByValnIDEvent As Long) As Long Public com1 As New MSCommLib.MSComm Public y0Stt As Boolean Public y0_on As Boolean Public tmrFlag As Boolean Public tmr As Long Sub runn() On Error GoToed com1.Settings = 9600,e,8,1 If com1.PortOpen = False Then com1.PortOpen = True End If tmr = SetTimer(0, 0, 500, AddressOfontimer) Exit Sub ed: MsgBox 串口打开错误! End Sub Sub stopp() If com1.PortOpen = True Then com1.PortOpen = False KillTimer 0, tmr End If End Sub Public Function ontimer() Dim a(7) As Byte Dim add As Long On
文档评论(0)