admin 管理员组文章数量: 887029
2024年1月26日发(作者:socks5全局代理软件)
台达PLC通讯调试方法。
台达PLC出厂通讯格式为,ASCII,9600,7,E,1,支持功能码03H,06H,10H,如用串口调试程序向PLC(站号为1)的D0写H1770,ASCII字符为: “: 620d0a”应在串口调试程序中写入的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码混在了一起,""是ASCII码,应全部转换为16进制。
正确的字符串数据是=":"+""+LRC码("EA")+CR(0D)+LF(0A)
转换为16进制="3A3D0A",你把引号内的内容复制到你的串口调试软件中,按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,无法进行串行通讯。
我用1:1进行PC对PLC通讯.
用pc控制plc原理上是一样的,你只要先将pc得端口初始化为和plc一样的通讯协议,然后往plc相对应的地址写数就好了。不过,这时候plc地址就不是dxxx/mxxx他们对应的地址如下: S S0 ~S1028 0000H~03FFH Bit X X0~X377(Octal) 0400H~04FFH Bit
Y Y0~Y377(Octal) 0500H~05FFH Bit T T0~T255 0600F~06FFH Bit/Word M
M0~M4095 0800H~B9FFH Bit D D0~D9999 1000H~A70FH Word C C0~C199
0E00H~0EC7H Bit/Word C C199~C255 0EC8H~0EFFH Bit/Dword 台达的地址都是开放的,除了d1000-d1999/m1000-m1999中间有些地址是唯读的,大家不能修改外,其余应该都没问题,如果控制不了,可能是是地址错了。
2)功能码
4.2 VB与PLC通信的实现
以下举例说明现场设备与PLC通信的实现。
1)控制要求:控制PLC的起动、停止,并显示运行状态(绿色为运行,红色为停止);能够用交替型按钮控制Y0,Y1,并用指示灯显示Y0,Y1状态(绿色为运行,红色为停止);能够对D256,D512两个寄存器进行数值写入的操作。
2)实现思路:PLC起动停止的标志位为M1072,查DVP协议,知道地址为H0C30,按功
能码01操作; 同样Y0,Y1的地址分别为H0500,H0501。写入FF00为ON,0000为OFF,按功能码05操作;D256,D512地址分别为H1100,H1200,按功能码06操作即可。
3)VB接口的设计如图10所示。
图10 监控程序界面
用按钮控制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 String
c = 0
l = Len(str)
For c = c + 1 To l
c_data = Mid$(str, c, 2)
d_lrc = d_lrc + Val("&H" + c_data)
c = c + 1
Next c
If d_lrc > &HFF Then
d_lrc = d_lrc Mod &H100
End If
h_lrc = Hex(&HFF - d_lrc + 1)
If Len(h_lrc) > 2 Then
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)
End If
LRC = h_lrc
End Function
(2) 运行的开始就判断PLC的状态并设置标志位
Rem 初次运行打开串口,并显示PLC运行状态
Private Sub Form_Load()
Dim s1 As String
Dim s2 As String
Dim s22 As String
Dim s3 As String
Dim s4 As String
en = True
s2 = "01010C300001"
s22 = LRC(s2)
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
= s1
s3 =
s4 = Mid$(s, 6, 8)
If s4 = "0C30FF00" Then
plc = 1 Rem PLC为运行标志
Else
plc = 0 Rem PLC为停止标志
End If
End Sub
(3) 下面一段为用指示灯表示PLC的运行状态
Private Sub Timer5_Timer()
Dim s1 As String
Dim s2 As String
Dim s22
Dim s3 As String
Dim s4 As String
s2 = "01010C300001"
s22 = LRC(s2)
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
= s1
s3 =
s4 = Mid$(s3, 8, 2)
If s4 = "31" Then
plc = 1 Rem PLC为运行标志
Else: If s4 = "30" Then plc = 0 Rem PLC为停止标志
End If
If plc = 1 Then
n = "PLC正在运行......"
lor = RGB(0, 255, 0) Rem green
Else
n = "PLC已经停止"
lor = RGB(255, 0, 0) Rem red
End If
End Sub
(4) PLC的起动与停止
Rem 起动PLC
Private Sub start_Click()
Dim strout As String
d = False
str = "00050C30FF00"
Rem M1072 为PLC起动停止标志位。查地址表,M1072为00为置ON,0000为置OFF。
Rem 以上都是固定格式,要牢记。
LRCC = LRC(str) Rem 计算 str的lrc校验码。
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) Rem 欲传送之数据。13为D,10为A
= strout
d = True
End Sub
Rem 停止PLC
Private Sub stop_Click()
Dim strout As String
d = False
str = "00050C300000"
LRCC = LRC(str)
strout = ":" + str + LRCC + Chr$(13) + Chr$(10)
= strout
d = True
End Sub
Y0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。
5 结束语
VB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信
3A 30 31 30 35 30 35 30 30 46 46 30 30 46 36 0D 0A
十六进制::01 05 00 FF 00+(LRC)+(结束)
3A 30 31 30 35 30 38 30 30 46 46 30 30 46 33 0D 0A --将M0置为ON
3A 30 31 30 35 30 38 30 30 30 30 30 30 46 32 0D 0A --将M0置为OF
3A 30 31 30 31 30 35 30 30 46 39 0D 0A
3A 30 31 30 31 30 35 30 30 30 30 30 31 46 38 0D 0A
3A 30 31 30 31 30 38 30 30 30 30 30 33 46 33 0D 0A---查询多个位的状态(查M0、M1、M2的状态,返回值:3A 30 31 30 31 30 31 30 35 46 38 D A(十六进制::01010105F8)结果是05,也就是M0、M2=ON,M1=OF(二进制)
2 Modbus功能代码
共有三种类型分别为:
· 公共功能代码 已定义好的功能码,保证其唯一性,由认可。
· 用户自定义功能代码 有两组,分别为65~72和100~110,不需要认可,但不保证代码使用的唯一性,如想变为公共代码,需要RFC认可。
· 保留的功能代码 由某些公司使用在某些传统设备的代码,不可作为公共用途。
常用公共功能代码见表2。
功能码
常用公共功能代码
开关量输入
位
操
作
内部位或开关量输出
读输入点
读线圈
写单个线圈
写多个线圈
模拟量输入
16
位
操
内部寄存器或输出寄存器(模拟量输出)
作
读输入寄存器
读多个寄存器
写单个寄存器
写多个寄存器
十进码
子码
十六进制
02
01
05
15
04
03
06
16
02
01
05
0F
04
03
06
10
17
读/写多个寄存器
23
屏蔽写寄存器
文件记录
封装接口
读文件记录
写文件记录
读设备标识
22
20
21
43
6
6
14
16
14
15
2B
表2 常用公共功能代码
功能代码划按应用深浅分,可分为三个类别:
(1) 类别0,对于客户机/服务器最小的可用子集。
· 读多个保持寄存器(fc.3);
· 写多个保持寄存器(fc.16)。
(2) 类别1,可实现基本互易操作的常用代码。
· 读线圈(fc.1);
· 读开关量输入(fc.2);
· 读输入寄存器(fc.4);
· 写线圈(fc.5);
· 写单一寄存器(fc.6)。
(3) 类别2,用于人机界面、监控系统的例行操作和数据传送功能。
· 强制多个线圈(fc.15);
· 读通用寄存器(fc.20);
· 写通用寄存器(fc.21);
· 屏蔽写寄存器(fc.22);
· 读写寄存器(fc.23)。
3 Modbus应用举例:读寄存器
请求 功能码 1字节 0x03
起始地址 2字节 0x0000到0xFFFF
寄存器数 2字节 1到125(0x7D)
应答 功能码 1字节 0x03
字节数 1字节 2 x N
寄存器的值 N x 2字节
(N为寄存器的数量)
出错 出错码 1字节 0x83
例外码 1字节 01或02或03或04
4 Modbus TCP 请求报文举例,见表3。
表3
描述
MBAP
传输标志Hi
传输标志Lo
大小(字节)
1
1
示例
0x15
0x01
备注
传输标志用于和应答配合使用
每对传输使用唯一的标志
协议标志
长度
单元标志
功能代码
Modbus
请求
起始地址
寄存器数
2
2
2
1
2
2
0x0000
0x0006
0xFF
0x03
0x0005
0x0001
该域可用作寻址Modbus/
Modbus+子网络的路由,这
时,此值含有目的设备的地址
读寄存器
5 Modbus TCP客户端的实现
用Connect( )命令建立对目标设备TCP502端口的连接。
数据通讯的过程如下:
(1) 准备Modbus报文,包括7个字节的MBAP在内的请求;
(2) 使用Send( )命令发送;
(3) 在同一连接等待应答;
(4) 用recv( )读报文,完成一次数据交换过程。
当通讯任务结束时,关闭TCP连接,使服务器可以为其它设备服务。
6 Modbus TCP的样板程序
用户可以通过网络下载。
(1) 基于WIN32系统下,C的应用程序。
(2) 基于UNIX系统下,C的应用程序。
(3) JAVA的应用程序。
7 Modbus TCP协议
协议文本的英文版可从下载。
8 Modbus的应用
Modbus 是一种通讯协议,于 1979年由Modicon公司发明,并将其公开,推向市场,是基于主站从站/ 客户机服务器方式连接智能设备,实现设备间的数据交换。
Modbus 的通讯几乎可以通过任何物理介质实现,如:电线、光纤、红外、射频、扩频、微波、卫星等。Modbus 还可以通过不同的网络进行互连,如:以太网、ADSL、ISDN、PSTN、ATM、FR等。所以它具有很强的扩展能力,可以说:连接的距离已不是问题,它可以通过互联网,连接到世界的任何地方。
Modbus 具有很高的速度性能:响应时间小于10毫秒,目前可以满足工业控制中90% 应用的需求,它的下一个实现目标是:响应时间小于1毫秒。
由于Modbus 是制造业、基础设施环境下,真正的开放协议,故得到了工业界的广泛支持,是事实上的工业标准。还由于它的协议简单、容易实施和高性价比,所以全球有超过400个厂家支持,使用的设备节点超过700万个。
9 典型应用介绍
人机界面+可编程控制器+变频调速器应用(HMI+PLC+VSD)
这是一种设备制造商(OEM)和传统设备改造时,经常使用的方案,典型配置如图1所示。
图1 设备制造商或设备改造项目典型应用
图中人机界面可以是图形的,也可以是文字的,一般文字型HMI比图形的HMI要价格低廉。图中的变频器只画了一台,实际上使用RS485的多站总线,最多可以连接31台。可编程控制器可按工艺要求,可对变频器的速度进行调节。
完成上述方案的关键是用知道变频器内部的命令字和各参数的寄存器号,下面就施耐德公司的ATV58变频器来说明PLC是如何操作变频器的。
命令字CMD(变频器地址W400)
位15:1,简单控制方式;
位1:=0串行连接无效
=1串行连接有效;
位7:=0
=1 故障复位;
位8:=0 激活半行连接控制
=1 取消串行连接控制;
位11:=0 正转
=1 反转;
位12:=0 运行
=1 停止(减速停车);
位13:=0
=1 直流注入停车;
位14:=0
=1 快速停车。
可以通过可编程控制器的Modbus写命令,把代码发送到W400寄存器中,实现对变频器的控制。
举例:
正转运行 CMD="H"'002'
频率给定 W401 LFR
转速给定 W603 LFRD
反转运行 CMD="H"'802'
频率给定 W401LFR
转速给定 W603 LFRD
减速停车 CMD="H"'002'
直流注入停车CMD=H'A002'
快速停车 CMD="H"'C002'
自由停车 CMD="H"'000'
因为设备制造商对价格比较敏感,所以也有把上述标准的配置进行简化的版本,如图2所示。
图2 设备制造商或设备改造项目典型应用简化版
(a)省略人机界面HMI(b)省略PLC
控制和操作的原理基本上是相同的。
版权声明:本文标题:台达PLC通讯调试方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1706213630h504335.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论