台达PLC与VB通讯简易教程
VB 与 PLC 通讯

Private Sub MSComm1_OnComm()Select Case mEventCase comEvReceive'此处添加处理接收的代码End SelectEnd Sub'发送主代码frmMain.MSComm1.Output = bytSendByte在使用MSComm控件时需注意接收是以ASCII码或二进制码详细可参阅“人名邮电出版社”的“VISUAL BASIC 串口通讯实例导航”一书。
按你提供的C2C7FAE1看为16进制数,其10进制值为-1027081503,如何处理成-99.99要看下位机是如何约定数据的来定.Text1 = &HC2C7FAE1 或Text1 = VAL(&HC2C7FAE1)一般上下位机对数字值传递通常以16位二进制数字传递,而小数点不传递,仅乘一定倍率来实现.同时16位二进制数字按两个8位(ASCII码值)输送,上位机通过程序代码处理成10进制数.串口传送数据实质是传送ASCII码,如是8位二进制数据,其ASCII码值(10进制)为0-255。
用二进制表示为00000000 - 1111111116进制表示为00 - FF传送数据大于255,则用16位二进制(即2字节ASCII码组成)。
10进制范围-32768到+32767。
如有小数,则应由上下位机约定,不进行发送。
串口通信中数制转换必须相当重视。
以上是以二进制方式收发数据。
也可直接以ASCII码的文本方式发送数据,而字节量大。
如何实现串口数据采集,如何分析这些数据?MSCOMM控件在VB6的企业版中有,需通过部件添加方式加载。
Private Sub MSComm_OnComm()Dim bytInput() As ByteDim intInputLen As IntegerSelect Case mEventCase comEvReceiveIf blnReceiveFlag ThenIf Not frmMain.ctrMSComm.PortOpen ThenmPort = intPortfrmMain.ctrMSComm.Settings = strSetfrmMain.ctrMSComm.PortOpen = TrueEnd If'此处添加处理接收的代码frmMain.ctrMSComm.InputMode = comInputModeText '按ASCII 接收intInputLen = frmMain.ctrMSComm.InBufferCountReDim bytInput(intInputLen)bytInput = frmMain.ctrMSComm.InputText1 = bytInputText2 = Text1jscd = Len(Text1)If Left(Text1, 1) <> Chr(27) Or jscd > 25 Then 'bel3.BackColor = vbRedbel3.ForeColor = vbWhitebel3.Caption = "接收信号出错!"ElseIf Left(Text2, 1) = Chr(27) And Mid(Text2, 25, 1) = Chr(13) Thenbel3.BackColor = vbGreenbel3.ForeColor = vbBlackbel3.Caption = "接收信号正常!"If Left(Text2, 6) = Chr(27) & "R0032" And jscd = 25 ThenIf Val(fa2) >= 0 And Len(fa2) = 4 Thenfa2 = "0" & Mid(fa2, 2, 3)End IffrmMain.txtSend = Chr(27) & fa0 & fa1 & "9999" & zhenkong & fa2 & fa3 & fa4 & Chr(13)lenTxtSend = Len(txtSend)bel8.Caption = txtSendbel11.Caption = lenTxtSendIf lenTxtSend = 24 ThenCall commFasongElsebel3.BackColor = vbRedbel3.ForeColor = vbWhitebel3.Caption = "发送信号出错!"End IfblL1 = Mid$(Text2, 19, 2)If blL1 = "01" Thenrecord_jmm(0) = Val(Mid$(Text2, 21, 4)) / 10 '制品1温度ElseIf blL1 = "02" Thenrecord_jmm(1) = Val(Mid$(Text2, 21, 4)) / 10 '制品2温度ElseIf blL1 = "03" Thenrecord_jmm(2) = Val(Mid$(Text2, 21, 4)) / 10 '制品3温度ElseIf blL1 = "04" Thenrecord_jmm(3) = Val(Mid$(Text2, 21, 4)) / 10 '制品4温度ElseIf blL1 = "05" Thenrecord_jmm(4) = Val(Mid$(Text2, 21, 4)) / 10 '制品5温度ElseIf blL1 = "06" Thenrecord_jmm(5) = Val(Mid$(Text2, 21, 4)) / 10 '制品6温度End Ifrecord_jm(0) = Val(record_jmm(0))record_jm(1) = Val(record_jmm(1))record_jm(2) = Val(record_jmm(2))record_jm(3) = Val(record_jmm(3))record_jm(4) = Val(record_jmm(4))record_jm(5) = Val(record_jmm(5))blL = Mid$(Text2, 7, 6)Call Hex_bin '输出口状态鉴别blLg = Mid$(Text2, 13, 6)Call hex_bin1 '输出口故障状态鉴别txtSend = ""ElsetxtSend = ""End IfEnd IfIf Not blnAutoSendFlag And Not blnReceiveFlag ThenfrmMain.ctrMSComm.PortOpen = FalseEnd IfEnd IfEnd SelectEnd Sub以上是一段MSCOMM的ONCOMM事件代码,接收的数据按上下位机约定取出赋值于全局变量,在其它窗体进行数据记录(写入数据库).至于数据分析确如一楼说的可以海阔天空,通过数据控件及SQL语句来完成任务.以下提供MSDN参考:OnComm 常数常数值描述comEvSend 1 发送事件。
VB与PLC通讯

