VB与PLC通信程序(欧姆龙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与欧姆龙OPC服务器编程实例(读取PLC100个内存的vb源代码)

vb与欧姆龙OPC服务器编程实例(读取PLC100个内存的vb源代码)

Option ExplicitOption Base 1 ' All OPC Automation Arrays start with 1Dim MyOPCServer As OPCServer ' OPCServer ObjectDim MyGroups As OPCGroups ' OPCGroups Collection ObjectDim WithEvents MyGroup As OPCGroup ' OPCGroup ObjectDim MyItems As OPCItems ' OPCItems Collection ObjectDim MyItemServerHandles() As Long ' Server Handles for ItemsDim MyTID As Long ' Transaction ID for asynchronous calls Private Sub Command1_Click()Dim Errors() As LongCall MyItems.Remove(100, MyItemServerHandles, Errors)MyGroups.RemoveAllSet MyGroup = NothingSet MyGroups = NothingMyOPCServer.DisconnectSet MyOPCServer = NothingEnd SubPrivate Sub Command2_Click()PFAsyncWriteCommandEnd SubPrivate Sub Command3_Click()Form_LoadEnd SubPrivate Sub Form_Load()MyTID = 1Set MyOPCServer = New OPCServerCall MyOPCServer.Connect("OMRON.OPC.2")Set MyGroups = MyOPCServer.OPCGroupsMyGroups.DefaultGroupUpdateRate = 500MyGroups.DefaultGroupIsActive = TrueSet MyGroup = MyGroups.Add("Group1")MyGroup.IsSubscribed = TrueMyGroup.IsActive = TrueMyGroup.UpdateRate = 500Dim ErrorFlag As BooleanDim ItemObj As OPCItemDim ItemIDs(100) As StringDim ItemClientHandles(100) As LongDim Errors() As LongErrorFlag = FalseSet MyItems = MyGroup.OPCItemsDim m As IntegerFor m = 0 To 3Text1(m).ForeColor = vbRedText1(m).FontSize = 15Text2(m).ForeColor = vbRedText2(m).FontSize = 15NextFor m = 4 To 99Text1(m).ForeColor = vbBlueText1(m).FontSize = 15NextFor m = 1 To 100ItemIDs(m) = "Device.Group1.Tag" & CStr(m)ItemClientHandles(m) = mNextCall MyItems.AddItems(100, ItemIDs, ItemClientHandles, MyItemServerHandles, Errors)End SubPrivate Sub MyGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)On Error GoTo ErrorHandler '订阅方式回馈信息存储Dim i As LongFor i = 1 To NumItemsIf ClientHandles(i) > 0 And ClientHandles(i) < 101 ThenIf Qualities(i) = 192 Thendata1(ClientHandles(i)) = ItemValues(i)Else' MsgBox GetQualityText(Qualities(i))End IfElseMsgBox "DataChange Item " + Str$(i) + " has invalid Client Handle ", vbCriticalEnd IfNextExit SubErrorHandler:MsgBox Err.Description + Chr(13) + "OnDataChange", vbCritical, "ERROR"End SubPrivate Sub Timer1_Timer()Dim i As IntegerFor i = 1 To 100Text1(i - 1).Text = data1(i)Next iEnd SubPublic Sub PFAsyncWriteCommand() '异步写入命令On Error GoTo ErrorHandlerDim i, j As LongDim Values(4) As VariantDim Errors() As LongDim CID As LongDim AsyncHandles(4) As LongFor j = 1 To 4AsyncHandles(j) = MyItemServerHandles(j)Values(j) = Text2(j - 1).TextNextMyTID = MyTID + 1Call MyGroup.AsyncWrite(4, AsyncHandles, Values, Errors, MyTID, CID)For i = 1 To 4If Not Errors(i) = 0 Then MsgBox "Item " + Str$(i) + " FAILED. Error Code = " + Str$(Errors(i)), vbCritical NextExit SubErrorHandler:MsgBox Err.Description + Chr(13) + "Writing Items Asyncronous", vbCritical, "ERROR"End SubPrivate Sub MyGroup_AsyncWriteComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, Errors() As Long)On Error GoTo ErrorHandler '异步写命令回馈信息Dim i As LongFor i = 1 To NumItemsIf Not Errors(i) = 0 Then MsgBox "AsyncWriteComplete Item Clienthandle = " + Str$(ClientHandles(i)) + " FAILED. Error Code = " + Str$(Errors(i)), vbCriticalNextExit SubErrorHandler:MsgBox Err.Description + Chr(13) + "Async Write Complete", vbCritical, "ERROR"End Sub。

VB 与 PLC 通讯

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的通信详解概要

