欧姆龙plc以太网通讯通讯问题

创新、诚信、务实、高效
上海金沙江路3131创意园10号楼202室
传真:021-
欧姆龙CP系列小型PLC常见使用问题(一)
发布时间: 10:06 来源:欧姆龙 阅读:
1.CP1H的USB驱动怎么安装?
计算机通过USB电缆连接CP1H(通电),PC会自动提示找到新硬件,并提示要求安装驱动程序,客户通过浏览,指定USB驱动所在文件夹即可。
2.CP1H的内置USB口能用于与例如触摸屏或是第三方软件通讯吗?
不可以,CP1H的内置USB口只能用于与安装有OMRON软件如CX-programmer的上位机通讯。
3.电脑与CP1H的USB口用CX-programmer软件通讯,发现在线不上?
①CP1H的USB口与电脑通过USB电缆线连接,且CP1H需要上电。
②系统会提示发现新硬件,询问是否需要安装驱动,点击确定。
③通过浏览,选择到CP1H的USB驱动所在文件夹,点击确定。
④安装成功后系统会提示&现在可以正常设备&,如在步骤2中指定了错误文件夹或是驱动文件,系统会提示找不到驱动文件或是驱动文件不匹配,这时需要CP1H断电上电,重新安装。
*注:如使用www.fa.omron.com.cn网站中下载的驱动文件,需要先将驱动文件解压缩后再安装。
4.CP1H-X/XA内置高速计数器的软件复位地址是什么?
高速计数0:软件复位位 A531.00
高速计数1:软件复位位 A531.01
高速计数2:软件复位位 A531.02
高速计数3:软件复位位 A531.03
5.CS/CJ/CP1H时钟地址?
通过CX-P编程软件,与在线通讯上后,左边工作区中会出现&PLC时钟&
用户可以设置时钟或是选择与计算机时钟同步,或者通过DATE指令设定PLC的时钟。1 Pages: 1/2& & &Go
dujiang100
我是一只小小鸟
级别: 家园常客
发帖数量: 438 个
工控威望: 593 点
下载积分: 1405 分
在线时间: 239(小时)
注册时间: 最后登录:
&& 最近在研究VB跟欧姆龙CP1H的通信.了解到可以用串口进行HOSTLINK通信,还可以用以太网进行FANS通信.CP1H没有网口所以不可以用FANS通信吗?串口通信情况下,PLC处于运行时写入不了数据,只有当PLC是监控状态时才能写入.这怎么能达到随时写入的目的呢?
本帖最近评分记录:下载积分:+1()
tkggtdkjpl
工欲善其事,必先利其器!
级别: 网络英雄
工控威望: 10167 点
下载积分: 19447 分
在线时间: 1014(小时)
注册时间: 最后登录:
将PLC的运行模式改为监控模式就行了!
本帖最近评分记录:下载积分:+1(dujiang100) 真诚感谢!
自动化生产线,单机编程
dujiang100
我是一只小小鸟
级别: 家园常客
发帖数量: 438 个
工控威望: 593 点
下载积分: 1405 分
在线时间: 239(小时)
注册时间: 最后登录:
研究了几天,终于明白,FINS协议也可以通过串口和PLC通信上
活在当下,顺其自然
级别: 探索解密
发帖数量: 104 个
工控威望: 196 点
下载积分: 1576 分
在线时间: 85(小时)
注册时间: 最后登录:
&&&&&&FINS通讯命令,0401可以让PLC进入运行/监控模式,0402可以让PLC进入停止模式。&&&&&&实测用0402让PLC停止后还可以用对DM区进行读写。&&&&&&另:串口的hostlink模式FINS命令只能上位机控制PLC,PLC无法主动发数据给上位机。通过看w227文件,发现FINS帧格式自由度比较高,理论上来讲可以通过修改帧里面的命令符进行PLC通过串口对上位机发送数据,就好像用以太网发送一样。但是欧姆龙PLC说明书里面并没这方面的介绍。目前来说,PLC通过串口主动发数据给上位机发送数据要用无协议通讯。但是无协议通讯的话上位机无法控制PLC的开关状态。小弟刚学欧姆龙通讯,好多东西还不懂,望论坛各位前辈不吝赐教。
dujiang100
我是一只小小鸟
级别: 家园常客
发帖数量: 438 个
工控威望: 593 点
下载积分: 1405 分
在线时间: 239(小时)
注册时间: 最后登录:
不用PLC发,上位机不断的读取就可以了.FINS协议是最好的.在运行时可以对PLC进行读,写操作.HOSTLINK在PLC运行时可以读,但要写入必须把PLC改成监控模式,太烦.
级别: 探索解密
发帖数量: 90 个
工控威望: 145 点
下载积分: 2550 分
在线时间: 448(小时)
注册时间: 最后登录:
可以用FINS tcp/ip
级别: 探索解密
发帖数量: 35 个
工控威望: 119 点
下载积分: 15813 分
在线时间: 152(小时)
注册时间: 最后登录:
Use for Fins TCP/IP.
工控行业呆的越久越迷茫.......懂得多?少?......
级别: 家园常客
发帖数量: 344 个
工控威望: 653 点
下载积分: 2056 分
在线时间: 113(小时)
注册时间: 最后登录:
Public Class OmronFins&&&&Dim WithEvents OmronPLC As New System.IO.Ports.SerialPort&&&&Dim WithEvents T1 As New Timer&&&&Dim MLog As New MyFB.RunErrLog&&&&''' &summary&&&&&''' PLC返回字符&&&&''' &/summary&&&&&''' &remarks&&/remarks&&&&&Dim PLCRtString As String&&&&''' &summary&&&&&''' =True 等待RS返回信息&&&&''' &/summary&&&&&''' &remarks&&/remarks&&&&&Dim PLCBusyBit As Boolean = False&&&&Dim PLCCommd As Integer = 0&&&&Dim RtValue(19) As String&&&&Dim RtErrValue(19) As String&&&&Sub RS232PortSet(ByVal PortNum As Integer)&&&&&&&&Try&&&&&&&&&&&&With OmronPLC&&&&&&&&&&&&&&&&.BaudRate = 38400&&&&&&&&&&&&&&&&.StopBits = 2&&&&&&&&&&&&&&&&.DataBits = 7&&&&&&&&&&&&&&&&.Parity = IO.Ports.Parity.Even&&&&&&&&&&&&&&&&.PortName = &COM& & PortNum&&&&&&&&&&&&&&&&.ReceivedBytesThreshold = 1&&&&&&&&&&&&End With&&&&&&&&&&&&If OmronPLC.IsOpen = False Then&&&&&&&&&&&&&&&&OmronPLC.Open()&&&&&&&&&&&&End If&&&&&&&&Catch ex As Exception&&&&&&&&&&&&MLog.LogErrWrite(ex.ToString)&&&&&&&&End Try&&&&End Sub&&&&Sub RS232PortClose()&&&&&&&&If OmronPLC.IsOpen = True Then&&&&&&&&&&&&OmronPLC.Close()&&&&&&&&End If&&&&End Sub&&&&Sub RS232SendMsg(ByVal SendString As String)&&&&&&&&Dim LenNum As Integer&&&&&&&&LenNum = SendString.Length&&&&&&&&If OmronPLC.IsOpen = True Then&&&&&&&&&&&&OmronPLC.Write(SendString)&&&&&&&&Else&&&&&&&&&&&&PLCBusyBit = False&&&&&&&&End If&&&&End Sub&&&&''' &summary&&&&&''' &&&&''' Fins通讯计算校验码&&&&''' &/summary&&&&&''' &param name=&Value&&传入需要校验内容&/param&&&&&''' &returns&返回Fins校验值&/returns&&&&&''' &remarks&&/remarks&&&&&Public Function FinsFcsCheck(ByVal Value As String) As String&&&&&&&&Dim CheckValue As Integer&&&&&&&&Dim CheckHex As String&&&&&&&&For i As Integer = 1 To Value.Length&&&&&&&&&&&&CheckValue = Asc(Mid(Value, i, 1)) Xor CheckValue&&&&&&&&Next&&&&&&&&CheckHex = Hex(CheckValue)&&&&&&&&If CheckHex.Length & 2 Then&&&&&&&&&&&&CheckHex = &0& & CheckHex&&&&&&&&End If&&&&&&&&&&&&Return CheckHex&&&&End Function&&&&''' &summary&&&&&''' &&&&''' 写单个PLC值函数&&&&''' &&&&''' &/summary&&&&&''' &param name=&AddName&&&/param&&&&&''' &param name=&Value&&&/param&&&&&''' &returns&&/returns&&&&&''' &remarks&&/remarks&&&&&Public Function SetValue(ByVal AddName As String, ByVal AddNum As Integer, ByVal Value As Integer) As Integer&&&&&&&&Dim AddNumHexLen As Integer '地址16进制长度&&&&&&&&Dim HexAddNum As String&&&& '地址值转到16进制&&&&&&&&Dim HCode As String = &@00FA& '通讯表头&&&&&&&&Dim CommandCode As String = &0102&&&&&'通讯命令代码&&&&&&&&Dim MemoryAreaCode As String&&&&&&&&&&'PLC内存功能码&&&&&&&&Dim BitNum As String = &00&&&&&&&&&&& '位写入需要写数值 0-15;字写如=0&&&&&&&&Dim WriteNum As String = &0001&&&&&&&&&'写PLC地址个数;单个写入=0001&&&&&&&&Dim HexValue As String&&&&&&&&&&&&&&&&'写入数值转换为16进制&&&&&&&&Dim FCSString As String&&&&&&&&&&&&&& '需要校验的字符串&&&&&&&&Dim FCSValue As String&&&&&&&&&&&&&&&&'命令校验码&&&&&&&&Dim EndCode As String = &*& & vbCr&&&&'结束码&&&&&&&&Dim SenCode As String&&&&&&&&&&&&&&&& '发送到PLC字符串&&&&&&&&'*************************************************************************&&&&&&&&'修改版本 新建&&&&&&&&'写入数值到D&&&&&&&&'通讯发送命令&&&&&&&&'HCode & CommandCode & MemoryAreaCode&&& HEXADDNum & BitNum & WriteNum & Value & FCS & EndCode&&&&&&&&'*************************************************************************&&&&&&&&Try&&&&&&&&&&&&If PLCBusyBit = False And OmronPLC.IsOpen Then&&&&&&&&&&&&&&&&PLCCommd = 1&&&&&&&&&&&&&&&&PLCBusyBit = True&&&&&&&&&&&&&&&&'选择写入PLC地址类型&&&&&&&&&&&&&&&&Select Case AddName&&&&&&&&&&&&&&&&&&&&Case &D&&&&&&&&&&&&&&&&&&&&&&&&&MemoryAreaCode = &82&&&&&&&&&&&&&&&&&&&&&Case Else&&&&&&&&&&&&&&&&&&&&&&&&Return 1000&&&&&&&&&&&&&&&&&&&&&&&&Exit Function&&&&&&&&&&&&&&&&End Select&&&&&&&&&&&&&&&&'写入地址转换为HEX,计算长度是否=4;长度不够补满&&&&&&&&&&&&&&&&HexAddNum = Hex(AddNum)&&&&&&&&&&&&&&&&AddNumHexLen = HexAddNum.Length&&&&&&&&&&&&&&&&Select Case AddNumHexLen&&&&&&&&&&&&&&&&&&&&Case 1&&&&&&&&&&&&&&&&&&&&&&&&HexAddNum = &000& & HexAddNum&&&&&&&&&&&&&&&&&&&&Case 2&&&&&&&&&&&&&&&&&&&&&&&&HexAddNum = &00& & HexAddNum&&&&&&&&&&&&&&&&&&&&Case 3&&&&&&&&&&&&&&&&&&&&&&&&HexAddNum = &0& & HexAddNum&&&&&&&&&&&&&&&&&&&&Case 4&&&&&&&&&&&&&&&&&&&&&&&&HexAddNum = HexAddNum&&&&&&&&&&&&&&&&&&&&Case Else&&&&&&&&&&&&&&&&&&&&&&&&Return 1001&&&&&&&&&&&&&&&&&&&&&&&&Exit Function&&&&&&&&&&&&&&&&End Select&&&&&&&&&&&&&&&&'写入数值转换位16进制,计算长度=4;长度不够布满&&&&&&&&&&&&&&&&HexValue = Hex(Value)&&&&&&&&&&&&&&&&Select Case HexValue.Length&&&&&&&&&&&&&&&&&&&&Case 1&&&&&&&&&&&&&&&&&&&&&&&&HexValue = &000& & HexValue&&&&&&&&&&&&&&&&&&&&Case 2&&&&&&&&&&&&&&&&&&&&&&&&HexValue = &00& & HexValue&&&&&&&&&&&&&&&&&&&&Case 3&&&&&&&&&&&&&&&&&&&&&&&&HexValue = &0& & HexValue&&&&&&&&&&&&&&&&&&&&Case 4&&&&&&&&&&&&&&&&&&&&&&&&HexValue = HexValue&&&&&&&&&&&&&&&&&&&&Case Else&&&&&&&&&&&&&&&&&&&&&&&&Return 1002&&&&&&&&&&&&&&&&&&&&&&&&Exit Function&&&&&&&&&&&&&&&&End Select&&&&&&&&&&&&&&&&FCSString = HCode & CommandCode & MemoryAreaCode & HexAddNum & BitNum & WriteNum & HexValue&&&&&&&&&&&&&&&&FCSValue = FinsFcsCheck(FCSString)&&&&&&&&&&&&&&&&SenCode = FCSString & FCSValue & EndCode&&&&&&&&&&&&&&&&RS232SendMsg(SenCode)&&&&&&&&&&&&&&&&' Threading.Thread.Sleep(10)&&&&&&&&&&&&&&&&'***************************************************&&&&&&&&&&&&&&&&' 返回结果处理&&&&&&&&&&&&&&&&Dim StartTick As Integer&&&&&&&&&&&&&&&&StartTick = Environment.TickCount&&&&&&&&&&&&&&&&Do&&&&&&&&&&&&&&&&&&&&If (Environment.TickCount - StartTick) & 1500 Then&&&&&&&&&&&&&&&&&&&&&&&&'超时报警&&&&&&&&&&&&&&&&&&&&&&&&PLCBusyBit = False&&&&&&&&&&&&&&&&&&&&&&&&Return 9001&&&&&&&&&&&&&&&&&&&&&&&&Exit Do&&&&&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&&&&&&&&&If PLCBusyBit = False Then&&&&&&&&&&&&&&&&&&&&&&&&Exit Do&&&&&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&&&&&&&&&Application.DoEvents()&&&&&&&&&&&&&&&&Loop&&&&&&&&&&&&&&&&If RtErrValue(0) = &1& Then&&&&&&&&&&&&&&&&&&&&Return 1&&&&&&&&&&&&&&&&Else&&&&&&&&&&&&&&&&&&&&'未知错误报警&&&&&&&&&&&&&&&&&&&&Return 9002&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&Else&&&&&&&&&&&&&&&&'通讯BUSY&&&&&&&&&&&&&&&&Return 9003&&&&&&&&&&&&End If&&&&&&&&Catch ex As Exception&&&&&&&&&&&&' MsgBox(ex.Message)&&&&&&&&&&&&MLog.LogErrWrite(ex.ToString)&&&&&&&&End Try&&&&End Function&&&&Public Function GetValue(ByVal AddName As String, ByVal AddNum As Integer, ByRef RtV As Integer) As Integer&&&&&&&&Dim AddNumHexLen As Integer '地址16进制长度&&&&&&&&Dim HexAddNum As String&&&& '地址值转到16进制&&&&&&&&Dim HCode As String = &@00FA& '通讯表头&&&&&&&&Dim CommandCode As String = &0101&&&&&'通讯命令代码&&&&&&&&Dim MemoryAreaCode As String&&&&&&&&&&'PLC内存功能码&&&&&&&&Dim BitNum As String = &00&&&&&&&&&&& '位读取需要写数值 0-15;字读入=0&&&&&&&&Dim ReadNum As String = &0001&&&&&&&&&'读PLC地址个数;单个写入=0001&&&&&&&&'Dim HexValue As String&&&&&&&&&&&&&&&&'写入数值转换为16进制&&&&&&&&Dim FCSString As String&&&&&&&&&&&&&& '需要校验的字符串&&&&&&&&Dim FCSValue As String&&&&&&&&&&&&&&&&'命令校验码&&&&&&&&Dim EndCode As String = &*& & vbCr&&&&'结束码&&&&&&&&Dim SenCode As String&&&&&&&&&&&&&&&& '发送到PLC字符串&&&&&&&&'*************************************************************************&&&&&&&&'修改版本2015703 新建&&&&&&&&'读D数值&&&&&&&&'通讯发送命令&&&&&&&&'HCode & CommandCode & MemoryAreaCode&&& HEXADDNum & BitNum & ReadNum&&& FCS & EndCode&&&&&&&&'*************************************************************************&&&&&&&&Try&&&&&&&&&&&&If PLCBusyBit = False And OmronPLC.IsOpen Then&&&&&&&&&&&&&&&&PLCCommd = 1&&&&&&&&&&&&&&&&PLCBusyBit = True&&&&&&&&&&&&&&&&'选择读PLC地址类型&&&&&&&&&&&&&&&&Select Case AddName&&&&&&&&&&&&&&&&&&&&Case &D&&&&&&&&&&&&&&&&&&&&&&&&&MemoryAreaCode = &82&&&&&&&&&&&&&&&&&&&&&Case Else&&&&&&&&&&&&&&&&&&&&&&&&Return 1000&&&&&&&&&&&&&&&&&&&&&&&&Exit Function&&&&&&&&&&&&&&&&End Select&&&&&&&&&&&&&&&&'读地址转换为HEX,计算长度是否=4;长度不够补满&&&&&&&&&&&&&&&&HexAddNum = Hex(AddNum)&&&&&&&&&&&&&&&&AddNumHexLen = HexAddNum.Length&&&&&&&&&&&&&&&&Select Case AddNumHexLen&&&&&&&&&&&&&&&&&&&&Case 1&&&&&&&&&&&&&&&&&&&&&&&&HexAddNum = &000& & HexAddNum&&&&&&&&&&&&&&&&&&&&Case 2&&&&&&&&&&&&&&&&&&&&&&&&HexAddNum = &00& & HexAddNum&&&&&&&&&&&&&&&&&&&&Case 3&&&&&&&&&&&&&&&&&&&&&&&&HexAddNum = &0& & HexAddNum&&&&&&&&&&&&&&&&&&&&Case 4&&&&&&&&&&&&&&&&&&&&&&&&HexAddNum = HexAddNum&&&&&&&&&&&&&&&&&&&&Case Else&&&&&&&&&&&&&&&&&&&&&&&&Return 1001&&&&&&&&&&&&&&&&&&&&&&&&Exit Function&&&&&&&&&&&&&&&&End Select&&&&&&&&&&&&&&&&FCSString = HCode & CommandCode & MemoryAreaCode & HexAddNum & BitNum & ReadNum&&&&&&&&&&&&&&&&FCSValue = FinsFcsCheck(FCSString)&&&&&&&&&&&&&&&&SenCode = FCSString & FCSValue & EndCode&&&&&&&&&&&&&&&&RS232SendMsg(SenCode)&&&&&&&&&&&&&&&&' Threading.Thread.Sleep(10)&&&&&&&&&&&&&&&&'***************************************************&&&&&&&&&&&&&&&&' 返回结果处理&&&&&&&&&&&&&&&&Dim StartTick As Integer&&&&&&&&&&&&&&&&StartTick = Environment.TickCount&&&&&&&&&&&&&&&&Do&&&&&&&&&&&&&&&&&&&&If (Environment.TickCount - StartTick) & 1500 Then&&&&&&&&&&&&&&&&&&&&&&&&'超时报警&&&&&&&&&&&&&&&&&&&&&&&&PLCBusyBit = False&&&&&&&&&&&&&&&&&&&&&&&&Return 9001&&&&&&&&&&&&&&&&&&&&&&&&Exit Do&&&&&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&&&&&&&&&If PLCBusyBit = False Then&&&&&&&&&&&&&&&&&&&&&&&&Exit Do&&&&&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&&&&&&&&&Application.DoEvents()&&&&&&&&&&&&&&&&Loop&&&&&&&&&&&&&&&&If RtErrValue(0) = &1& Then&&&&&&&&&&&&&&&&&&&&RtV = Convert.ToInt32(RtValue(0), 16)&&&&&&&&&&&&&&&&&&&&Return 1&&&&&&&&&&&&&&&&Else&&&&&&&&&&&&&&&&&&&&'未知错误报警&&&&&&&&&&&&&&&&&&&&Return 9002&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&Else&&&&&&&&&&&&&&&&'通讯BUSY&&&&&&&&&&&&&&&&Return 9003&&&&&&&&&&&&End If&&&&&&&&Catch ex As Exception&&&&&&&&&&&&' MsgBox(ex.Message)&&&&&&&&&&&&MLog.LogErrWrite(ex.ToString)&&&&&&&&End Try&&&&End Function&&&&Private Sub OmronPLC_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles OmronPLC.DataReceived&&&&&&&&Threading.Thread.Sleep(100)&&&&&&&&Dim ReadString As String&&&&&&&&If OmronPLC.IsOpen = True Then&&&&&&&&&&&&ReadString = OmronPLC.ReadExisting&&&&&&&&&&&&Call ReslutCount(ReadString)&&&&&&&&End If&&&&&&&&PLCBusyBit = False&&&&End Sub&&&&Sub ReslutCount(ByVal InputS As String)&&&&&&&&Dim FcsRead As String = String.Empty&&'返回校验码&&&&&&&&Dim FcsCount As String = String.Empty '计算出校验码&&&&&&&&Dim RtCommand As String = String.Empty '返回命令&&&&&&&&Dim RtMsg As String = String.Empty '返回报警代码&&&&&&&&Dim OKMsg As String = &0000&&&&&&&&&'返回正确代码&&&&&&&&Try&&&&&&&&&&&&If InputS.Length &= 25 Then&&&&&&&&&&&&&&&&If Mid(Microsoft.VisualBasic.Right(InputS, 2), 1, 1) = &*& Then&&&&&&&&&&&&&&&&&&&&PLCRtString = Mid(InputS, 1, InputS.Length - 4)&&&&&&&&&&&&&&&&&&&&FcsRead = Mid(InputS, InputS.Length - 3, 2)&&&&&&&&&&&&&&&&&&&&FcsCount = FinsFcsCheck(PLCRtString)&&&&&&&&&&&&&&&&&&&&RtCommand = Microsoft.VisualBasic.Mid(PLCRtString, 16, 4)&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&&&&&If FcsCount = FcsRead Then&&&&&&&&&&&&&&&&&&&&Select Case RtCommand&&&&&&&&&&&&&&&&&&&&&&&&Case &0101&&&&&&&&&&&&&&&&&&&&&&&&&&&&&RtMsg = Microsoft.VisualBasic.Mid(PLCRtString, 20, 4)&&&&&&&&&&&&&&&&&&&&&&&&&&&&If RtMsg = OKMsg Then&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'=1写入PLC值正常&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&RtValue(0) = Microsoft.VisualBasic.Mid(PLCRtString, 24, 4)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&RtErrValue(0) = &1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Exit Sub&&&&&&&&&&&&&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&&&&&&&&&&&&&Case &0102&&&&&&&&&&&&&&&&&&&&&&&&&&&&&RtMsg = Microsoft.VisualBasic.Mid(PLCRtString, 20, 4)&&&&&&&&&&&&&&&&&&&&&&&&&&&&If RtMsg = OKMsg Then&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'=1写入PLC值正常&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&RtErrValue(0) = &1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Exit Sub&&&&&&&&&&&&&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&&&&&&&&&&&&&Case Else&&&&&&&&&&&&&&&&&&&&&&&&&&&&'不能识别通讯命令&&&&&&&&&&&&&&&&&&&&&&&&&&&&RtErrValue(0) = &9002&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Exit Sub&&&&&&&&&&&&&&&&&&&&End Select&&&&&&&&&&&&&&&&Else&&&&&&&&&&&&&&&&&&&&'返回校验码不对报警&&&&&&&&&&&&&&&&&&&&RtErrValue(0) = &9001&&&&&&&&&&&&&&&&&End If&&&&&&&&&&&&Else&&&&&&&&&&&&&&&&'返回字符串长度不够报警&&&&&&&&&&&&&&&&RtErrValue(0) = &9000&&&&&&&&&&&&&End If&&&&&&&&Catch ex As Exception&&&&&&&&&&&&MLog.LogErrWrite(ex.ToString)&&&&&&&&End Try&&&&&&&&&&End Sub&&&&Sub ResetErr()&&&&&&&&Try&&&&&&&&&&&&If OmronPLC.IsOpen = True Then&&&&&&&&&&&&&&&&OmronPLC.Close()&&&&&&&&&&&&End If&&&&&&&&&&&&If OmronPLC.IsOpen = False Then&&&&&&&&&&&&&&&&OmronPLC.Open()&&&&&&&&&&&&End If&&&&&&&&&&&&PLCBusyBit = False&&&&&&&&Catch ex As Exception&&&&&&&&&&&&MLog.LogErrWrite(ex.ToString)&&&&&&&&&&&&MsgBox(ex.Message)&&&&&&&&End Try&&&&End SubEnd Class
本帖最近评分记录:下载积分:+5(dujiang100) 热心助人!
工控行业呆的越久越迷茫.......懂得多?少?......
级别: 家园常客
发帖数量: 344 个
工控威望: 653 点
下载积分: 2056 分
在线时间: 113(小时)
注册时间: 最后登录:
<div class="f14" id="read_15年一个项目写的 工控机 与OMRON CP1H串口通讯, 使用FAINS 能够稳定的读写数据;
本帖最近评分记录:下载积分:+1(oahz55) 热心助人!下载积分:+1(静水磐石) 厉害
活在当下,顺其自然
级别: 探索解密
发帖数量: 104 个
工控威望: 196 点
下载积分: 1576 分
在线时间: 85(小时)
注册时间: 最后登录:
&&&&&&如果用HostLink通讯,FINS指令,上位机要等待PLC某些步骤准备好,就要上位机监控PLC某位是否是设定值,那就需要不断循环地发读指令,这时候串口一直在工作,上位机程序一直调用串口函数,这样会显得很繁忙,整个程序的资源都被串口收发给占用了,程序经常处在假死状态。这样的程序显然是有很大缺陷的。&&&&&&最好的解决办法当然是用中断来代替循环等待。然而,FINS指令无法让PLC主动发送就绪信号,无法提供这个中断。哪位高手有办法解决这个问题?
工控行业呆的越久越迷茫.......懂得多?少?......
级别: 家园常客
发帖数量: 344 个
工控威望: 653 点
下载积分: 2056 分
在线时间: 113(小时)
注册时间: 最后登录:
线程 批量读取
dujiang100
我是一只小小鸟
级别: 家园常客
发帖数量: 438 个
工控威望: 593 点
下载积分: 1405 分
在线时间: 239(小时)
注册时间: 最后登录:
然而VB6是单线程的.
1 Pages: 1/2& & &GoOMRONPLC网络与通信
OMRONPLC网络与通信
摘要:可编程控制器与上位计算机组成的集散控制系统越来越广泛应用于生产过程自动化领域。本文介绍了OMRONPLC的Ethernet网、ControllerLink控制器网、CompoBUS/D和CompoBUS/S元器件网所构成的网络体系,阐述了OMRONPLC网络联接方式及技术参数;研究了PLC与上位机的链接方式,通信过程及通信程序。关键词:OMRONPLC网络通信Abstract:HostComputerprogrammablecontrolleranddistributedcontrolsystemconsistingofmorewidelyusedinthe
摘&要:可编程控制器与上位计算机组成的集散控制系统越来越广泛应用于生产过程自动化领域。本文介绍了OMRON&PLC的Ethernet网、Controller&Link控制器网、Compo&BUS/D和Compo&BUS/S元器件网所构成的网络体系,阐述了OMRON&PLC网络联接方式及技术参数;研究了PLC与上位机的链接方式,通信过程及通信程序。 关键词:OMRON&PLC&网络&通信 Abstract:Host&Computer&programmable&controller&and&distributed&control&system&consisting&of&more&widely&used&in&the&production&process&automation&field.&This&paper&introduces&the&OMRON&PLC&Ethernet&network,&Controller&Link&network,&Compo&BUS&/&D&and&Compo&BUS&/&S&network&by&the&components&of&the&Network&system,&expounded&the&OMRON&PLC&network&connection&mode&and&technical&On&the&PLC&and&PC&link,&communication&process&and&Communication&Program&. & Key&words:&OMRON&PLC&Network&Communication 1.引言 &&&&近年来,PLC的网络应用日益广泛,组成更高级的集散控制系统甚至整个工厂的自动化,已成为工业现代化的趋势,实现远程连接和通信成为了PLC的基本性能之一。而PLC网络结构复杂,技术难度大,投资较高,给用户在开发应用造成了一定的困难。OMRON公司的PLC较早投入我国市场,在我国工控领域应用较为广泛,掌握其PLC的网络技术和通信方法,对进一步推广PLC的应用,提高工厂自动化水平具有较大的现实意义。 2.OMRON&PLC网络 &&&&OMRON&PLC的网络分为三层:Ethernet网、Controller&Link控制器网、Compo&BUS/D与Compo&BUS/S元器件网,其三层网络控制平台如图1所示。
2.1&Ethernet网 &&&&Ethernet网络即所说的以太网,它是工厂自动化领域用于信息管理层上的网络,它的通信速率高,可达100M&bps,以太网模块使PLC可以作为工厂局域网的一个节点,网络上的任何一台计算机都可以实现对它的控制。在OMRON的PLC中,中型机以上的PLC才能上以太网,通常有三种机型,CS1系列、CV系列、和C200H系列。在CS1系列和CV系列上分别直接装Ethernet单元CS1W-ETN01/11、CV500-ETN01,而在C200Hα上除了必须安装PC卡单元(C200HW-PCS01)外,还必须配置通信 板(C200HW-COM01/04),并用总线单元将PC卡单元与通信板连接起来。OMRON&PLC的Ethernet网具有以下功能: &&&&(1)远程编程和监控:在连接到Ethernet网络的计算机上运行CX-Programmer可以对所有连接的Ethernet网络上的PLC进行编程和监控。 &&&&(2)FINS信息服务:在PLC之间和PLC与计算机之间发送FINS信息,使用Ethernet&Fins&Gateway能够不必编写FINS指令程序而直接管理信息。 &&&&(3)Socket服务:由Windows提供一组函数,允许用户程序直接调用及使用TCP和UDP协议,在Ethernet网上进行数据传输。 &&&&(4)FTP服务:使用FTP在CPU单元的存储卡和计算机存储器之间传送文件。 &&&&(5)Email服务:当在出错或在预定的时间内,一个标志变为ON,此时从PLC向上位机发送电子邮件。 &&&(6)网络间通信:处在网络上的不同节点可以通过网关通信,通过FINS指令可实现跨网络的连接。 &&&&PLC通过使SEND、RECV、CMND指令跨网并与其它PLC进行通信,网间通信限制在三级网络内进行。OMRON&PLC的Ethernet网的主要技术指标如表1所示。 表1&Ethernet网的主要技术指标
2.2&Controller&Link&控制器网 &&&&Controller&Link&控制器网能够在工厂现场以一种全功能的FA网络形式连接PLC,Controller&Link&是一种令牌总线网,可以在OMRON的CS1/CV/C200HX系列PLC和计算机之间方便灵活地发送和接收大容量的数据包,它支持能共享数据的数据链接和在需要时发送和接收数据的信息服务,数据链接区域能自由设置以建立灵活的数据链接系统。Controller&Link&网具有以下功能: &&&&(&1&)&数据链接:&在PLC之间以及PLC和上位计算机之间,能够柔性的创建大容量数据链接,使用Controller&Link&FinsGateway&能够在应用层上管理数据链接,无需梯形图。I&/O、链接区、数据存储器区和扩展数据存储器区均可作为发送 或接收区。 &&&&(2)远程编程和监控:通过与RS-232C链接,ControllerLink&网络上能够使用CX-Programmer进行编程和监控PLC。 &&&&(3)FINS通信服务:在PLC和上位计算机之间实现大容量数据传送,Controller&Link&FinsGateway&能够在应用层上管理数据链接,而不必编写FINS指令程序。 &&&&(4)信息服务:可以对特定节点进行读写数据、改变操作模式等操作,通过在程序中执行SEND&/&RECV指令发送和接收数据,通过CMND指令发送FINS命令执行读写操作。 &&&&(5)ESA功能:实时监控网络的状态,当网络上产生错误时,EAS可记录和显示错误发生的时间和错误信息。Controller&Link控制器网的主要技术指标如表2所示。 表2&Controller&Link&控制器网的主要技术指标
2.3&Compo&BUS/D网络 &&&&Compo&BUS/&D是OMRON的一种开放、多主控的设备网,开放性是其特色,采用Device&Net&的通信协议。其它厂家的设备,只要符合&Device&Net的标准,就可以接入其中,是一种控制功能齐全、配置灵活、实现方便的分散控制网络。CompoBUS/D的主要功能有: &&&&(1)远程I&/&O通信:无需编写特殊的程序,装有主单元PLC的CPU可以直接读写I&/&O,从单元的I&/&O点现实远程控制。 &&&&(2)信息通信:安装主单元的PLC在CPU单元里执行特殊指令(SEND、RECV、CMND和IOWR)可以向其它主单元、从单元、甚至其它公司的设备读写信息,控制它们的运行。Compo&BUS/D的通信标准如表3。 表3&Compo&BUS/D的通信标准
2.4&Compo&BUS/S&网络 &&&&Compo&BUS/S&网络是一种主从式总线结构的控制网络,它的响应速度快,实时性强,实现简便,可以对远程的I/O实现分散控制。该系统由一台PLC(CS1、CQM1H、C200Hα)带Compo&BUS/S主站模块或一台SRM1主控单元作为主站,一个主单元最多可带32个远程从站单元,控制256个输入输出点。接16台从站单元、128点输入输出点时可达到0.5ms的高速通信。Compo&BUS/S通信系统具有以下特点: &&&&(1)主干线远距离通信:新增了远距离通信模式,允许主干线的通信距离达到500m。 &&&&(2)丰富的主站和从站单元:有C200HW-SRM21-V1、CQM1-SRM21-V1、SRM-C0-V2主站单元和SRT2系列的从站单元,支持高速通信和远距离通信。 &&&&(3)高速通信:在高速通信方式下,接16台从站单元,128点控制时,可实现0.5ms的快速通信。 &&&&(4)配线简单:主单元和从站单元间、从单元和从单元间可用4线制电缆连接,其中2根为信号线,2根为电源线,从而大幅度减少了配线。Compo&BUS/S通信参数如表4所示。 表4&Compo&BUS/S通信参数
3.PLC与上位计算机之间的通信 &&&&在计算机与PLC构成的集散控制系统中,多数是由一台计算机与数台PLC形成1:N的通信模式。该模式系统中PLC负责现场高速数据采集、实现逻辑、定时、计数、PID调节等控制任务并通过串行通信口向上位计算机传送PLC工作状态及有关数据,从而实现计算机对控制系统的管理。PLC与上位计算机之间通信的准确、可靠、高效率是集散控制系统的关键所在。 3.1&PLC与上位机的链接方式 &&&&PLC与上位计算机形成1:N通信模式有两种连接方式:
&&&&方式一较少使用连接适配器,也不用信号转换,但若中间某一台PLC出故障,其后的PLC将无法与上位机通信;方式二使用了信号转换模块,当某一台PLC出故障不影响其它PLC通信。 3.2&PLC与上位机的通信过程 &&&&通信开始先由上位机依次向网内的PLC发出一串测试帧命令,PLC接到上位机的完整帧后,首先判断是不是自己的代号,若不是就不予理睬,若是则发送回答信号。上位机接到回答信号后,与发送测试数据比较,若两者无误,发出可以进行数据通信的信号,转入正常的数据通信。上位机与PLC实施链接通信,上位机具有优先发送权,每发送完一帧发送权就在上位机与PLC之间轮换。当收到结束符或分界符时,发送权从发送单元传给接收单元。其帧发送与接收如图3.2所示。
&&&&上位机发出命令格式和PLC响应格式如下图: 命令格式
@:&帧开始标志 节点号:通信网络中每一台PLC被分配给的唯一番号 标题号:该帧的通信命令码 结束码:返回命令的完成状态 正&文:设置命令参数 FCS:&帧校验顺序代码 结束符:命令结束 通信参数设置为:波特率9600bps,数据格式由DM0902/DM1920的第00-07位和DM0921/DM1921共同设定,默认方式时DM0902/DM1920的第00-07位的值为,此时DM0921/DM1921区不起作用。每条指令都以标识号(Unit&Number)和操作码/头(Header)开始,以校验码(FCS)和结束标志(Terminator)结束。 &&&&帧发送时,FCS置于结束符前以检查是否发生数据错误。FCS是转换成2个ASCⅡ字符的8位数据,这个8位数据对帧开始的数据直到此帧正文结束的数据进行“异或”运算的结果。FCS检查程序如下: 400&*FCSCHECK 410&L=LEN(RESPONSE$)’ 420&Q&=&0:FCSCK&$&=&“&” 430&A$&=&RIGHT&$&(RESPONSE&$&,1) 440&PRINT&RESPONSE&$&,&AS,&L 450&IF&A&$&=&“*”&THEN&LENGS&=&LEN(RESPONSE&$)&-3 ELSE&LENGS&=&LEN(RESPONSE&$)&-2 460&FCSP&$&=&MID(RESPONSE&$,&LENGS+1,2)’ 470&FOR&I&=&1&TO&LENGS’ 480&Q&=&ASC&(MID&$&(RESPONSE&$,I,1))&XOR&Q 490&NEXT&I 500&FCSD&$&=HEX&$&(Q) 510&IF&LEN&(FCSD&$)&=1,THEN,&FCSD&$&=”0”+FCSD&$’ 520&IF&FCSS&$&&&&FCSP&$&,&THEN&FCSCK&$&=&“ERR” 530&PRINT&“FCSD&$&=”&;&FCSD&$&,&“FCSP&$&=”&;&FCSP&$ ,&“FCSCK&$&=”;&FCSCK&$ 540&RETURN &&&&帧发送检查格式如图3.4所示。
3.3&PLC与上位计算机通信程序 &&&&上位机通信软件是用VB开发的。VB具有强大的图形显示功能,可以容易开发出界面良好的图形用户界面,同时VB还提供了串行端口控件&MSCOMM,程序员在利用该控件时,只需设置、监视其属性和事件,即可完成对串口初始化和数据的传输工作。通信程序如下: Sub&forml&load&(&) Mscomml.&Comport&=&1 Mscomml.&Settings&=&“9600,n,8,1” End&sub Sub&commandl&click Mscomml.&Inputlen&=&0 If&mscomml.&Portopen&=&false&then Mscomml.&Portopen&=&true End&if For&I&=&1&to&N&;N为网络系统中的PLC个数 If&i&10&then S&$&=&“@”&+&“0”&+str&$&(i)&+&“ts”&+&“abcd” Else S&$&=&“@”&+&str&$&(i)&+&“ts”&+&“abcd”;abcd&为测试字符 Endif ……; Mscomml.&Lutprt&=sedate&$ Timer&1&on&=&false Timer&l.&Enable&=&true Do&until&(mscomml.inbuffercount&&&&&0) Or&(timer&1&on&=&true&) Domy&=&doevents(&) Loop Timer&1.enable&=&false …… Redata,$&=&msconmml.&Input If&rdata&$&=&sedate&$ ……&;&转入正常通信数据处理 Else Labell.&Cation&=&str&$&(&i&)&+&“测试通信失败,检查线睡后再 测试” Endif Endsub 4.结束语 &&&&OMRON&PLC已广泛应用于工业过程控制,随着网络技术的不断提高和推广,PLC的控制能力和控制范围从设备级的控制发展到生产线级的控制乃至工厂级的控制。大力推广PLC的网络技术,必将加快我国工业企业向自动化、智能化发展的步伐。 参考文献 [1]&郑晟.现代可编程控制器原理与应用.北京:科学出版社,2002 [2]&宋伯生.可编程控制器.&北京:中国劳动出版社,1999 [3]&源江科技.VB编程技巧.&上海:上海科学普及出版社,2002 [4]&OMRON&.CQM编程手册.2002 [5]&OMRON.&CQM操作手册.2002
型号/产品名
深圳市海文思科技有限公司
深圳市海文思科技有限公司
南京法维莱电器有限公司
深圳市动能世纪科技有限公司
深圳市福田区仪玲电子商行}

我要回帖

更多关于 欧姆龙plc通讯协议 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信