5.3 利用VB6.0编写通信程序命令报文中10F6H为D123的地址,04H表示要读入4个字节的数据。
校验和SUM=30H+31H+30H+46H+36H+30H+34H+03 H=174H,溢出部分不计,故SUMH=7,SUAIL=4,相应的ASCⅡ码为“37H”,“34H”。
应答报文中4个字节的十六进制数,其相应的ASCⅡ码为8个字节,故应答报文长度为12个字节。
根据PC与FX系列PLC的传输应答过程,利用VB的MSComm控件可以编写如下通信程序实现PC与FX系列PLC之间的串行通信,以完成数据的读取。
MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。
在这个例子中使用了轮询方法。
(1)通信口初始化Private Sub Initialize()MSComm1.CommPort =1MSComm1.Settings = “9600,E,7,1”MSComm1.InBufferSize = 1024MSComml.OutBuffersize = 1024MSComm1.InputLen = 0MSComml.InputMode = comInputTextMSComm1.Handshaking = comNoneMSComm1.PortOpen = TrueEnd Sub(2)请求通信与确认Private Function MakeHandshaking()As BooleanDim InPackage As StringMSComml.OutBufferCount = 0MSComml.InBufferCount = 0MSComml.OutPut = Chr(&H5)DoDoEventsLoop Until MSComml.InBufferCount = 1InPackage = MSComml.InputIf InPackage = Chr(&H6)ThenMakeHandShaking = TrueElseMakeHandshaking = FalseEnd IfEnd Function(3)发送命令报文Private Sub SendFrame ()Dim Outstring As StringMSComml.OutBufferCount = 0MSComml.InBufferCount = 0Outstrin = Chr(&H2)+″on″+″10F604″+Chr(&H3)+″74″MSComml.Output = OutstringEnd Sub(4)读取应答报文Private Sub ReceiveFrame()Dim Instring As StringDoDoEventsLoop Until MSComml.InBufferCount = 12InString = MSComml.InpultEnd Sub5.4 MSCOMM控件的属性CommPort:设定通信连接端口代号,程序必须指定所要使用的串行端口号,Windows系统使用所设定的端口与外界通信。
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函数)。
台达PLC与VB通讯简易教程

VB 實現電腦與台達PLC 的串列通信───────PLC 產品處 王乃全摘要:本文介紹了Visual Basic6編程語言,MODBUS ASCII 通信協定及通過VB 如何實現與台達DVP PLC 的通信關鍵字:Visual Basic MODBUS ASCII PLC 前言:現代的世界是一個高度自動化的世界,各式各樣的設備都可以和電腦連線,而最簡單的自動化連線方式就是使用串列通信。
VB 提供了串列通信控制項可以讓開發者開發串列通信的系統程式,功能上也提供了不少為用戶著想的簡便之處。
PLC 是現在控制領域不可缺少的部分,已經非常普及,如何簡便的與PLC 交互已經成為眾多廠商新的競爭戰場。
由此產生了人機界面、組態軟體等產品。
這些產品的產生大大簡化了對PLC 的控制,操作,使用更方便。
但也有共同的缺點:價格過高和開發性較差。
VB 作為“原始"的編程語言在這兩方面無疑有著明顯的優勢。
本文結合一個簡單的案例,用比較基礎的概念為大家展示如何通過VB 實現PC-PLC 的通信,對於初涉這個領域的工程師,也會受益與本文提供的基本概念。
一、串列通信基本概念1、 通信的種類:通常通信的形式可以分為兩種,並行通信(Parallel Communication )和串列通信(Serial Communication )。
所謂並行,既是一次傳輸量為8位;而串列一次只傳1位元。
這兩種不同的通信模式如圖平行傳輸串列傳輸 2、 串列通信常用的串列通信也有兩種。
分別位RS-232和RS-4852-1 RS-232RS-232的信號准位元乃是參考地線而來的,如圖,傳輸端參考接地端1來傳送資料;接收端則參考接地端2還原出傳送端的信號準備。
接地端1 接地端2 由圖可知,由於兩個接地端准位不一定一樣,而且很容易受到干擾,所以信號在RS-232線路傳輸時,很容易產生錯誤。
2-2 RS-485RS-485的信號傳輸方式如圖。
接地點1 接地點2RS-485的信號將被傳送出去時會分成正負兩條線路,當到達接收端後,在將信號相減還原成原來的信號;如果將原始的信號表示成(DT),而被分成的信號分別標示成(D+)及(D-),則DT= (D+)-(D-)同樣地,接收端在接收到信號後,也依據上式還原成原來的樣子。
PLC与VB6.0串口通讯案例

1、引言可编程控制器以其高可靠性,配置灵活和完善的功能,在工业控制系统中得到越来越广泛的应用。
但对于操作员所需要的报表打印、趋势图形显示、工况查寻、参数在线修改等功能,PLC却不能直接方便地提供。
所以通常采用计算机PC与PLC组成一个完整的监控系统。
本文以台安TP02系列PLC为例,讨论用Visual Basic(VB)实现PLC与上位机的通讯2、VB在通讯控件中的使用可编程控制器PLC与上位机PC之间的通信,下位机为PLC,基于其可靠性极高,主要承担控制功能,而上位PC机主要承担监察管理功能,有时兼备部分控制功能,如发出运行,停止命令。
VB语言是基于WINDOWS操作系统的功能强、易学易用、主要是面向学习对象的程序设计语言。
VB带有专门管理串行通讯的MSComm控件,只需设置几个主要参数就可以实现PLC与PC串行通讯。
要完成通信必须设置MSComm的相关属性值:(1)CommPort:设置或传回通信连接端口代号(2)Settings:设置初始化参数。
以字符串的形式设置或传回连接速度、奇偶校验、数据位、停止位等4个参数(3)PortOpen:设置或传回通信连接端口的状态(4)Input:从输入寄存器传回并移除字符(5)Output:将一个字符串写入输出寄存器(6)InputLen:指定由串行端口读入的字符串长度(7)InBu FF erCount:传回在接收寄存器中的字符数3、软硬件之间:台安TP02与上位机PC通信时,为了实现两者的通信需要配备通信线。
4、通信程序的实现4.1 通信初始化程序首先,在窗体开始设计之前,添加MSComm控件。
4.2程序编写:4.2.1 通信控件MSComm1属性设置:mPort = 1 设置端口号MSComm1.Settings = "19200,E,7,2" 设置通信参数MSComm1.InputLen = 0 设置读入字符串长度MSComm1.PortOpen = True 设置通信端口状态4.2.2 PLC运行程序:STX$ = "::"TransmitBuf$ = "01?5RUN"sum$ = CheckSum(transmitBuf$)ETX$ = Chr$(13)SXD$ = STX$ + transmitBuf$ + sum$ + ETX$MSComm1.Output = SXD$DoDoEventsLoop Until MSComm1.InBu FF erCount >= 12In1$ = MSComm1.Input4.2.3 从PLC读取资料,将寄存器内的数据资料在PC上显示以便观察监控(反应时间50ms):STX$ = "::"transmitBuf$ = "01?5MRVD000102"sum$ = CheckSum(transmitBuf$)ETX$ = Chr$(13)SXD$ = STX$ + transmitBuf$ + sum$ + ETX$MSComm1.Output = SXD$DoDoEventsLoop Until MSComm1.InBufferCount >= 20InData$ = MSComm1.InputLabel2.Caption = Mid$(InData$, 10, 4)Label3.Caption = Mid$(InData$, 14, 4)4.2.4从PLC读取资料,将RelayC0001状态通过PC显示进行监控(反应时间50ms):STX$ = "::"transmitBuf$ = "01?5MCRC0001"sum$ = CheckSum(transmitBuf$)ETX$ = Chr$(13)SXD$ = STX$ + transmitBuf$ + sum$ + ETX$MSComm1.Output = SXD$DoDoEventsLoop Until MSComm1.InBufferCount >= 13In4$ = MSComm1.InputCoil$ = Mid$(In4$, 10, 1)C1% = CInt(Coil$)Label6.Caption = C1%4.2.5 设定Relay状态,将Relay设定为ON(反应时间50ms):Dim C1 As IntegerSTX$ = "::"transmitBuf$ = "01?5SCSY00011"sum$ = CheckSum(transmitBuf$)ETX$ = Chr$(13)SXD$ = STX$ + transmitBuf$ + sum$ + ETX$MSComm1.Output = SXD$DoDoEventsLoop Until MSComm1.InBufferCount >= 12In2$ = MSComm1.Input4.2.6 PLC停止运行:STX$ = "::"transmitBuf$ = "01?5STP"sum$ = CheckSum(transmitBuf$)ETX$ = Chr$(13)SXD$ = STX$ + transmitBuf$ + sum$ + ETX$MSComm1.Output = SXD$DoDoEventsLoop Until MSComm1.InBufferCount >= 12In3$ = MSComm1.Input4.2.7 VB6.0下CheckSum函数代码如下:Private Function CheckSum(transmitBuf$)L = Len(transmitBuf$)Add = 0Dim k, sum As IntegerFor k = 1 To LTJ$ = Mid$(transmitBuf$, k, 1)Add = Add + Asc(TJ$)Next kDo While Add >= 256Add = Add - 256LoopAdd = 255 - Add + 1tempBuf$ = Hex$(Add)CheckSum = LTrim(tempBuf$)End Function5、结论PLC与上位机的结合,并通过VB6.0传送数据所构成的计算机监控系统,对于近距离传输数据的现场控制来说是一种性价比很高的解决方案。
台达PLC通讯调试方法