vb与三菱PLC的通信详解概要

Vb6.0与三菱PLC的通信串行通信程序时,有两种方法,一种是用Windows API函数,另一种是用VB支持的通信控件MSCOMM.OCX。

使用MSCOMM.OCX控件编程方便,具有更完善的发送和接收功能。

这里采用了MSCOMM.OCX控件。

项目选用三菱FX2N-64MR型PLC,SC-09电缆作为计算机与PLC通信的连线。

连接电缆的9针端连接在计算机串口上,另一端连接在PLC的RS-422编程口。

通信格式:一个多字符帧由图1所示的五部分组成,其中和校验值是将命令码—ETX之间的字符的ASCII码(十六进制数)相加,取得所得和的最低二位数。

STX(CHR(2))和ETX(CHR(3))分别表示该字符帧的起始标起和结束标志。

(1) 起始字元STX:ASCII码的起始字元STX对应的16进制数位0x02。

无论命令信息还是回应信息,它们的起始字元均为STX,接收方以此来判知传输资料的开始。

(2) 命令号码:为两位16进制数。

所谓命令号码是指上位机要求下位机所执行的动作类别,例如要求读取或写入单点状态、写入或读取暂存器资料、强制设定、运行、停止等。

在回应信息中,下位机会将上位机接收到的命令号码原原本本的随同其它信息一同发送给上位机。

(3) 元件首地址:对应要操作的元件的相应的地址。

如从D123单元中读取数据时,要把它对应的地址:0x10F6发送给PLC。

(4) 元件个数:一次读取位元件或字元件的数量。

(5) 结束字元(ETX):ASCII码的结束字元ETX对应的16进制数为0x03。

无论命令信息还是回应信息,它们的结束字元均为ETX,接收方以此来判知此次通讯已结束。

(6) 校验码(Checksum):校验码是将STX-ETX之间的ASCII字元的16进制数值以“LRC(Longitudinal Redunda ncy Check)”法计算出1个Byte长度(两个16进制数值00-FFH)的校验码。

当下位机接收到信息后,用同样的方法计算出接收信息的校验码,如果两个校验码相同,则说明传送正确。

基于VB6.0的欧姆龙PLC与计算机的通信

基于VB6.0的欧姆龙PLC与计算机的通信

1 硬 件 连 接
计算机 作为上位 机 ,P C作 为下位机 ,它们之 L 问的连接见 图 1 。欧姆龙公 司的 C 0 H系列 P C配 20 L
命 令 。在图 2中 ,设 备号指 定与上 位计算机 通信 的
P C( 20 L C 0 H系列 P C是在 D 6 8 D 6 3 M6 4 、 M6 5 中设置
字 符 串或 字节 数组 。
( Ip t d :设置 从缓 冲区读取数 据的格 6) n uMo e
式。
设置 命令参数 。F CS是 校验码 ,它是 为提 高通信 的 可靠性设置 的 ,它将一 条指令 中从 @ 开始到正文结
( Ip te 7) n uL n:设置 和返 回 Ip t n u 每次读 出的 字 节数 。 ( IB f r o n:设置 和返 回接收缓 冲区中 8) n uf C u t e 的字节数 ,设 为 0时 ,清 空接 收缓 冲 区。 32 控 件参数初 始化 . 本 例 以某公 司 的包封 机控制 系统 的 P C和计 L 算机通信 为例 。用 VB .编写与欧姆龙系列 P C的 60 L 计 算机通信程序 的界 面 ,如图 4所示 。除图 中显 示 的命 令按 钮 和接 收 文本 框外 ,还 需
0 引言
P C以其可靠性 高 、抗 干扰 能力强 、编程简单 L 而在现代 电器控制 系统 中得到 了广泛 的应用 。V . B6 0
置有专 门的 R ・3 C通 信 口,因此不 必配置专 门的 S2 2
上 位链接模 块 ,用电缆将 其 与计算机 的 串行 口相 连 即 可构 成一 个 简单 的监 控 网络 。
P C的设备号 ) L 。识别码是命令代码 ,占有两个字节 ,
P c

如何通过VB实现PC机与PLC的以太网通信plc

如何通过VB实现PC机与PLC的以太网通信plc

如何通过VB实现PC机与PLC的以太网通信- plc此控件对于用户在运行时不行见,供应了一个简洁的途径访问TCP 及UDP网络服务而无需了解底层细节,使用时你只需设置属性、在恰当的时候调用它供应的方法即可。

主要属性有:BytesReceived:返回当前缓冲区中的字节数量,我们可以使用GetData 方法以接收数据。

只读且设计时不行用。

