VB与AB的PLC之间通讯

合集下载

VB与PLC通信程序(欧姆龙PLC).doc

VB与PLC通信程序(欧姆龙PLC).doc

VB与PLC通信程序(欧姆龙PLC)关于VB的MSCOMM控件可参考相关资料。

通信程序摘要如下:(1)初始化程序mport=2 ’选择COM2Mscomm1.Settings=”9600,N,8,2”’设置通信参数Mscomm1.Inputlen=0 ’读入接收缓冲区全部字符Mscomm1.OutbufferSize=256 ’设置发送缓冲区大小Mscomm1.InbufferSize=512 ’设置接收缓冲区大小Mscomm1.PortOpen=True ’打开COM2(2)发送命令程序比如读取节点号03的PLC中IR000到IR009的内容,并放到tag1字符串变量中,此时有:Dim Command, node, begin, number as stringDim Answerlen as integernode=”03”’节点号Command=”RR”’命令为读IR区begin=”0000”’从IR000开始number=10 ’读取长度Answerlen=51 ’计算接收字符串长度进行命令发送和接收应答处理:Dim FCS, I as integerDim s ,f as strings=”@”+node+Commad+begin+numberFCS=0For i=1 to Len(s)FCS=FCS xor Asc(Mid$(s,i,1) ) ’帧校验码FCSNext if=Hex$(FCS)If Len(f)=1 Then f=”0”+fCommfrm.MSComm1.Output=s + f + ”*” + CHR$(13) ’命令帧发送DoDummy=DoEvents()Loop Untill Commfrm.MSComm1.InbufferCount >= Answerlen ’等待应答帧Do tag1= Commfrm.MSComm1.InputLoop Untill Commfrm.MSComm1.InbufferCount=0 ’读完应答帧上述程序具有相当的通用性,对于其它设备不同的只是各自的数据帧格式,因而只需做相应少量修改即可。

vb与plc通讯(以西门子S7-200为例)

vb与plc通讯(以西门子S7-200为例)

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则完成正确的读写响应,回应给上位机数据。

VB与AB的PLC之间通讯

VB与AB的PLC之间通讯

VB与AB的PLC之间通讯 31VB与AB的PLC之间通讯;VB与ABPLC之间通讯;AB系列PLC一般都有专用驱动程序用于实现PLC;OptionExplicit;Dimtns%,comunicating;PrivateS ubCommand1_Click;ReDimtb%(10);Dimst;IfReadTable(0,tb%())Then;Fors t=0To9'显示结果;TexVB与AB的PLC之间通讯VB与ABPLC之间通讯AB系列PLC一般都有专用驱动程序用于实现PLC和计算机之间通讯,如RS LINX就是专门用于做这项工作,但使用RSLINX也具有一定局限性,这里提供一个使用VB编程实现PLC和计算机之间通讯程序,使用协议是DF1,可以支持Mi crologix、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 = "写入错误!!" E nd 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校验,然后将结果添加到消息结尾。

AB PLC 和VB客户端的通讯

AB PLC 和VB客户端的通讯