台达PLC通讯调试方法。
台达PLC出厂通讯格式为,ASCII,9600,7,E,1,支持功能码03H,06H,10H,如用串口调试程序向PLC(站号为1)的D0写H1770,ASCII字符为: “: 010610001770620d0a”应在串口调试程序中写入的16进制代码为: 3A 30 31 30 36 31 30 30 30 31 37 37 30 36 32 0D 0A 注意阿ASCII模式下字符0对应16进制30H,1对应16进制31H ,依次类推......你的串口协议是对的,与PLC的默认协议完全相符,PLC不用再作协议设定。
你发送的数据中有几个错误:1、尾码不是0A0D,而应是0D0A。
2、16进制数据与ASCII码混在了一起,"010*********"是ASCII码,应全部转换为16进制。
正确的字符串数据是=":"+"010*******"+LRC码("EA")+CR(0D)+LF(0A)转换为16进制="3A3031303130343030313045410D0A",你把引号内的内容复制到你的串口调试软件中,按16进制发送试试。
我已经试过了,返回数据是=":01810777" (3A 30 31 38 31 30 37 37 37 0D 0A)我是一个PLC初学者,在Micro Programmable Logic Controller FC4A使用手册中,遇到一个问题:在17-2中电缆线连接器脚位表格下,有一个“注:准备连接埠1的电缆显示,请不要插入第6和7针。
如果第6和7针连接在一起,便无法使用使用者通讯。
”但是现在所配制的电缆就是第6和7针之间的电阻值接近于0。
在WindLDR中,简单输入输出和定时、计数器可以编程并下载到PLC中正常运行,在使用TXD和RXD指令时按照手册中所述进行梯形图编程时,无法运行,接收状态码显示15,无法进行串行通讯。
vb与plc网口通讯

vb与plc网口通讯在工业自动化领域,VB和PLC之间的网口通讯是非常重要的一项技术。
VB(Visual Basic)是一种基于Windows操作系统的编程语言,而PLC(Programmable Logic Controller)是一种专门用于控制工业过程的计算机控制系统。
通过实现VB与PLC之间的网口通讯,可以实现双方之间的数据交互,从而实现工业自动化系统的监控和控制。
一、背景介绍随着工业自动化的快速发展,PLC在工业控制领域中的应用越来越广泛。
而VB作为一种高级对象化、事件驱动的编程语言,具有编写人机界面友好的优点。
因此,将VB与PLC进行网口通讯,不仅可以充分发挥PLC的控制能力,还可以利用VB的强大的界面开发能力,实现工业自动化系统的可视化管理。
二、VB与PLC网口通讯的原理VB与PLC之间的网口通讯主要基于TCP/IP协议。
PLC通过提供基于TCP/IP的通信模块,作为服务器等待VB的连接请求。
而VB则作为客户端,向PLC发起连接请求。
一旦连接成功,VB就可以通过TCP/IP协议与PLC进行双向数据交互。
三、VB与PLC网口通讯的步骤1. 确定PLC的IP地址和端口号。
在进行VB与PLC的网口通讯之前,首先需要确定PLC的IP地址和端口号。
通常情况下,这些参数会在PLC的配置软件中进行设置。
2. 使用VB的Socket控件实现通信。
在VB中使用Socket控件,可以方便地实现与PLC的网口通信。
通过设置Socket的IP地址和端口号,VB可以与PLC进行连接,并通过Socket发送和接收数据。
3. 编写VB程序与PLC进行数据交互。
通过Socket控件,VB可以发送指令给PLC,以实现对PLC的控制。
同时,VB还可以从PLC中读取数据,实现对工业自动化过程的监控。
四、VB与PLC网口通讯的应用1. 监控工业过程。
通过VB与PLC的网口通讯,可以实时获取PLC中的数据,并将这些数据可视化地呈现在VB的界面上。
基于VB的上位机与PLC的串行通信