LocalHostName:返回本机名字符串,设计时不行用。

LocalIP:返回以(xxx.xxx.xxx.xxx)格式表达的IP地址串。

设计时不行用,运行时只读。

LocalPort :本机使用接收端口可读写,设计时可用,Long型。

对于客户,假如无需指定端口,则用端口0发送数据。

在此状况下,控件将随机选择一个端口。

在一个连接确定后,为TCP的端口。

对于服务器,指用于监听的端口。

如设置为0,则用随机数。

在调用Listen 方法后,该属性自动包含用到的端口。

端口0总是用于在两计算机间建立动态连接。

客户期望通过端口0获得一个随机端口以”回调”连接服务器。

Protocol :套接字类型,为TCP或UDP二者之一,缺省为TCP类型。

设置为sckTCPProtocol表示TCP协议sckUDPProtocol表示UDP协议。

在此属性被重置之前需用Close方法关闭之。

RemoteHost:发送或接收数据的主机,你可供应主机名如:FTP://,或一IP地址串,例如“100.0.1.1”。

RemoteHostIP:远程主机的IP地址。

对于客户程序,在连接确定后使用Connect方法,此属性包含远程主机的IP名串。

对于服务器程序,在引入连接需求后(Connection Request 大事),此属性包含IP串。

当使用UDP套接字,在Data Arrival大事发生后,此属性为发送UDP数据的机器IP地址串。

RemotePort:连接套接字端口值。

例如通常HTTP应用使用80端口,FTP则使用21。

VB实现PC与欧姆龙PLC通讯的串口编程

VB实现PC与欧姆龙PLC通讯的串口编程

VB实现PC与欧姆龙PLC通讯的串口编程第一篇:VB实现PC与欧姆龙PLC通讯的串口编程Private Sub Form_Load()Dim i As Integer'OPEN COM1If ComTrue(1)= 0 ThenIf ComOpen(1, 38400, 7, 1, 1, “sjh”)= 1 Then 'MsgBox(“已注册”)'sjh为你的注册账号Call SetDelayNum(64)End IfEnd Ifjisujisu1jisu2End Sub第二篇:VB中串口通讯的实现VB中串口通讯的实现.txt VB中串口通讯的实现------------------一、概述串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC 间的通讯以及PC和单片机之间的通讯之中。

提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。

实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB中,一样能够实现串口通讯,甚至其实现方法和C、汇编相比,要更加快捷方便。

下面,笔者就介绍一下在VB 中实现串口通讯的方法。

在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控件。

我们只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。

下面,笔者就简要地介绍一下MSComm控件的使用方法。

二、MSComm控件的主要属性、事件1、MSComm的属性由于MSComm控件属性很多,在此笔者仅介绍与实现串口通讯密切相关的核心属性。

Commport:设置通讯所占用的串口号。

如设成1(默认值),表示对Com1进行操作。

Setting:对串口通讯的相关参数。

包括串口通讯的比特率,奇偶校验,数据位长度、停止位等。

其默认值是“9600,N,8,1”,表示串口比特率是9600bit/s,不作奇偶校验,8位数据位,1个停止位。

VB与PLC的通信

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只电容即可。

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

VB与PLC通信程序(欧姆龙PLC)
分类:| 转自:原文地址被1人转藏+放进我的宝盒2010-9-2 21:45:46
VB与PLC通信程序(欧姆龙PLC)
关于VB的MSCOMM控件可参考相关资料。

通信程序摘要如下:
(1)初始化程序
mport=2 ’选择COM2
Mscomm1.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 string
Dim Answerlen as integer
node=”03”’节点号
Command=”RR”’命令为读IR区
begin=”0000”’从IR000开始
number=10 ’读取长度
Answerlen=51 ’计算接收字符串长度
进行命令发送和接收应答处理:
Dim FCS, I as integer
Dim s ,f as string
s=”@”+node+Commad+begin+number
FCS=0
For i=1 to Len(s)
FCS=FCS xor Asc(Mid$(s,i,1) ) ’帧校验码FCS
Next i
f=Hex$(FCS)
If Len(f)=1 Then f=”0”+f
Commfrm.MSComm1.Output=s + f + ”*”+ CHR$(13) ’命令帧发送
Do
Dummy=DoEvents()
Loop Untill Commfrm.MSComm1.InbufferCount >= Answerlen ’等待应答帧
Do tag1= Commfrm.MSComm1.Input
Loop Untill Commfrm.MSComm1.InbufferCount=0 ’读完应答帧
上述程序具有相当的通用性,对于其它设备不同的只是各自的数据帧格式,因而只需做相应少量修改即可。

相关文档
最新文档