vba实现将记录集输出到Excel模板'************************************************'** 函数名称: ExportTempletToExcel'** 函数功能: 将记录集输出到Excel 模板'** 参数说明:'** strExcelFile 要保存的Excel 文件'** strSQL 查询语句,就是要导出哪些内容'** strSheetName 工作表名称'** adoConn 已经打开的数据库连接'** 函数返回:'** Boolean 类型'** True 成功导出模板'** False 失败'** 参考实例:'** Call ExportTempletToExcel(c:\\text.xls,查询语句,工作表1,adoConn) '************************************************Private Function ExportTempletToExcel(ByVal strExcelFile As String, _ ByVal strSQL As String, _ByVal strSheetName As String, _ByVal adoConn As Object) As BooleanDim adoRt As ObjectDim lngRecordCount As Long ' 记录数Dim intFieldCount As Integer ' 字段数Dim strFields As String ' 所有字段名Dim i As IntegerDim exlApplication As Object ' Excel 实例Dim exlBook As Object ' Excel 工作区Dim exlSheet As Object ' Excel 当前要操作的工作表On Error GoTo LocalErrMe.MousePointer = vbHourglass'// 创建ADO 记录集对象Set adoRt = CreateObject(ADODB.Recordset)With adoRt.ActiveConnection = adoConn.CursorLocation = 3 'adUseClient.CursorType = 3 'adOpenStatic.LockType = 1 'adLockReadOnly.Source = strSQL.OpenIf .EOF And .BOF ThenExportTempletToExcel = FalseElse'// 取得记录总数,+ 1 是表示还有一行字段名名称信息lngRecordCount = .RecordCount + 1intFieldCount = .Fields.Count - 1For i = 0 To intFieldCount'// 生成字段名信息(vbTab 在Excel 里表示每个单元格之间的间隔)strFields = strFields & .Fields(i).Name & vbTabNext'// 去掉最后一个vbTab 制表符strFields = Left$(strFields, Len(strFields) - Len(vbTab))'// 创建Excel实例Set exlApplication = CreateObject(Excel.Application)'// 增加一个工作区Set exlBook = exlApplication.Workbooks.Add'// 设置当前工作区为第一个工作表(默认会有3个)Set exlSheet = exlBook.Worksheets(1)'// 将第一个工作表改成指定的名称 = strSheetName'// 清除“剪切板”Clipboard.Clear'// 将字段名称复制到“剪切板”Clipboard.SetText strFields'// 选中A1单元格exlSheet.Range(A1).Select'// 粘贴字段名称exlSheet.Paste'// 从A2开始复制记录集exlSheet.Range(A2).CopyFromRecordset adoRt'// 增加一个命名范围,作用是在导入时所需的范围s.Add strSheetName, = & strSheetName & !$A$1:$ & _ uGetColName(intFieldCount + 1) & $ & lngRecordCount'// 保存Excel 文件exlBook.SaveAs strExcelFile'// 退出Excel 实例exlApplication.QuitExportTempletToExcel = TrueEnd If'adStateOpen = 1If .State = 1 Then.CloseEnd IfEnd WithLocalErr:'*********************************************'** 释放所有对象'*********************************************Set exlSheet = NothingSet exlBook = NothingSet exlApplication = NothingSet adoRt = Nothing'*********************************************If Err.Number <> 0 ThenErr.ClearEnd IfMe.MousePointer = vbDefaultEnd Function'// 取得列名Private Function uGetColName(ByVal intNum As Integer) As StringDim strColNames As StringDim strReturn As String'// 通常字段数不会太多,所以到26*3 目前已经够了。

plc网口vb 通讯

plc网口vb 通讯

plc网口vb 通讯PLC网口VB通讯——实现智能化生产控制的利器随着工业自动化的快速发展,PLC(Programmable Logic Controller,可编程逻辑控制器)已经成为现代生产线上不可或缺的设备之一。

而要使PLC实现与计算机的通讯,以实现更高级别的控制和监测功能,则需要借助VB(Visual Basic)编程语言。

本文将介绍PLC网口VB通讯的基本原理以及其在实际应用中发挥的重要作用。

一、PLC网口VB通讯基本原理PLC网口VB通讯主要是通过以太网接口实现的。

PLC通过网口与上位机进行通信,由VB程序控制上位机与PLC之间的数据交换。

具体而言,PLC网口VB通讯需要解决以下几个关键问题:1. 协议选择:PLC通常支持多种通信协议,例如MODBUS、OPC等。

在选择协议时需要根据具体应用场景和PLC型号进行判断,并根据协议规范进行编程。

2. IP地址设置:为了确保上位机与PLC能够互相识别和连接,需要为PLC和上位机分配合适的IP地址,并设置子网掩码和默认网关等网络参数。

3. 数据格式与交换:在PLC网口VB通讯中,数据格式的定义和交换非常关键。

通常情况下,可以利用VB编程实现数据的读取、写入和解析,以实现与PLC之间的数据交互。

二、PLC网口VB通讯的实际应用PLC网口VB通讯在许多领域都得到了广泛的应用,为企业的生产控制和监测提供了可行的解决方案。

下面以几个实际案例进行介绍:1. 智能制造:在智能制造领域,PLC网口VB通讯可以实现生产流程的高度自动化和集成化管理。

通过与上位机的通讯,PLC 可以接收指令进行实时控制,并将生产数据反馈给上位机,以便进行数据分析和优化。