基于VB的上位机与PLC的串行通信1 引言在现代控制系统中,pc机作为上位机负责系统管理、状态监控、信息处理和打印报表等工作,plc作为下位机进行面向现场的实时控制已成为一种典型的系统结构。
因此,pc机与plc之间的通信问题便成了系统能否实现的关键。
串行通信以其接线简单、容易实现的特点得到了广泛的应用。
visual basic编程软件简单易学、功能强大,利用它可以很方便的实现pc机与plc间的串行通讯。
本文以omron公司的cpm2a plc为例,介绍了利用vb6.0实现pc机与plc串行通讯的具体方法。
omron公司的cpm2a plc支持host-link通信协议,可以与上位计算机进行通信。
使用host-link通信协议构成的通信网络,可以很方便的实现上位pc对下位plc的实时监控。
2 原理设计2.1 系统结构系统结构如图1所示,计算机作为上位机,plc作为下位机,因omron cpm2a本身带有rs-232串口,因此,利用rs-232电缆将其与pc机的串口(com1或com2)相连,便构成了一个1:1的简单的通讯系统[1]。
图1 系统结构2.2 host-link通信协议[2]omron公司的host-link通信系统是由上位计算机(ibm pc或兼容机)通过安装在各台p lc上的host-link单元连接多台plc构成的网络。
上位机对系统中的plc进行集中管理与监控,通过与host link单元的通信,可以编辑或修改各台plc的程序,实时监控其运行过程,实现自动化系统的集散控制。
对于小型plc,也可以通过其rs 232c通信端口进行链接。
系统使用host-link通信协议进行通信,上位机具有传送优先权,总是首先发出命令并启动通信,host link单元收到命令交由plc执行,然后将执行结果返回上位机,二者以通信帧为单位,轮流交换数据。
通信时一组传送的数据称为“块”,它是命令或响应的单位,从上位机发送到host -link单元的数据块称为命令块,反过来,从host- link单元发送到上位机的数据块称为响应块。
VB与AB的PLC之间通信

VB与AB的PLC之间通讯2007-05-31 来源:西部工控网浏览:300[推荐朋友] [打印本稿] [字体:大小]VB与AB PLC之间通讯AB系列PLC一般都有专用驱动程序用于实现PLC和计算机之间通讯,如RSLINX就是专门用于做这项工作,但使用RSLINX也具有一定局限性,这里提供一个使用VB编程实现PLC和计算机之间通讯程序,使用协议是DF1,可以支持Micrologix、SLC500等系列PLC。
使用代码如下:Option ExplicitDim tns%, comunicatingPrivate Sub Command1_Click()ReDim tb%(10)Dim stIf ReadTable(0, tb%()) ThenFor st = 0 To 9 '显示结果Text1.SelText = Str(tb%(st)) + Chr(32)Next stText1.SelText = Chr(13) + Chr(10)End IfEnd SubPrivate Sub Command2_Click()ReDim tm%(5)tm%(0) = Rnd * 32768tm%(1) = Rnd * 32768tm%(2) = Rnd * 32768tm%(3) = Rnd * 32768tm%(4) = Rnd * 32768If Not WriteTable(4, tm%()) Then Text1.SelText = "写入错误!!" End SubPrivate Sub Exit_Click()Unload MeEndEnd SubPrivate Sub Form_Load()Comm1.PortOpen = TrueEnd SubPrivate Sub Form_Unload(Cancel As Integer)Comm1.PortOpen = FalseEnd SubPrivate Sub CalcCRC(mes$)Dim byt%, res&'对消息进行crc校验,然后将结果添加到消息结尾。
VB与PLC的通信

利用VB6.0 实现PC 与三菱PLC 的通信本文介绍的 PC 与三菱 FX 系列 PLC 通信,是通过 PLC 的编程口与 PC 机的串口进行的,采用编程电缆作为计算机与 PLC 通信的连线。
FX2系列PLC的编程接口采用RS-422标准,而计算机的串行口采用的是RS-232标准,因此作为实现PLC与计算机通信的接口模块FX-232AW,必须将RS-422标准转换成RS-232标准,同时在实现上述过程中采用光电隔离技术。
图1一、串口的相关知识1)串行通信的概念图2所谓“串行通信”是指外设和计算机间使用一根数据信号线(另外需要地线,可能还需要控制线),数据在一根数据信号线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。
如图2所示。
这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,当然,其传输速度比并行传输慢2)常见的串口通信规约:目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。
最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,且直接用RS232相连。
RS-232C: “1”=-3~-15;“0”=+3~+15速率:0~20000bps;一般传输距离:15m。
RS-422:采用平衡传输,平衡发送器、差动接收器,速率:10Mbps/15m;90Kbps/1200m抗干扰能力强。
DB9和DB25的常用信号脚说明由于FX 2-232AW 价格过贵所以我们选用选用MAXIM 公司的MAX202实现RS-232与TTL 之间的电平转换。
MAX202内部有电压倍增电路和转换电路,仅需+5V 电源就可工作,使用十分方便;选用MAX490实现RS-485与TTL 之间的转换。
每片MAX490有一对发送器/接收器,由于通信采用全双工方式,故需两片MAX490,另外只需外接4只电容即可。
VB与plc通讯基础

在我们平时做东西时,经常要将系统采集的数据交给计算机来处理,这样可以更方便的分对数据进行分析和管理,比如将数据绘制成各种图表和曲线可直观显示现场的情况,还可以将它存储起来,方便以后的查询。
VB是Windows下简单、易学、高效的应用软件开发工具,它里面有一个串口控件MSComm,可以很方便的与我们的微处理器的串口进行连接通信。
这个技能也应该是创新班的同学必须学会的,下面我就先教大家如何先把单片机串口发送上来的数据接收到,下一步再考虑分析数据的问题。
在这里首先要介绍一下MSComm控件的主要属性和事件。
●Commport:设置或返回串口号。
●Settings:以字符串的形式设置或返回串口通信参数,比如波特率等。
●Portopen:设置或返回串口状态,True为打开。
●InputMode:设置或返回接收数据的类型,0表示文本,1表示二进制。
●Inputlen:设置或返回一次从接收缓冲区中读取字节数,0表示所有。
●InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。
●InBufferCount:设置或返回接收缓冲区中等待计算机接收的字符数。
●Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。
●OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。
●OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。
●Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。
●DSRHolding:传回DSR脚位状态。
高为True,低为False。
●CTSHolding:传回通信端口的CTS脚位状态●CDHolding:传回通信端口的DCD脚位状态。
●Rthreshold:该属性为一阀值。
当接收缓冲区中字符数达到该值时,MSComm控件设置Commevent属性为ComEvReceive,并产生OnComm事件。
Vb与plc通信

