台达PLC通讯调试方法.docx
- 文档编号:12841896
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:15
- 大小:61.66KB
台达PLC通讯调试方法.docx
《台达PLC通讯调试方法.docx》由会员分享,可在线阅读,更多相关《台达PLC通讯调试方法.docx(15页珍藏版)》请在冰豆网上搜索。
台达PLC通讯调试方法
台达PLC通讯调试方法。
台达PLC出厂通讯格式为,ASCII,9600,7,E,1,支持功能码03H,06H,10H,如用串口调试程序向PLC(站号为1)的D0写H1770,ASCII字符为:
“:
010610001770620d0a”应在串口调试程序中写入的16进制代码为:
3A30313036313030303137373036320D0A注意阿ASCII模式下字符0对应16进制30H,1对应16进制31H,依次类推......
你的串口协议是对的,与PLC的默认协议完全相符,PLC不用再作协议设定。
你发送的数据中有几个错误:
1、尾码不是0A0D,而应是0D0A。
2、16进制数据与ASCII码混在了一起,"010104000010"是ASCII码,应全部转换为16进制。
正确的字符串数据是=":
"+"0101040010"+LRC码("EA")+CR(0D)+LF(0A)
转换为16进制="3A3031303130343030313045410D0A",你把引号内的内容复制到你的串口调试软件中,按16进制发送试试。
我已经试过了,返回数据是=":
01810777" (3A30313831303737370D0A)
我是一个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他们对应的地址如下:
SS0~S10280000H~03FFHBit XX0~X377(Octal)0400H~04FFHBit YY0~Y377(Octal)0500H~05FFHBit TT0~T2550600F~06FFHBit/Word MM0~M40950800H~B9FFHBit DD0~D99991000H~A70FHWord CC0~C1990E00H~0EC7HBit/Word CC199~C2550EC8H~0EFFHBit/Dword台达的地址都是开放的,除了d1000-d1999/m1000-m1999中间有些地址是唯读的,大家不能修改外,其余应该都没问题,如果控制不了,可能是是地址错了。
2)功能码
4.2VB与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算法校验的实现
PublicFunctionLRC(strAsString)AsString
c=0
l=Len(str)
Forc=c+1Tol
c_data=Mid$(str,c,2)
d_lrc=d_lrc+Val("&H"+c_data)
c=c+1
Nextc
Ifd_lrc>&HFFThen
d_lrc=d_lrcMod&H100
EndIf
h_lrc=Hex(&HFF-d_lrc+1)
IfLen(h_lrc)>2Then
h_lrc=Mid(h_lrc,Len(h_lrc)-1,2)
EndIf
LRC=h_lrc
EndFunction
(2)运行的开始就判断PLC的状态并设置标志位
Rem初次运行打开串口,并显示PLC运行状态
PrivateSubForm_Load()
Dims1AsString
Dims2AsString
Dims22AsString
Dims3AsString
Dims4AsString
MSComm1.PortOpen=True
s2="01010C300001"
s22=LRC(s2)
s1=":
"+s2+s22+Chr$(13)+Chr$(10)
MSComm1.Output=s1
s3=MSComm1.Input
s4=Mid$(s,6,8)
Ifs4="0C30FF00"Then
plc=1RemPLC为运行标志
Else
plc=0RemPLC为停止标志
EndIf
EndSub
(3)下面一段为用指示灯表示PLC的运行状态
PrivateSubTimer5_Timer()
Dims1AsString
Dims2AsString
Dims22
Dims3AsString
Dims4AsString
s2="01010C300001"
s22=LRC(s2)
s1=":
"+s2+s22+Chr$(13)+Chr$(10)
MSComm1.Output=s1
s3=MSComm1.Input
s4=Mid$(s3,8,2)
Ifs4="31"Then
plc=1RemPLC为运行标志
Else:
Ifs4="30"Thenplc=0RemPLC为停止标志
EndIf
Ifplc=1Then
Label2.Caption="PLC正在运行......"
Shape1.FillColor=RGB(0,255,0)Remgreen
Else
Label2.Caption="PLC已经停止"
Shape1.FillColor=RGB(255,0,0)Remred
EndIf
EndSub
(4)PLC的起动与停止
Rem起动PLC
PrivateSubstart_Click()
DimstroutAsString
Timer5.Enabled=False
str="00050C30FF00"
RemM1072为PLC起动停止标志位。
查地址表,M1072为OC30.FF00为置ON,0000为置OFF。
Rem以上都是固定格式,要牢记。
LRCC=LRC(str)Rem计算str的lrc校验码。
strout=":
"+str+LRCC+Chr$(13)+Chr$(10)Rem欲传送之数据。
13为D,10为A
MSComm1.Output=strout
Timer5.Enabled=True
EndSub
Rem停止PLC
PrivateSubstop_Click()
DimstroutAsString
Timer5.Enabled=False
str="00050C300000"
LRCC=LRC(str)
strout=":
"+str+LRCC+Chr$(13)+Chr$(10)
MSComm1.Output=strout
Timer5.Enabled=True
EndSub
Y0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。
D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。
5结束语
VB语言易于编程使用,为与串行设备的通信提供了很大的方便。
台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。
由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信
3A30313035303530304646303046360D0A
十六进制:
:
010500FF00+(LRC)+(结束)
3A30313035303830304646303046330D0A--将M0置为ON
3A30313035303830303030303046320D0A--将M0置为OF
3A303130313035303046390D0A
3A30313031303530303030303146380D0A
3A30313031303830303030303346330D0A---查询多个位的状态(查M0、M1、M2的状态,返回值:
3A30313031303130354638DA(十六进制:
:
01010105F8)结果是05,也就是M0、M2=ON,M1=OF(二进制)
2 Modbus功能代码
共有三种类型分别为:
· 公共功能代码 已定义好的功能码,保证其唯一性,由Modbus.org认可。
· 用户自定义功能代码 有两组,分别为65~72和100~110,不需要认可,但不保证代码使用的唯一性,如想变为公共代码,需要RFC认可。
· 保留的功能代码 由某些公司使用在某些传统设备的代码,不可作为公共用途。
常用公共功能代码见表2。
常用公共功能代码
功能码
十进码
子码
十六进制
位
操
作
开关量输入
读输入点
02
02
内部位或开关量输出
读线圈
01
01
写单个线圈
05
05
写多个线圈
15
0F
16
位
操
作
模拟量输入
读输入寄存器
04
04
内部寄存器或输出寄存器(模拟量输出)
读多个寄存器
03
03
写单个寄存器
06
06
写多个寄存器
16
10
读/写多个寄存器
23
17
屏蔽写寄存器
22
16
文件记录
读文件记录
20
6
14
封装接口
写文件记录
21
6
15
读设备标识
43
14
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字节 2xN
寄存器的值 Nx2字节
(N为寄存器的数量)
出错 出错码 1字节 0x83
例外码 1字节 01或02或03或04
4 ModbusTCP请求报文举例,见表3。
表3
描述
大小(字节)
示例
备注
MBAP
传输标志Hi
1
0x15
传输标志用于和应答配合使用
传输标志Lo
1
0x01
每对传输使用唯一的标志
协议标志
2
0x0000
该域可用作寻址Modbus/
Modbus+子网络的路由,这
时,此值含有目的设备的地址
长度
2
0x0006
单元标志
2
0xFF
Modbus
请求
功能代码
1
0x03
读寄存器
起始地址
2
0x0005
寄存器数
2
0x0001
5 ModbusTCP客户端的实现
用Connect()命令建立对目标设备TCP502端口的连接。
数据通讯的过程如下:
(1) 准备Modbus报文,包括7个字节的MBAP在内的请求;
(2) 使用Send()命令发送;
(3) 在同一连接等待应答;
(4) 用recv()读报文,完成一次数据交换过程。
当通讯任务结束时,关闭TCP连接,使服务器可以为其它设备服务。
6 ModbusTCP的样板程序
用户可以通过网络下载。
(1) 基于WIN32系统下,C的应用程序。
(2) 基于UNIX系统下,C的应用程序。
(3) JAVA的应用程序。
7 ModbusTCP协议
协议文本的英文版可从www.modbus.org下载。
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'
频率给定W401LFR
转速给定W603LFRD
反转运行CMD="H"'802'
频率给定W401LFR
转速给定W603LFRD
减速停车CMD="H"'002'
直流注入停车CMD=H'A002'
快速停车CMD="H"'C002'
自由停车CMD="H"'000'
因为设备制造商对价格比较敏感,所以也有把上述标准的配置进行简化的版本,如图2所示。
图2 设备制造商或设备改造项目典型应用简化版
(a)省略人机界面HMI(b)省略PLC
控制和操作的原理基本上是相同的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PLC 通讯 调试 方法