2. 物流仓储:在物流仓储领域,PLC网口VB通讯可以实现仓库的自动化控制和货物追踪。

利用上位机与PLC进行通讯,可以实时监测仓库存货情况,并对货物进行分类、分拣和入库等操作。

3. 能源管理:在能源管理领域,PLC网口VB通讯可以实现对能源设备的监控和控制。

ABPLC通讯设置

ABPLC通讯设置

ABPLC通讯设置ABPLC通讯设置Logix 1500 Plc(RS232口)与PC通讯RS232PLCPC(9D插头)3开始—〉〉程序—〉〉Rockwell software —〉〉RSLinx—〉〉RSLinx菜单Communictions—〉〉Configure Drivers 显示如下:创建新设置,“RS-232 DF1 devices”选择“AB_DF1-1”设置串口,及Device,鼠标点击“自动配置”测试成功后界面PLC以太网模块通讯设置下一步RSLinx—〉communictions—〉RSWho,打开PLC编程软件,开始—〉〉程序—〉〉Rockwell software —〉〉RSLinx—〉〉RSLlogix 500 English新建配置PLC的CPU型号双击“IO Configuration”,添加PL其他模块双击“Channel Configuration”检查通讯设置界面1界面2界面3界面4PLC在线测试测试成功画面VB于ABPLC之间的DDE设置判断RSLinx是否运行开始—〉〉程序—〉〉Rockwell software —〉〉RSLinx—〉〉RSLinx打开的界面查看PLC寄存器的值:菜单Communictions—〉〉RSWho 显示如下:鼠标右键点击“01,SLC-5/04,UNTITLED”,再点“Data Monitor”,显示显示PLC内N7寄存器的实时值(事先要定义N7)建立DDE连接:鼠标右键点击“01,SLC-5/04,UNTITLED”,再点“Configure New DDE/OPC”,显示更改DDE默认名称“UNTITLED”为VB程序引用的实际名字。

VB程序设置:<1>先判断“RSLINX.EXE”是否运行On Error GoTo ErrFlagAppActivate "RSLinx"Exit SubErrFlag:Call Shell("C:\Program Files\Rockwell Software\RSLINX\RSLINX.EXE", vbHide)<2>建立DDE连接Label1.LinkTopic ="RSLINX|UNTITLED" ‘DDE名字Label1.LinkItem = "N7:0" ‘N7寄存器Label1.LinkMode = 1 ‘1:Automatic。

AB_PLC_和VB客户端的通讯

AB_PLC_和VB客户端的通讯

AB PLC 和VB客户端的通讯1、授权AB PLC OPC方式和第三方软件进行通讯,必须要先授权。

当前使用电脑上安装了AB PLC相关软件后,可以如下图所示菜单路径下找到“Move Activation –32 Bit”菜单项。

点击运行会弹出如下对话框:现将授权软盘插入到软驱,点击“OK”按钮将授权文件拷贝到电脑硬盘上,授权成功,会弹出如下对话框,以确认RSLINX.EXE应用软件已经授权成功。

2、RSLinx.EXE软件设置。

设置好RSLinx.exe应用软件授权后,运行RSLogix 500软件,设置好AB PLC串口通讯参数或网口通讯参数,下载到PLC。

测试运行确保PLC参数设置正确,PLC能和编程软件已经能够正确通讯。

然后运行RSLinx.软件,选择Communictions-RSWho菜单项,有能和当前上位机正常通讯PLC将会显示如下窗体列表里:列表里选中要通讯PLC,选择Station – Data Monitor菜单项,检查是否已经能够将数据正确采集上来。

3、OPC服务器配置确认RSLinx软件已经能够正确和PLC进行通讯后,就可以开始配置OPC服务器了。

首先必须先打开一个DDE/OPC工程,可以选取File – Open Project选项,来“Open DDE Projiect”对话框,选取打开一个已经建立好DDE工程。

还没有建立过DDE/OPC工程,则会弹出如下对框,要求用户输入要建立工程名,这样建立好工程名就添加到了工程列表框中。

打开一个OPC工程后,就可以正式开始配置OPC 服务器了,选取DDE/OPC-Topic configuration菜单项,建立一个OPC服务主题。