Vb与plc通信Private Const StartFlag = &HA0Private Const EndFlag = &H23Private Sub Command1_Click()Static Db() As ByteDim t() As ByteDim i As Long, j As LongCommand1.Enabled = FalsemPort = 1MSComm1.Settings = "9600,N,8,1"MSComm1.InputLen = 0MSComm1.InputMode = comInputModeBinaryMSComm1.PortOpen = TrueReDim Db(0 To 0) As ByteDim found As LongDoDoEventst = MSComm1.InputIf UBound(t) >= 0 ThenReDim Preserve Db(LBound(Db) To UBound(Db) + UBound(t) - LBound(t) + 1) As Bytej = UBound(t)For i = UBound(Db) To LBound(Db) Step -1Db(i) = t(j)Debug.Print t(j)j = j - 1If j < LBound(t) Then Exit ForNext ifound = -1For i = LBound(Db) To UBound(Db)If Db(i) = StartFlag Thenfound = iEnd IfIf Db(i) = EndFlag And found <> -1 ThenExit ForEnd IfNext iIf i <= UBound(Db) ThenDim s As StringFor j = found To is = s & Hex(Db(j)) & " "Next jMsgBox sExit DoEnd IfEnd IfLoopCommand1.Enabled = TrueMSComm1.PortOpen = FalseEnd Subvb6.0的“工程”菜单下面选择“部件”子菜单,在控件栏选择:microsoft comm control6.0 就可以在工具箱里面有该控件了三. PC与PLC通讯程序设计分析在分析具体的VB通讯程序之前,先要介绍有关VB串口通信控件MSComm的应用知识和三菱PLC 通讯协议。
利用VB实现PLC与PC机的通讯

利用VB实现PLC与PC机的通讯【摘要】本文详细介绍了FX-2N系列PLC的通信协议,并以VB为开发工具设计界面以及接收数据从而实现了PC机与FX-2N系列的PLC的串行通讯。
在生产中可利用VB的可视化特性,采用串行通讯的方式,对整个装置的运行情况进行实时监控,达到随时掌握现场情况的目的。
【关键词】PLC;自动控制;串行通讯;VB0 引言目前,PLC在国内外已广泛应用于钢铁、石油、华工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化娱乐各个行业。
在工业用途中,液体混和装置常常会用于会用于各种场合。
PLC以卓越的可靠性和方便的可编程性广泛应用于工业控制领域。
实现PC机与PLC通信的目的是为了向用户提供诸如工艺流程图显示、动态数据画面显示、报表显示、窗口技术等多种功能,为PLC提供良好的人机界面。
PLC与计算机通信是PLC通信中最简单、最直接的一种通信方式。
与PLC通信的计算机称之为上位计算机,PLC与计算机之间的通信又叫上位通信。
PLC与计算机通信主要是通过RS-232C或RS-422接口进行的。
计算机上的通信接口是标准的RS-232接口;若PLC上的通信接口也是RS-232C 接口时,PLC与计算机连接是可以直接使用适配电缆进行连接,实现通信。
本课题便也是采用这种方法进行连接的。
1 硬件连接PC机与FX系列的PLC可经过FX2N-232-BD 通讯模块连接,下图表示它们之间的连接关系:图1 硬件连接2 FX系列PLC的通讯协议(1)数据格式FX系列的PLC采用异步格式,由1位起始位、7位数据位、1位偶检验位及1位停止位组成,波特率为9600bps,字符为ASCII码。
格式如下:(2)通讯命令FX 系列PLC有4个通讯命令,它们是读命令、写命令、强制通命令、强制断命令,如表所示。
表中X-输入继电器;Y-输入继电器;M-辅助继电器;S-状态元件;T-定时器;C-计数器;D-数据寄存器。
(3)通讯控制字符FX 系列PLC采用面向字符的传输规程,用到5个通讯控制字符,如表所示:(4)报文格式PC机向PLC发送的报文格式如下:报文格式其中STX为开始标志:02H;ETX为结束标志:03H;CMD为命令的ASCII 码:SUMH,SUML为从CMD到ETX按字节求累加和,溢出不计。
vb与plc通讯

vb与plc通讯(以西门子S7-200为例)S7-200 PLC之PPI协议通过硬件和软件侦听的方法,分析PLC内部固有的PPI通讯协议,然后上位机采用VB编程,遵循PPI通讯协议,读写PLC数据,实现人机操作任务。
这种通讯方法,与一般的自由通讯协议相比,省略了PLC的通讯程序编写,只需编写上位机的通讯程序资源S7-226的编程口物理层为RS-485结构,SIEMENS提供MicroWin软件,采用的是PPI(Point to Point)协议,可以用来传输、调试PLC程序。
在现场应用中,当需要PLC与上位机通讯时,较多的使用自定义协议与上位机通讯。
在这种通讯方式中,需要编程者首先定义自己的自由通讯格式,在PLC中编写代码,利用中断方式控制通讯端口的数据收发。
采用这种方式,PLC 编程调试较为烦琐,占用PLC的软件中断和代码资源,而且当PLC的通讯口定义为自由通讯口时,PLC的编程软件无法对PLC进行监控,给PLC程序调试带来不便。
SIEMENSS7-200PLC的编程通讯接口,内部固化的通讯协议为PPI协议,如果上位机遵循PPI协议来读写PLC,就可以省略编写PLC的通讯代码。
如何获得PPI协议?可以在PLC的编程软件读写PLC数据时,利用第三个串口侦听PLC的通讯数据,或者利用软件方法,截取已经打开且正在通讯的端口的数据,然后归纳总结,解析出PPI协议的数据读写报文。
这样,上位机遵循PPI协议,就可以便利的读写PLC内部的数据,实现上位机的人机操作功能。
软件设计系统中测控任务由SIEMENSS7-226PLC完成,PLC采用循环扫描方式工作,当定时时间到时,执行数据采集或PID控制任务,完成现场的信号控制。
计算机的监控软件采用VB编制,利用MSComm控件完成串口数据通讯,通讯遵循的协议为PPI协议。
PPI协议西门子的PPI(Point to Point)通讯协议采用主从式的通讯方式,一次读写操作的步骤包括:首先上位机发出读写命令,PLC作出接收正确的响应,上位机接到此响应则发出确认申请命令,PLC则完成正确的读写响应,回应给上位机数据。
基于VB6.0的上位机与PLC实时通信技术

基于VB6.0的上位机与PLC实时通信技术一、引言随着工业自动化的深入发展,工业控制系统的实时性和可靠性要求日益提高。
在工业控制系统中,上位机与PLC之间的通信是非常重要的一环。
而基于VB6.0的上位机与PLC实时通信技术则成为了工业控制领域的一大热点。
本文将从上位机与PLC通信的基本原理、通信协议的选择以及基于VB6.0的通信实现方法等方面展开阐述。
二、上位机与PLC通信的基本原理在工业控制系统中,上位机作为控制和监控的中心,而PLC则作为现场设备的控制器。
上位机与PLC之间的通信,主要是为了实现数据的实时交换和控制指令的下发。
通常情况下,上位机与PLC之间的通信采用的是串口通信或者以太网通信。
串口通信是指通过串行端口来实现上位机与PLC之间的通信。
在实际应用中,常用的是RS-232或者RS-485接口。
而以太网通信则是通过以太网协议来实现通信,实现数据的传输和交换。
无论是串口通信还是以太网通信,其基本原理都是通过特定的通信协议来实现数据的传输和交换。
不同的PLC厂家采用的通信协议可能有所不同。
因此在实际应用中,需要根据具体的PLC型号以及通信协议来进行相应的通信设置。
三、通信协议的选择在实际的上位机与PLC通信过程中,选择合适的通信协议是非常重要的。
常用的PLC通信协议包括Modbus、Profibus、MPI等。
这些通信协议都有其各自的特点和适用范围。
Modbus通信协议是一种较为常用的通信协议,它简单易懂,易于实现。
Modbus协议支持串口通信和以太网通信,可广泛应用于各种PLC和上位机之间的通信。
Profibus通信协议则是一种高速传输的通信协议,适用于对通信速度有较高要求的场合。
而MPI通信协议则主要应用于西门子PLC之间的通信。
在选择通信协议时,需要考虑PLC的型号、通信速度、通信距离等因素。
同时也需要考虑上位机的通信接口及通信协议的支持情况。
在实际应用中,需根据具体的要求和条件选择适合的通信协议。
VB上位机与PLC通信

随着现代信息技术的发展以及计算机网络的广泛应用,计算机通信技术已经日趋成熟。
作为传统的计算机通信方式的串行通信,由于具有线路简单、应用灵活、可靠性高等一系列优点长期以来获得了广泛的应用。
计算机串行通信在数据财经、数据通信、故障检测、计算机远程监控等方面有广泛的实用价值,特别在Windows下的串口通信可以充分利用Windows下的软件资源优势,实现多任务条件下对外部的数据传输、信息收集和处理。
在本系统中,我们采用了性能/价格比较高的计算机构成厂级的监控工作站。
在PLC与上位计算机之间采用RS-485和RS-232C标准通信接口进行通信。
在两级计算机控制系统中,最不稳定的环节就是上位机。
为了保证系统的稳定性,避免因上位机的故障导致系统控制失灵,所有采集到的信号都反馈到PLC当中。
上位机需要通过串行通信取得所需的数据信息,并通过串行通信将必要的控制信息和参数设置信息写入PLC 的数据存储区。
因此,串行通信作为上位机和下位机联系的唯一方式,在整个系统中具有非常重要的作用。
1.1上位机与PLC间的串行通信计算机与计算机或计算机与外部设备之间的数据传输和交换的方式主要有串行通信和并行通信两种方式,其中串行通信指的是数据逐位传输的方式。
由于串行通信方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。
1.1.1串行通信串行通信方式又可分为两种:同步串行通信方式和异步串行通信方式。
1.同步串行通信方式:同步串行通信是以数据块(字符块)为信息单位传送,每帧信息可以包含很多字符。
同步通信要求通信双方以相同的速率进行,而且要准证确协调,通常通过共享一个时钟或定时脉冲源保发送方和接收方准确同步。
这种通信方式的效率较高,但是对时钟同步要求非常严格,成本较高。
2.异步串行通信方式:异步串行通信以字符为信息单位传送。
双方需要遵守异步通信协议,以字符为数据单位,发送方传送字符的时间间隔不确定。
vb 网口与plc 通讯

vb 网口与plc 通讯在现代工业领域中,VB(Visual Basic)和PLC (Programmable Logic Controller)在实现设备之间的通讯中起到了重要的作用。
而VB与PLC间的网口通讯更是实现了数据传输的便捷与高效。
本文将探讨VB网口与PLC通讯的相关知识,介绍其基本原理、通讯方式以及应用案例等。
一、VB网口与PLC通讯的基本原理VB网口与PLC通讯的基本原理是通过网线将VB程序与PLC 设备连接起来,实现数据的传输与交互。
在这个过程中,VB程序可以向PLC发送命令,读取或写入PLC内部的数据,同时也可以获取PLC发送的状态或数据。
这种通讯方式具有高速、稳定的特点,为工业自动化控制提供了一种可靠的手段。
二、VB网口与PLC通讯的方式1. Modbus通讯方式Modbus通讯是一种广泛使用的通讯协议,被众多PLC设备所支持。
在VB与PLC通讯中,可以通过Modbus协议实现数据的读写。
通过这种方式,VB程序可以向PLC发送Modbus命令,读取PLC中的参数或状态,并将结果反馈给用户。
2. 自定义通讯协议除了Modbus通讯方式外,还可以根据实际需求自定义通讯协议。
采用自定义通讯协议的方式可以更加灵活地进行数据的传输与处理。
VB程序与PLC通过网口连接后,通过自定义的通讯协议进行数据的读写操作,实现设备间的通讯与控制。
三、VB网口与PLC通讯的应用案例VB网口与PLC通讯的应用案例非常丰富,下面以自动化生产线为例进行说明。
假设在一条自动化生产线上,需要对不同工位的设备进行监控和控制。
通过VB网口与PLC通讯,可以实现以下功能:1. 监测设备状态:通过读取PLC中的状态位,可以实时监测设备的运行情况,如设备是否正常工作、是否存在故障等。
当设备出现异常时,VB程序可以及时发出警报并采取相应的措施。
2. 设备控制:通过向PLC发送控制命令,可以实现对设备的远程控制。
例如,当需要停止某个工位的设备时,VB程序可以向PLC发送关闭信号,PLC接收到信号后即可停止对应设备的运行。
VB通过网口与plc通讯