弹出如下窗体中,选取要配置成OPC服务器对应选项,点击“New”按钮,编辑一个OPC服务器主题名称(可取任意名称)。

切换到“Data Collection”页,Processer Type下拉框,选择正确PLC处理器类型。

AB-PLC之间通讯

AB-PLC之间通讯

AB-PLC之间通讯AB-PLC之间进行通讯比较常用的方法有两种:第一种:使用生产者/消费者,通过设置数据类型方式进行通信第二种:使用MSG指令,进行通信两种通讯方式有什么区别?在生产者/消费者通信中,生产者数据所在的plc必须在消费者plc网络组态中,而使用MSG指令进行数据交换则没有此项要求。

使用生产者-消费者数据通讯:所谓消费者就是需要接收的数据、主动读取数据的那一方,生产者就是被读取数据、发送数据那一方。

下面定义plc-a为生产者plc,plc-b为消费者plc,通讯步骤如下:(1)plc-a控制器标签中定义需要发送的数据区,数据类型为生产型;plc-b控制器标签中定义接收数据区,数据类型为消费(2)设置plc-b中消费者标签的连接属性,在remote data属性中填写对应于plc-a中生产者变量名称即可PS:这里需要注意,标签必须创建在控制器区域,全局数据区;传送数据的标签不能超过500个字节,如果是通过ControlNet网络数据交换,数据标签则不能超过480个字节,这是受限于ControNet网络的数据包的尺寸;如果Produce几个数据到同一个控制器,将几个数据合并在一个用户自定义结构的数据标签中,这样可以减少连接数,合并后的数据会用相同的RPI;标签只能使用DINT和REAL,或它们的数组,或者用户自定义结构数据,因为对外操作数据必须是32位的;如果有SINT和INT的数据需要传送,将它们组合在用户自定义结构中传送;Produce的标签和Consume的标签数据格式必须一致,才能确保数据的准确。

使用MSG指令通讯:(1)建立数据类型为MESSSAGE结构的标签,每一条MSG指令调用之前都要分配一个标签,这个标签将记录本条指令的通讯组态和执行情况只有为指令分配了标签后,点击方可进入组态界面:说明:•对控制器以外的各种设备传送信息,它的信息类型如下所列:-CIP Data Table Read/Write 对ControlLogix控制器进行读写-PLC5 Typed Read/Write 对PLC5处理器进行读写-PLC5 Word Range Read/Write 对类似PLC5处理器地址进行读写-Block Transfer Read/Write 对块传送模块进行读写-PLC2 Unprotected Read/Write 对PLC2处理器及类似PLC2地址(寄存器地址)的设备进行读写。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB与AB的PLC之间通讯
2007-05-31 来源:西部工控网浏览:300
[推荐朋友] [打印本稿] [字体:大小]
VB与AB PLC之间通讯
AB系列PLC一般都有专用驱动程序用于实现PLC和计算机之间通讯,如RSLINX 就是专门用于做这项工作,但使用RSLINX也具有一定局限性,这里提供一个使用VB编程实现PLC和计算机之间通讯程序,使用协议是DF1,可以支持Micrologix、SLC500等系列PLC。

使用代码如下:
Option Explicit
Dim tns%, comunicating
Private Sub Command1_Click()
ReDim tb%(10)
Dim st
If ReadTable(0, tb%()) Then
For st = 0 To 9 '显示结果
Text1.SelText = Str(tb%(st)) + Chr(32)
Next st
Text1.SelText = Chr(13) + Chr(10)
End If
End Sub
Private Sub Command2_Click()
ReDim tm%(5)
tm%(0) = Rnd * 32768
tm%(1) = Rnd * 32768
tm%(2) = Rnd * 32768
tm%(3) = Rnd * 32768
tm%(4) = Rnd * 32768
If Not WriteTable(4, tm%()) Then Text1.SelText = "写入错误!!"
End Sub
Private Sub Exit_Click()
Unload Me
End
End Sub
Private Sub Form_Load()
Comm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
Comm1.PortOpen = False
End Sub
Private Sub CalcCRC(mes$)
Dim byt%, res&
'对消息进行crc校验,然后将结果添加到消息结尾。