VB通过网口与plc通讯在工业自动化领域,控制器之间的通讯是非常关键的一环。
而常用的通讯方式之一就是通过Visual Basic(VB)与可编程逻辑控制器(PLC)进行通讯。
通过VB与PLC的通讯,可以实现对PLC进行数据读写、实时监控和远程控制等功能。
下面将介绍一些关于VB通过网口与PLC通讯的方法和步骤。
1. 环境准备首先,需要确保环境准备工作完成。
这包括安装VB开发环境和PLC通讯驱动程序等。
在VB中,可以使用Socket或者Modbus组件来实现与PLC的通讯。
而PLC通讯驱动程序则需要根据具体使用的PLC品牌和型号进行选择和安装。
2. 确定通讯方式在进行VB与PLC通讯之前,需要确定通讯的方式。
常见的通讯方式有以太网通讯和串口通讯两种。
如果选择以太网通讯,就需要确保PLC和计算机在同一局域网内,并且能够互相访问。
而串口通讯则需要连接串口线,适用于一些没有以太网接口的老型号PLC。
3. 设置通讯参数在进行VB与PLC通讯之前,还需要设置通讯参数。
这包括PLC的通讯地址、端口号、通讯协议等。
通常可以通过PLC通讯驱动程序提供的API或者官方文档来获取这些参数,然后在VB 程序中进行设置。
4. 实现数据读写一旦通讯参数设置完毕,就可以开始实现数据读写了。
在VB 中,可以使用Socket组件来进行数据的读写。
首先需要建立与PLC的连接,然后发送数据请求并接收返回的数据。
根据PLC的不同,数据的读写方式也有所区别,常见的有读取PLC的寄存器值、写入PLC的寄存器值等。
5. 实时监控与远程控制VB通过网口与PLC通讯的一个重要应用就是实现实时监控和远程控制功能。
通过读取PLC的数据,可以实时监测工业生产过程中的各项指标,如温度、压力、流量等。
而通过写入PLC的数据,则可以对生产设备进行远程控制,如启动、停止、调节参数等。
6. 异常处理与调试在进行VB与PLC通讯的过程中,可能会出现一些异常情况,如通讯错误、连接中断等。
基于VB的台达PLC与监控计算机的串行通信实现

基于VB的台达PLC与监控计算机的串行通信实现中达电通股份有限公司----中达电通上海机电PLC产品处王乃全Implementation of Serial Communication Between Monitoring Computer and Delta PLC Based on Visual BasicWang Naiquan摘要:PLC直接与现场控制层的检测仪器仪表设备连接,是底层控制网络的组成部分,是工厂自动化系统的基石,因此实现与监控层计算机的通信对系统的优化运行有重要意义。
文章基于VB讨论台达DVP PLC与监控计算机的通信问题。
关键词:VB 通信协议可编程控制器Abstract: The PLC is a composing part of Infranet, it links to the measuring instrument and device in field control layer directly, and is the footstone of factory automation system. Therefore it is very important to realize the communication between PLC and monitoring layer computer for optimization of syste running. The paper discussed the related communication problems between Delta DVP PLC and monitoring computer based on Visual Basic.Key Words: Visual Basic Communication protocal Programable logic controller[中图分类号] TP273 [文献标识码] B 文章编号1 引言现场设备层中的设备种类繁多,有传感器、启动器、驱动器、I/O部件、变送器、阀门等等,当然也包括现场检测仪器仪表设备。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB 實現電腦與台達PLC 的串列通信───────PLC 產品處 王乃全摘要:本文介紹了Visual Basic6編程語言,MODBUS ASCII 通信協定及通過VB 如何實現與台達DVP PLC 的通信關鍵字:Visual Basic MODBUS ASCII PLC 前言:現代的世界是一個高度自動化的世界,各式各樣的設備都可以和電腦連線,而最簡單的自動化連線方式就是使用串列通信。
VB 提供了串列通信控制項可以讓開發者開發串列通信的系統程式,功能上也提供了不少為用戶著想的簡便之處。
PLC 是現在控制領域不可缺少的部分,已經非常普及,如何簡便的與PLC 交互已經成為眾多廠商新的競爭戰場。
由此產生了人機界面、組態軟體等產品。
這些產品的產生大大簡化了對PLC 的控制,操作,使用更方便。
但也有共同的缺點:價格過高和開發性較差。
VB 作為“原始"的編程語言在這兩方面無疑有著明顯的優勢。
本文結合一個簡單的案例,用比較基礎的概念為大家展示如何通過VB 實現PC-PLC 的通信,對於初涉這個領域的工程師,也會受益與本文提供的基本概念。
一、串列通信基本概念1、 通信的種類:通常通信的形式可以分為兩種,並行通信(Parallel Communication )和串列通信(Serial Communication )。
所謂並行,既是一次傳輸量為8位;而串列一次只傳1位元。
這兩種不同的通信模式如圖平行傳輸串列傳輸 2、 串列通信常用的串列通信也有兩種。
分別位RS-232和RS-4852-1 RS-232RS-232的信號准位元乃是參考地線而來的,如圖,傳輸端參考接地端1來傳送資料;接收端則參考接地端2還原出傳送端的信號準備。
接地端1 接地端2 由圖可知,由於兩個接地端准位不一定一樣,而且很容易受到干擾,所以信號在RS-232線路傳輸時,很容易產生錯誤。
2-2 RS-485RS-485的信號傳輸方式如圖。
接地點1 接地點2RS-485的信號將被傳送出去時會分成正負兩條線路,當到達接收端後,在將信號相減還原成原來的信號;如果將原始的信號表示成(DT),而被分成的信號分別標示成(D+)及(D-),則DT= (D+)-(D-)同樣地,接收端在接收到信號後,也依據上式還原成原來的樣子。
如果線路受到干擾,兩條線路的信號分別為(D+)+Noise (D-)+Noise。
接收端還原信號為(DT)= [(D+)+Noise]-[ (D-)+Noise]與先前結果一樣,所以RS-485可以有效的防止雜訊的干擾。
二、Visual Basic基本概念1、VB是微軟的視窗軟體,提供了很多介面成員。
物件、屬性、事件、方法就是四個重要的介面。
2、VB常用控制項。
2-1標籤控制項此控制項專用於顯示文字,數位用,顯示如圖2-2 按鈕控制項此控制項使用率很高,提供一個供系統用戶操作用的按鈕2-3 計時器控制項此控制項的最大作用在於固定的時間內會執行所設置的程式碼一次。
VB提供了大量的控制項,在此不一一敍述。
三、MScomm控制項要完成VB與PLC等串列設備的通信,MScomm控制項是一個很好用的控制項。
所以在此有必要對MScomm控制項做一個較為詳細的說明1、MScomm非標準控制項,要手動添加,步驟如下:1-1選擇功能表的【工程】1-2 選擇【部件】1-3 在彈出的對話方塊中做如圖選擇1-4在部件選項卡就會出現MScomm控制項2、基本屬性電腦通信口選擇通信參數設置PortOpen通信口是否打開Input收到的字元Output發送的字元四、MODBUS ASCII 。
Modbus 分為ASCII 和RTU 兩種,ASCII 採用的格式和校驗相對簡單,本文採用ASCII 格式,並僅對使用的功能碼進行說明,更多的資訊,請參看協定的詳細說明 1、通信格式STX 起始字元 “:"(3AH ) ADR 1 ADR 0 通信地址(站號)採用2個字元CMD 1 CMD 0 功能碼。
採用2個字元 DATA (0) DATA (1) ……….DATA (n-1) 資料項目LRC CHK 1 LRC CHK 0 LRC 校驗碼。
採用2個字元END 1 END 0結束字元。
採用2個字元。
END 1 = CR (0DH ),END 0 = LF (0AH )2、 LRC 演算法ADR H+CMD H+DATA H ,然後取2的補數3、功能碼05, 寫入線圈 01, 讀線圈狀態 格式 例子(十六進位)字頭 3A 站號 01 功能碼 05 地址0500 寫入狀態 FF 00 LRC 碼 F606, 寫入單個字寄存器 格式 例子(十六進位)字頭3A格式 例子 (十六进制)字头 3A 站号 01 功能码 01 起始地址 06 14 读取数目 00 25LRC 码BF站號01功能碼06寄存器位址0600寫入的資料1234LRC 校驗碼AD五、VB與PLC通信的實現1、控制要求a、控制PLC的啟動、停止,並顯示運行狀態(綠色為運行,紅色為停止)b、能夠用交替型按鈕控制Y0,Y1。
並用指示燈顯示Y0,Y1狀態。
(綠色為運行,紅色為停止)c、能夠對D256,D512兩個寄存器進行數值寫入的操作2、思路:a、PLC啟動停止的標誌位元為M1072,查DVP協議,知道位址為H0C30。
按功能碼01操作b、同樣Y0,Y1的地址分別為H0500,H0501。
寫入FF00為ON,0000為OFF,按功能碼05操作c、D256,D512位址分別為H1100,H1200,按功能碼06操作即可3、VB介面的設計如圖用按鈕控制PLC的啟動停止,Y0,Y1的ON/OFF以及D256,D512寫完資料的發送用Shape元件做指示燈,表示PLC的運行狀態和Y的狀態。
用timer元件不停的讀取M1072的狀態,以判斷PLC的運行情況用MScomm控制項實現PC與PLC的通信4、代碼構成1)、LRC演算法校驗的實現Public Function LRC(str As String) As Stringc = 0l = Len(str)For c = c + 1 To lc_data = Mid$(str, c, 2)d_lrc = d_lrc + Val("&H" + c_data)c = c + 1Next cIf d_lrc > &HFF Thend_lrc = d_lrc Mod &H100End Ifh_lrc = Hex(&HFF - d_lrc + 1)If Len(h_lrc) > 2 Thenh_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)End IfLRC = h_lrcEnd Function2)、運行的一開始就判斷PLC的狀態,並設置標誌位元'初次運行打開串口,並顯示PLC運行狀態Private Sub Form_Load()Dim s1 As StringDim s2 As StringDim s22 As StringDim s3 As StringDim s4 As StringMSComm1.PortOpen = Trues2 = "01010C300001"s22 = LRC(s2)s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)MSComm1.Output = s1s3 = MSComm1.Inputs4 = Mid$(s, 6, 8)If s4 = "0C30FF00" Thenplc = 1 'PLC為運行標誌Elseplc = 0 'PLC為停止標誌End IfEnd Sub3)、下面一段為用指示燈表示PLC的運行狀態Private Sub Timer5_Timer()Dim s1 As StringDim s2 As StringDim s22Dim s3 As StringDim s4 As Strings2 = "01010C300001"s22 = LRC(s2)s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)MSComm1.Output = s1s3 = MSComm1.Inputs4 = Mid$(s3, 8, 2)If s4 = "31" Thenplc = 1 'PLC為運行標誌Else: If s4 = "30" Then plc = 0 'PLC為停止標誌End IfIf plc = 1 ThenLabel2.Caption = "PLC正在運行......"Shape1.FillColor = RGB(0, 255, 0) 'greenElseLabel2.Caption = "PLC已經停止"Shape1.FillColor = RGB(255, 0, 0) 'redEnd IfEnd Sub4)、PLC的啟動與停止'啟動PLCPrivate Sub start_Click()Dim strout As StringTimer5.Enabled = Falsestr = "00050C30FF00" 'M1072 為PLC啟動停止標誌位元。
查地址表,M1072為OC30.FF00為置ON,0000為置OFF'以上都是固定格式,要牢記LRCC = LRC(str) '計算 str的lrc校驗碼strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲傳送之資料。
13為D,10為A MSComm1.Output = stroutTimer5.Enabled = TrueEnd Sub'停止PLCPrivate Sub stop_Click()Dim strout As StringTimer5.Enabled = Falsestr = "00050C300000"LRCC = LRC(str)strout = ":" + str + LRCC + Chr$(13) + Chr$(10)MSComm1.Output = stroutTimer5.Enabled = TrueEnd SubY0,Y1的ON/OFF與PLC啟動/停止的控制方式相同,指示燈的表示方式也相同。