byt% = 3
Do
res& = res& Xor Asc(Mid(mes$, byt%, 1))
rotate res&
If Asc(Mid(mes$, byt%, 1)) = 16 Then
mes$ = Left$(mes$, byt%) + Chr(16) + Right$(mes$, Len(mes$) - byt%)
byt% = byt% + 1
End If
byt% = byt% + 1
Loop While (byt% <= Len(mes$) - 2)
res& = res& Xor 3
rotate res&
mes$ = mes$ + Chr(res& Mod 256) + Chr(Int(res& / 256))
End Sub
Function ReadTable(start, n%())
Dim st, com$
'从PLC CIF数据表中读取数据, Micrologix=N7 SLC500=N9
If comunicating Then Exit Function
comunicating = True
m1.InputLen = 0 '清缓冲区
com$ = m1.Input
'构建消息
com$ = Chr(16) + Chr(2) + Chr(0) + Chr(0)
com$ = com$ + Chr(1) + Chr(0) + Chr(tns%) + Chr(0)
com$ = com$ + Chr(start) + Chr(0) + Chr(UBound(n%) * 2)
com$ = com$ + Chr(16) + Chr(3)
'进行crc计算并附加到结尾。

CalcCRC com$
tns% = tns% + 1
If tns% = 256 Then tns% = 0
'发送命令
m1.Output = com$
'等待确认
st = Timer
Do
DoEvents
Loop While st + 3 > Timer And m1.InBufferCount < 2 '从缓冲中移除确认
m1.InputLen = 2
com$ = m1.Input
If com$ <> Chr(16) + Chr(6) Then
comunicating = False
Exit Function
End If
st = Timer '等待应答
Do
DoEvents
Loop While st + 3 > Timer And m1.InBufferCount < 12 + (UBound(n%)
* 2)
'超时则退出
If m1.InBufferCount < 12 + (UBound(n%) * 2) Then comunicating = False
Exit Function
End If
'发送确认
m1.Output = Chr(16) + Chr(6)
'到应答
m1.InputLen = 0
com$ = m1.Input
st = 3
Do
If Mid(com$, st, 1) = Chr(16) Then
com$ = Left(com$, st) + Right(com$, Len(com$) - 1 - st)
End If
st = st + 1
Loop While st < Len(com$) - 4
'保存结果
For st = 0 To UBound(n%) - 1
n%(st) = 256 * Asc(Mid(com$, 2 * st + 10, 1)) + Asc(Mid(com$, 2 * st + 9,
1))
Next st
ReadTable = True
comunicating = False
End Function
Private Sub rotate(res&)
Dim bitout%, shift%
For shift% = 1 To 8
bitout% = res& Mod 2
res& = Int(res& / 2)
If bitout% Then
res& = res& Xor &H1000A001
res& = res& - &H10000000
End If
Next shift%
End Sub
Function WriteTable(start, n%())
Dim st, com$
'写到PLC CIF数据表, Micrologix=N7 SLC500=N9
If comunicating Then Exit Function
comunicating = True
m1.InputLen = 0
com$ = m1.Input
com$ = Chr(16) + Chr(2) + Chr(0) + Chr(0)
com$ = com$ + Chr(8) + Chr(0) + Chr(tns%) + Chr(0)
com$ = com$ + Chr(start) + Chr(0)
For st = 0 To UBound(n%)
com$ = com$ + Chr(n%(st) Mod 256) + Chr(Int(n%(st) / 256)) Next st
com$ = com$ + Chr(16) + Chr(3)
tns% = tns% + 1
If tns% = 256 Then tns% = 0
CalcCRC com$
m1.Output = com$
st = Timer
Do
DoEvents
Loop While st + 3 > Timer And m1.InBufferCount < 2 m1.InputLen = 2
com$ = m1.Input
If com$ <> Chr(16) + Chr(6) Then
comunicating = False
Exit Function
End If
st = Timer
Do
DoEvents
Loop While st + 3 > Timer And m1.InBufferCount < 12
m1.Output = Chr(16) + Chr(6) If m1.InBufferCount < 12 Then comunicating = False
Exit Function
End If
m1.Output = Chr(16) + Chr(6) WriteTable = True
comunicating = False
End Function
第1页/共1页。

相关文档
最新文档