首页 上一页 1 2 3 下一页 尾页

(已结束)工控PLC擂台第10期--PLC与变频器通讯。 点击:7414 | 回复:41



云锋

    
  • 精华:1帖
  • 求助:4帖
  • 帖子:252帖 | 5541回
  • 年度积分:0
  • 历史总积分:30376
  • 注册:2005年6月24日
发表于:2010-11-05 14:15:38
楼主

PLC、变频器品牌不限,通讯形式及内容不限。写出实现通讯所需硬件配置,并对相关程序作简要说明。

工控PLC擂台每周一期,本期下周末结贴。奖项设置:一等奖1名:50MP,二等奖5名:10MP,三等奖10名:30积分。

MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。

MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。




ZXC2010

  • 精华:0帖
  • 求助:5帖
  • 帖子:15帖 | 69回
  • 年度积分:0
  • 历史总积分:269
  • 注册:2010年10月09日
发表于:2010-11-05 14:20:10
1楼
表示关注...

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-11-05 14:28:38
2楼

嗯,可以考虑使用西门子的USS通讯或者ABB与KEB变频器的CANopen通讯。

 

西门子的USS通讯,无需使用特殊硬件,PLC与变频器都有集成的串口,简单,价廉。如果要使用总线的话,就需要额外使用通讯卡或适配器。

PLC 与驱动装置连接,主要实现的任务是:

控制驱动装置的启动、停止等运行状态
控制驱动装置的转速等参数
获取驱动装置的状态和参数

 

S7-200 和西门子传动装置主要可以通过以下几种方式连接在一起工作:

S7-200 通过数字量(DI/DO)信号控制驱动装置的运行状态和速度
S7-200 通过数字量信号控制驱动装置的运行状态;通过模拟量(AI/AO)信号控制转速等参数
S7-200 通过串行通信控制驱动装置的运行和各种参数

****************************************************************************************************


由于题目的需要,那就使用“S7-200 通过串行通信控制驱动装置的运行 ”,也就是控制启停。

S7-200 CPU 将在 USS 通信中作为主站。而变频器则为USS从站。
当S7-200的编程软件为V4.0 SP5以上的话,就包括USS协议指令库,以下介绍通过西门子提供的 USS 指令库与 MM 440 之间的串行通信控制。

1、关于指令库

        见下图,就是安装了USS协议指令库的指令树。

西门子的标准 USS 协议库以浅蓝色图标表示。如果未找到浅蓝色图标的指令库,说明系统中没有安装西门子标准指令库。必须先安装标准指令库。
2、USS 初始化指令

        西门子的 S7-200 USS 标准指令库包括 14 个子程序和 3 个中断服务程序。但是只有 8 个指令可供用户使用。一些子程序和所有中断服务程序都在调用相关的指令后自动起作用。每个 USS 库应用都要先进行 USS 通信的初始化。使用 USS_INIT 指令初始化 USS 通信功能。

打开 USS 指令库分支,像调用子程序一样调用 USS_INIT 指令。

图中:

a. EN: 初始化程序 USS_INIT 只需在程序中执行一个周期就能改变通信口的功能,以及进行其他一些必要的初始设置,因此可以使用 SM0.1 或者沿触发的接点调用 USS_INIT 指令;
b. Mode: 模式选择,执行 USS_INIT 时 ,Mode 的状态决定 是否在 Port 0 上使用 USS 通信功能;
      = 1 设置 Port 0 为 USS 通信协议并进行相关初始化
         0 恢复 Port 0 为 PPI 从站模式

c. Baud: USS 通信波特率。此参数要和变频器的参数设置一致;
      = 2400   2400 bit/s 
         4800   4800 bit/s 
        9600    9600 bit/s 
        19200 19200 bit/s 
        38400  38400 bit/s 
        57600 57600 bit/s 
     115200 115200 bit/s 

d. Active: 此参数决定网络上的哪些 USS 从站在通信中有效。详见下面的说明
e. Done: 初始化完成标志
f. Error: 初始化错误代码

 

Active 参数   USS_INIT 子程序的 Active 参数用来表示网络上哪些 USS 从站要被主站访问,即在主站的轮询表中激活。网络上作为 USS 从站的驱动装置每个都有不同的 USS 协议地址,主站要访问的驱动装置,其地址必须在主站的轮询表中激活。USS_INIT 指令只用一个 32 位长的双字来映射 USS 从站有效地址表,Active 的无符号整数值就是它在指令输入端的取值。

在上表中的这个 32 位的双字中,每一位的位号表示 USS 从站的地址号;要在网络中激活某地址号的驱动装置,则需要把相应位号的位置设为二进制“1",不需要激活 USS 从站,相应的位设置为”0"。最后对此双字取无符号整数就可以得出 Active 参数的取值。

将使用站地址为 3 的 MM 440 变频器,则须在位号为 03 的位单元格中填入二进制“1"。其他不需要激活的地址 对应的位设置为”0"。取整数,计算出的 Active 值为 00000008 h,即 16#00000008,也等于十进制数 8(如调用 USS_INIT 指令中的 d)

我一般都是使用 16 进制数,这样可以每 4 位一组进行加权计算出 16 进制数,并组合成一个整数。 如果一时难以计算出有多个 USS 从站配置情况下的 Active 值,可以使用 Windows 自带的计算器。将其设置为科学计算器模式,可以方便地转换数制。

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-11-05 15:13:13
3楼

3、分配库存储区地址

指令库或者向导都要求分配库存储区地址,这也是使用西门子200容易忽略的步骤。

USS 指令库需要大概 400 个字节的 V 存储区用于支持其工作。调用 USS_INIT 指令后就可以为 USS 指令库分配库存储区。也可以在编程的稍后阶段分配存储区地址,但这一步是必不可少的,否则程序无法通过编译。注意: S7-200 中的数据存储区分配原则,分配给库指令的数据区绝对不能与其他程序使用的数据区有任何重叠。否则会造成出错。



在指令树的Project(项目)中,以鼠标右键单击Program Block(程序块),在弹出的快捷菜单中选择Library Memory。如下图所示:




4、USS 驱动装置控制功能块
USS_CTRL 指令用于对单个驱动装置进行运行控制。这个功能块利用了 USS 协议中的 PZD 数据传输,控制和反馈信号更新较快。

网络上的每一个激活的 USS 驱动装置从站,都要在程序中调用一个独占的 USS_CTRL 指令,而且只能调用一次。需要控制的驱动装置必须在 USS 初始化指令运行时定义为“激活”。




在 USS 通信指令库分支中选择 USS_CTRL 指令



上图中:

a. EN: 使用 SM0.0 使能 USS_CTRL 指令
b. RUN: 驱动装置的启动/停止控制
= 0 停止
1 运行
此停车是按照驱动装置中设置的斜坡减速指电机停止
c. OFF2: 停车信号 2。此信号为“1"时,驱动装置将封锁主回路输出,电机自由停车
d. OFF3: 停车信号 3。此信号为”1"时,驱动装置将快速停车
e. F_ACK: 故障确认。当驱动装置发生故障后,将通过状态字向 USS 主站报告;如果造成故障的原因排除,可以使用此输入端清除驱动装置的报警状态,即复位。注意这是针对驱动装置的操作。
f. DIR: 电机运转方向控制。其“0/1”状态决定运行方向
g.Drive: 驱动装置在 USS 网络上的站号。从站必须先在初始化时激活才能进行控制
h.Type: 向 USS_CTRL 功能块指示驱动装置类型
= 0 MM 3 系列,或更早的产品
1 MM 4 系列,SINAMICS G 110


i. Speed_SP: 速度设定值。速度设定值必须是一个实数,给出的数值是变频器的频率范围百分比还是绝对的频率值取决于变频器中的参数设置(如 MM 440 的 P2009)
j. Resp_R: 从站应答确认信号。主站从 USS 从站收到有效的数据后,此位将为“1"一个程序扫描周期,表明以下的所有数据都是最新的
k. Error: 错误代码。0 = 无出错。其他错误代码请参考
l. Status: 驱动装置的状态字。此状态字直接来自驱动装置的状态字,表示了当时的实际运行状态

详细的状态字信息意义请参考相应的驱动装置手册。


m. Speed: 驱动装置返回的实际运转速度值,实数。是否频率值跟随设定值的规格化设定
n. Run_EN: 运行模式反馈,表示驱动装置是运行(为 1)还是停止(为 0)
o. D_Dir: 指示驱动装置的运转方向,反馈信号
p. Inhibit: 驱动装置禁止状态指示(0 - 未禁止,1 - 禁止状态)。禁止状态下驱动装置无法运行。要清除禁止状态,故障位必须复位,并且 RUN, OFF2 和 OFF3 都为 0
q. Fault: 故障指示位(0 - 无故障,1 - 有故障)。表示驱动装置处于故障状态,驱动装置上会显示故障代码(如果有显示装置)。要复位故障报警状态,必须先消除引起故障的原因,然后用 F_ACK 或者驱动装置的端子、或操作面板复位故障状态。



USS_CTRL 已经能完成基本的驱动装置控制,如果需要有更多的参数控制选项,可以选用 USS 指令库中的参数读写指令实现。



ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-11-05 15:16:39
4楼
5、MM 440 的参数设置

5.1 控制源参数设置
控制命令控制驱动装置的启动、停止、正/反转等功能。控制源参数设置决定了驱动装置从何种途径接受控制信号。

控制源由参数 P0700 设置,选择5






5.2 设定源控制参数
设定值控制驱动装置的转速/频率等功能。设定源参数决定了驱动装置从哪里接受设定值(即给定)。

设定源由参数 P1000 设置:同样选择5




5.3 USS 通信控制的参数设置


主要参数有:

1. P0700: 设置 P0700[0] = 5,即控制源来自 COM Link 上的 USS 通信
2. P1000: 设置 P1000[0] = 5,即设定源来自 COM Link 上的 USS 通信
3. P2009: 决定是否对 COM Link 上的 USS 通信设定值规格化,即设定值将是运转频率的百分比形式,还是绝对频率值

= 0 不规格化 USS 通信设定值,即设定为变频器中的频率设定范围的百分比形式。
1 对 USS 通信设定值进行规格化,即设定值为绝对的频率数值。


4. P2010: 设置 COM Link 上的 USS 通信速率。根据 S7-200 通信口的限制,支持的通信波特率有:

= 4 2400 bit/s
5 4800 bit/s
6 9600 bit/s
7 19200 bit/s
8 38400 bit/s
9 57600 bit/s
12 115200 bit/s


5. P2011: 设置 P2011[0] = 0 至 31,即驱动装置 COM Link 上的 USS 通信口在网络上的从站地址。

USS 网络上不能有任何两个从站的地址相同。


6. P2012: 设置 P2012[0] = 2,即 USS PZD 区长度为 2 个字长。
7. P2013: 设置 P2013[0] = 127,即 USS PKW 区的长度可变。
8. P2014: 设置 P2014[0] = 0 至 65535,即 COM Link 上的 USS 通信控制信号中断超时时间,单位为 ms。如设置为 0,则不进行此端口上
的超时检查。
此通信控制信号中断,指的是接收到的对本装置有效通信报文之间的最大间隔。如果设定了超时时间,报文间隔超过此设定时间还没有接收到
下一条信息,则会导致 F0072 错误,变频器将会停止运行。通信恢复后此故障才能被复位。
根据 USS 网络通信速率和站数的不同,此超时值会不同。如果要设定超时值,请参考相关表格,并选取一个适当的数值。
9. P0971: 设置 P0971 = 1,上述参数将保存入MM 440 的 EEPROM 中。

USS 通信是由 S7-200 和驱动装置配合,因此相关参数一定要配合设置。如通信速率设置不一样,当然无法通信。

#天涯

  • 精华:0帖
  • 求助:3帖
  • 帖子:100帖 | 2953回
  • 年度积分:0
  • 历史总积分:8816
  • 注册:2005年3月02日
发表于:2010-11-05 15:24:38
5楼

我这有个西门子的PLC和变频器DP通讯

一、硬件组态
1. 将MASTERDRIVES CBP/CBP2 加入组态
2. Profibus 地址
3. 将MICR.master4 加入组态
4. Profibus 地址
二、选择数据格式
1. MASTERDRIVE中可供选择的PP0类型
2. I/Q address
3. MICR.master4 中可供选择的数据格式
4. I/Q address
Step 7 中的编程
创建数据块DB1
说明:
1.在Step7 中对PKW (参数区)读写参数时调用SFC14和 SFC15
2. SFC14(“DPRD_DAT”)用于读Profibus 从站的数据
3. SFC15(“DPWR_DAT”)用于将数据写入Profibus 从站
4. W#16#100(即256)是硬件组态时PKW的起始地址
举例
读参数r015
1. W#16#100(即256)是硬件组态时PKW的起始地址
2 .将从站数据读入DB1.DBX0.0 开始的8个字节(P#DB1.DBX0.0 BYTE 8)
PKE -> DB1.DBW0
IND -> DB1.DBW2
PWE1 -> DB1.DBW4 参数值的高字位
PWE2 -> DB1.DBW6 参数值的低字位
3 .将DB1.DBX28.0 开始的8个字节写入从站(P#DB1.DBX28.0 BYTE 8)
DB1.DBW28 -> PKE
DB1.DBW30 -> IND
参数值的高字位 DB1.DBW32 -> PWE1
参数值的低字位 DB1.DBW34 -> PWE2
举例
 读参数P401.2
1. W#16#100(即256)是硬件组态时PKW的起始地址
2 .将从站数据读入DB1.DBX0.0 开始的8个字节(P#DB1.DBX0.0 BYTE 8)
PKE -> DB1.DBW0
IND -> DB1.DBW2
PWE1 -> DB1.DBW4 参数值的高字位
PWE2 -> DB1.DBW6 参数值的低字位
3 . 将DB1.DBX28.0 开始的8个字节写入从站(P#DB1.DBX28.0 BYTE 8)
DB1.DBW28 -> PKE
DB1.DBW30 -> IND
参数值的高字位 DB1.DBW32 -> PWE1
参数值的低字位 DB1.DBW34 -> PWE2
举例
3. 读参数U001.2


1. W#16#100(即256)是硬件组态时PKW的起始地址
2 .将从站数据读入DB1.DBX0.0 开始的8个字节(P#DB1.DBX0.0 BYTE 8)
PKE -> DB1.DBW0
IND -> DB1.DBW2
PWE1 -> DB1.DBW4 参数值的高字位
PWE2 -> DB1.DBW6 参数值的低字位
3 . 将DB1.DBX28.0 开始的8个字节写入从站(P#DB1.DBX28.0 BYTE 8)
DB1.DBW28 -> PKE
DB1.DBW30 -> IND
参数值的高字位 DB1.DBW32 -> PWE1
参数值的低字位 DB1.DBW34 -> PWE2

举例(写参数)
4. 写参数P401.1 (将W#16#1000 写入P401.1中)
1.将W#16# 8191 写入DB1.DBW28 (PWE)
1. W#16#100(即256)是硬件组态时PKW的起始地址
2 .将从站数据读入DB1.DBX0.0 开始的8个字节(P#DB1.DBX0.0 BYTE 8)
PKE -> DB1.DBW0
IND -> DB1.DBW2
PWE1 -> DB1.DBW4 参数值的高字位
PWE2 -> DB1.DBW6 参数值的低字位
3 . 将DB1.DBX28.0 开始的8个字节写入从站(P#DB1.DBX28.0 BYTE 8)
DB1.DBW28 -> PKE
DB1.DBW30 -> IND
参数值的高字位 DB1.DBW32 -> PWE1
参数值的低字位 DB1.DBW34 -> PWE2

对PZD (过程数据)的读写
说明:
1. 在Step7 中对PZD (过程数据)读写参数时调用SFC14和SFC15
2. SFC14(“DPRD_DAT”)用于读Profibus 从站的数据
3. SFC15(“DPWR_DAT”)用于将数据写入Profibus 从站
4. W#16#108(即264)是硬件组态时PZD的起始地址
5. 对特殊结构的PZD 可用PQW , PIW 进行读写
举例
5: 对PPO5 中10PZD的读写
DB1中与PZD相对应的数据字
1.在P918 中设置Profibus 地址,必须与Step 7 中设置相同.地址不能重复.
2. 控制字第十位置“1”. PZD1 = W#16#X4XX

 

#天涯

  • 精华:0帖
  • 求助:3帖
  • 帖子:100帖 | 2953回
  • 年度积分:0
  • 历史总积分:8816
  • 注册:2005年3月02日
发表于:2010-11-05 15:26:07
6楼
第一次添加图片,累死了。

gsja

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 175回
  • 年度积分:0
  • 历史总积分:730
  • 注册:2008年8月22日
发表于:2010-11-05 17:14:30
7楼
关于一楼的USS协议,我前不久用了一下,单台的变频器通讯没什么问题,但多台变频器通讯,有时的数据读出的是零,有没有多台通讯的例子,让大家学习一下,谢谢!

ANDYLIU008

  • 精华:1帖
  • 求助:2帖
  • 帖子:25帖 | 475回
  • 年度积分:0
  • 历史总积分:1867
  • 注册:2009年12月12日
发表于:2010-11-05 17:34:16
8楼
这个严重需要学习一下

芳季

  • [版主]
  • 精华:5帖
  • 求助:5帖
  • 帖子:86帖 | 5336回
  • 年度积分:0
  • 历史总积分:20165
  • 注册:2003年1月31日
发表于:2010-11-06 18:37:46
9楼

我上个程序200的。用一个通讯口控制4个变频器,OMRON的3G3MV。和一个伺服,富仕的w系列。

两个采用各自的通讯协议。OMRON用标准MODBUS协议。富仕用自由协议。

程序连续与5个下位通讯。不断切换软协议在自由协议和MODBUS之间。

程序没有完成。还有部分没有写好。一定不能用于使用上。只能了解一下思路吧。

芳季

  • [版主]
  • 精华:5帖
  • 求助:5帖
  • 帖子:86帖 | 5336回
  • 年度积分:0
  • 历史总积分:20165
  • 注册:2003年1月31日
发表于:2010-11-06 18:38:04
10楼
ORGANIZATION_BLOCK 主程序:OB1
TITLE=
VAR
无用:BOOL;
转换中间值:DWORD;
END_VAR
BEGIN
Network 1
LD SM0.1
CALL SBR0
Network 2
LSCR S0.0
Network 3 // 这里要定义好发送控制和接收控制的标志位。确立通讯中断关系。
LD SM0.0
CALL SBR3
SCRT S0.1
Network 4
SCRE
Network 5
LSCR S0.1
Network 6 // 对于读参数,不变的值
// 填写发送缓冲区。需要填写 站址;储存类别;地址L;地址M;地址H
LD SM0.0
MOVB 3, VB7
MOVB 3, VB20
MOVB 1, VB21
MOVB 1, VB22
MOVB 0, VB23
Network 7
LD SM0.0
CALL SBR6
SCRT S0.2

INCD AC0

Network 8
SCRE
Network 9 // 这里要判断超时;接收的错误;数据是否被修改。
LSCR S0.2
Network 10 // 一进入就开始计算通讯时间。
LDN M14.1
TON T40, 5
Network 11 // 通讯超时,远程没有响应,马上禁止接收。报告超时。
LD T40
EU
S M14.5, 1
R SM187.7, 1
RCV VB50, 1
Network 12 // 接收中断产生。应答信息等待处理。
// 这是32位BCD码转换32位十进制过程。
LD M14.0
= M14.1
CALL SBR5, VD79, L0.0, VD100
R M14.5, 1
R M14.0, 1
= Q0.0
Network 13
// 在接收回来的信息当中报警位有报警了,作一个标志。
LD M14.1
LPS
A V76.0
S M14.4, 1
LPP
AN V76.0
R M14.4, 1
Network 14 // 无报警、无消警请求,接收相等,切换协议M 超时了也不管了。切换M。
// 接收回来的参数与记录中的参一致。则无须再发送。直接转到协议m切换
// 读参数超时
LDN M14.4
ON M14.7
A M14.1
AD= VD100, VD400
O T40
LPS
AN SM0.0
SCRT S0.7
LPP
A SM0.0
SCRT S0.1
R T40, 1
Network 15 // 收完。不管值等不等,有消警要求就消警。
LD M14.1
A M14.4
A M14.7
SCRT S0.5
Network 16 // 收完。值不等。只有无报警了才写值。
LDN M14.4
AN M14.7
A M14.1
AD<> VD100, VD400
SCRT S0.3
Network 17
SCRE
Network 18
LDN M14.4
R M14.7, 1
Network 19
LSCR S0.3
Network 20 // 对于写参数,不变的值
// 填写发送缓冲区。需要填写 站址;储存类别;地址L;地址M;地址H
LD SM0.0
MOVB 3, VB7
MOVB 3, VB20
MOVB 1, VB21
MOVB 1, VB22
MOVB 1, VB23
Network 21
LD SM0.0
MOVB 0, VB26
CALL SBR10, VD400, L0.0, VD27
Network 22
LD L0.0
CALL SBR6
SCRT S0.4

INCD AC0

Network 23
SCRE
Network 24
LSCR S0.4
Network 25
LDN M14.0
TON T41, 5
Network 26
LD T41
EU
S M14.5, 1
R SM187.7, 1
RCV VB50, 1
Network 27
LD M14.0
= M14.2
R M14.5, 1
R M14.0, 1
= Q0.1
Network 28
// 只作标记不进行处理。
LD M14.2
A V76.6
S M14.6, 1
Network 29
LD M14.2
A V76.0
S M14.4, 1
Network 30 // 调试改过
LD M14.2
O T41
LPS
AN SM0.0
SCRT S0.7
LRD
A SM0.0
SCRT S0.1
LPP
R T41, 1
Network 31
SCRE
Network 32
LSCR S0.5
Network 33
// 填写准备发送的信息
LD SM0.0
MOVD 16#08000117, VD20
MOVW 0, VW24
Network 34 // 【发伺服6】程序自动计算 24 数据长度 2 数据数 18 数据部计数 14 指令
LD SM0.0
CALL SBR6
SCRT S0.6

INCD AC0

Network 35
SCRE
Network 36
LSCR S0.6
Network 37
LDN M14.3
TON T42, 5
Network 38
LD T42
EU
S M14.5, 1
R SM187.7, 1
RCV VB50, 1
Network 39 // 调试修改0.7改0.1
LD M14.0
S M14.3, 1
R M14.5, 1
R M14.0, 1
= Q0.2
Network 40
LD T42
O M14.3
LPS
R M14.3, 1
A SM0.0
SCRT S0.1
LPP
AN SM0.0
SCRT S0.7
Network 41
SCRE
Network 42
// ========================================================================================
// ========================================================================================
// ========================================================================================
// ========================================================================================
// ========================================================================================
LSCR S0.7
Network 43
LD SM0.0
S M15.0, 1
Network 44
LD M15.2
SCRT S1.0
Network 45
SCRE
Network 46
// 让Mbus_Ctrl指令执行一个周期后再继续。
LD M15.0
= M15.2
Network 47
LSCR S1.0
Network 48 // 信息包括: 从站地址 读写状态 MODBUS地址 数据数 缓冲区间接寻址
Network 49 // 固定内容
// 指示通讯为读状态。
// 给定通讯对象的地址。
// 连续数据数。
LD SM0.0
MOVB 0, VB202
MOVD 40045, VD203
MOVW 1, VW207
Network 50 // 可变内容
// 初始化要定义正确站号。变频器站号从3开始。7是空的第一个站址。
LDB>= VB201, 7
MOVB 3, VB201
Network 51 // 可变内容
// 根据目前站号,更新通讯缓冲区指针。
// 资料填写完毕。提交申请
LDN M15.1
LPS
AB= VB201, 3
MOVW 300, VW211
LRD
AB= VB201, 4
MOVW 302, VW211
LRD
AB= VB201, 5
MOVW 304, VW211
LRD
AB= VB201, 6
MOVW 306, VW211
LPP
S M15.1, 1
Network 52
// 请求已经接纳。
LDN M24.2
SCRT S1.1
Network 53
SCRE
Network 54
LSCR S1.1
Network 55
// 已经有结果了。兼做出错处理。
LDN M15.1
A M24.2
SCRT S1.2
AB<> VB213, 0
S M24.3, 1
Network 56
SCRE
Network 57
LSCR S1.2
Network 58
// 更新通讯参数,准备下一个站的通讯。
//
// 信息包括:
// 从站地址
// 读写状态
// MODBUS地址
// 数据数
// 缓冲区间接寻址
Network 59 // 固定内容
LDN M15.1
LPS
MOVB 1, VB202
MOVD 40002, VD203
MOVW 2, VW207
AB= VB201, 3
MOVW 310, VW211
LRD
AB= VB201, 4
MOVW 314, VW211
LRD
AB= VB201, 5
MOVW 318, VW211
LRD
AB= VB201, 6
MOVW 322, VW211
LPP
S M15.1, 1
Network 60
LDN M24.2
SCRT S1.3
Network 61
SCRE
Network 62
LSCR S1.3
Network 63
// 已经有结果了。兼做出错处理。
LDN M15.1
A M24.2
LPS
EU
INCB VB201
LRD
AN C0
SCRT S1.0
LRD
A C0
R M15.0, 1
SCRT S0.0
LPP
AB<> VB213, 0
S M24.3, 1
Network 64
SCRE
Network 65
// 这是计算MODBUS通讯多少次后伺服再通讯1次。
LD S1.3
LD C0
CTU C0, VW404
Network 66
LD M15.0
= L60.0
LD M15.0
= L63.7
LD L60.0
CALL SBR2, L63.7, 9600, 2, 1000, M24.1, VB200
Network 67
LD M15.0
= L60.0
LD M15.1
A M24.2
= L63.7
LD L60.0
CALL SBR7, L63.7, VB201, VB202, VD203, VW207, VD209, M24.2, VB213
Network 68
LD M15.1
EU
= M15.3
Network 69
LD M24.2
R M15.1, 1
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK 初始0:SBR0
TITLE=
BEGIN
Network 1
LD SM0.0
ENI
Network 2
LD SM0.0
MOVD 16#01000000, SD0
Network 3
// 变频器通讯站号由3开始。
LD SM0.0
MOVB 3, VB201
Network 4
// 接收缓冲区从vb300开始
LD SM0.0
MOVD &VB300, VD209
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 域和:SBR1
TITLE=子程序注释
// 程序目的:
// 把指定连续V区域中的整数进行求和。
// 适用范围:
// 不适合在中断中使用。建议在使用时通过边缘指令调用一次。
// 参数类型:
// 连续数 字。总共参与计算的字的个数。
// 起始位 偏移量,字。第一个数据的地址相对VB0的增量。
// 模式 字节。计算对象的位长。0:8位;1:16位;2:32位。
// 执行过程:每执行一次得到一次计算结果。
// 程序密码:YH
VAR_INPUT
连续数:WORD;
首址偏移:WORD; // 这是对VB0的偏移量。
模式:BYTE; // 0:字节;1:字;2:双字
END_VAR
VAR_OUTPUT
域和:DWORD;
END_VAR
VAR
循环值:WORD;
过程量:DWORD;
起始位:DWORD;
END_VAR
BEGIN
Network 1 // 此 POU 受密码保护,不能编辑和查看。

END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK MBUS_CTRL_P1:SBR2
TITLE=本代码归西门子能源与自动化公司专有,它属于附加软件包“Modbus 主站端口 1 库”的一部分。
VAR_INPUT
Mode:BOOL; // 1 = Modbus, 0 = PPI(终止 Modbus)
Baud:DWORD; // 1200, 2400 ... 115200
Parity:BYTE; // 0 = 无,1 = 奇校验,2 = 偶校验
Timeout:INT; // 以毫秒表示的从站响应超时
END_VAR
VAR_OUTPUT
Done:BOOL; // 完成标记(始终设置)
Error:BYTE; // 错误状态

END_VAR
VAR
AC0save:DWORD;
AC1save:DWORD;
AC2save:DWORD;
AC3save:DWORD;
END_VAR
BEGIN
Network 1 // 此 POU 受密码保护,不能编辑和查看。

END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 协议S3:SBR3
TITLE=子程序注释
BEGIN
Network 1
LD SM0.0
MOVB 2#1001001, SMB130
Network 2 // 发送完成定义中断
LD SM0.0
ATCH INT0, 26
ATCH INT1, 24
Network 3 // SC 起始字符
LD SM0.0
= SM187.6
Network 4 // ec 结束字符
LDN SM0.0
= SM187.5
Network 5 // il 空闲线时间
LD SM0.0
= SM187.4
Network 6 // c/m 字符间隔计时/信息间隔计时
LDN SM0.0
= SM187.3
Network 7 // trm 超时
LD SM0.0
= SM187.2
Network 8 // bk 断点条件
LDN SM0.0
= SM187.1
Network 9 // 固定是0
LDN SM0.0
= SM187.0
Network 10 // 起始字符
LD SM0.0
MOVB 16#5A, SMB188
Network 11 // 空闲线时间
LD SM0.0
MOVW 2, SMW190
Network 12 // 超时结束
LD SM0.0
MOVW 50, SMW192
Network 13 // 最大字符数
LD SM0.0
MOVB 50, SMB194
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 协议M4:SBR4
TITLE=子程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
LD SM0.0
DTCH 24
DTCH 26
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK BCD_DI:SBR5
TITLE=
// LIBARY: BCD
// ===========
//
//
// LIABILITY
// Siemens AG does not accept liability of any kind for damages arising from the use of this application, except where it is obliged to by law, in cases such as damage to items used for personal purposes, personal injury, willful damage or gross negligence.
//
// WARRANTY
// The program examples given are specific solutions to complex tasks which were worked on by Customer Support. We must also point out that it is not possible in the current state of the technology to exclude all errors in software programs under all conditions of use. The program examples were prepared according to the best of our knowledge. However, we cannot accept any liability beyond the standard guarantee for Class C software in accordance with our General Terms of Sale for Software Products for Automation and Drive Technology". The program examples can be purchased on the Internet as single licenses. They may not be transferred to a third party.
//
// PASSWORD
// The password of the library is "1234"
//
// BCD_DI
// BCD to Double Integer Conversion
//
// Inputs/Outputs Operands Data Types
// IN (LAD, FBD) VD, ID, QD, MD, SD, SMD, LD, T, C, AID, AC, Constant, *VD, *AC, *LD DINT
// OUT VD, ID, QD, MD, SD, SMD, LD, T, C, AC, *VD, *LD, *AC DINT
//
// The BCD to Double Integer instruction converts the binary-coded decimal value IN to an double integer value and loads the result into the variable specified by OUT. The valid range for IN is 0 to 99999999 (BCD).
//
// The ENO-bit (output enable) is set in the valid range of values and 0 if the input-values are out of range.
VAR_INPUT
IN:DINT;
END_VAR
VAR_OUTPUT
ENO:BOOL;
OUT:DINT;
END_VAR
VAR
TEMP1:INT;
TEMP2:DINT;
TEMP3:DINT;
TEMP4:INT;
TEMP5:DINT;
TENO1:BOOL;
TENO2:BOOL;
END_VAR
BEGIN
Network 1 // 此 POU 受密码保护,不能编辑和查看。

END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 发伺服6:SBR6
TITLE=本程序自动计算
// 24 数据长度
// 2 数据数
// 18 数据部计数
// 14 指令
VAR
连续数:INT;
发送指针:DWORD;
偏移:INT;
和首指针:DWORD;
BCC位置:DWORD;
连续数D:DWORD;
和32位:DWORD;
END_VAR
BEGIN
Network 1
// 确定数据长度。读参数。
LDB= VB23, 0
MOVB 7, VB24
Network 2
// 确定数据长度。写参数。
LDB= VB23, 1
MOVB 5, VB24
Network 3
// 确定数据长度。复报警。
LDB= VB23, 16#17
MOVB 0, VB24
Network 4 // 数据部计算 读参数和复位报警。 数据数计算
LDB= VB23, 0
OB= VB23, 17
MOVB 6, VB18
MOVB 23, VB2
Network 5 // 数据部计算 写参数。 数据数计算
LDB= VB23, 1
MOVB 11, VB18
MOVB 28, VB2
Network 6 // 指令
LDB= VB23, 0
MOVB 16#50, VB14
Network 7 // 指令
LDB= VB23, 1
OB= VB23, 17
MOVB 16#51, VB14
Network 8 // 计算发送字节数
LD SM0.0
MOVB VB2, VB0
INCB VB0
INCB VB0
INCB VB0
Network 9 // 计算BCC位置
LD SM0.0
LPS
MOVD &VB0, LD2
AENO
MOVD LD2, LD8
+D +2, LD8
LRD
BTI VB2, LW0
AENO
INCW LW0
AENO
ITD LW0, LD16
LPP
MOVD LD8, LD12
+D LD16, LD12
Network 10
LD SM0.0
CALL SBR1, LW0, LW10, 0, LD20
INVD LD20
INCD LD20
INCD AC0
XMT VB0, 1
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK MBUS_MSG_P1:SBR7
TITLE=本代码归西门子能源与自动化公司专有,它属于附加软件包“Modbus 主站端口 1 库”的一部分。
VAR_INPUT
First:BOOL; // 新消息(设置为 1 时仅对新请求扫描一次)
Slave:BYTE; // 从站地址(0 到 247)
RW:BYTE; // 读 = 0,写 = 1
Addr:DWORD; // Modbus 地址(即 40001)
Count:INT; // 元素个数(1 到 120 个字或 1 到 1920 位)
DataPtr:DWORD; // 数据指针(即 &VB100)
END_VAR
VAR_OUTPUT
Done:BOOL; // 完成标记(0 = 忙,1 = 完成)
Error:BYTE; // 错误(0 = 无错误)

END_VAR
VAR
AC0save:DWORD;
AC1save:DWORD;
AC2save:DWORD;
END_VAR
BEGIN
Network 1 // 此 POU 受密码保护,不能编辑和查看。

END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK MBUSM1_P1:SBR8
TITLE=本代码归西门子能源与自动化公司专有,它属于附加软件包“Modbus 主站端口 1 库”的一部分。
VAR_OUTPUT
crc:WORD;
END_VAR
VAR
count:INT;
ptr:DWORD;
END_VAR
BEGIN
Network 1 // 此 POU 受密码保护,不能编辑和查看。

END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK DI_BCD:SBR10
TITLE=
// LIBARY: BCD
// ===========
//
//
// LIABILITY
// Siemens AG does not accept liability of any kind for damages arising from the use of this application, except where it is obliged to by law, in cases such as damage to items used for personal purposes, personal injury, willful damage or gross negligence.
//
// WARRANTY
// The program examples given are specific solutions to complex tasks which were worked on by Customer Support. We must also point out that it is not possible in the current state of the technology to exclude all errors in software programs under all conditions of use. The program examples were prepared according to the best of our knowledge. However, we cannot accept any liability beyond the standard guarantee for Class C software in accordance with our General Terms of Sale for Software Products for Automation and Drive Technology". The program examples can be purchased on the Internet as single licenses. They may not be transferred to a third party.
//
// PASSWORD
// The password of the library is "1234"
//
// DI_BCD
// Double Integer to BCD Conversion
//
// Inputs/Outputs Operands Data Types
// IN (LAD, FBD) VD, ID, QD, MD, SD, SMD, LD, T, C, AID, AC, Constant, *VD, *AC, *LD DINT
// OUT VD, ID, QD, MD, SD, SMD, LD, T, C, AC, *VD, *LD, *AC DINT
//
// The Double Integer to BCD instruction converts the input double integer value IN to a binary-coded decimal and loads the result into the variable specified by OUT. The valid range for IN is 0 to 99999999.
//
// The ENO-bit (output enable) is set in the valid range of values and 0 if the input-values are out of range.
VAR_INPUT
IN:DINT;
END_VAR
VAR_OUTPUT
ENO:BOOL;
OUT:DINT;
END_VAR
VAR
TEMP1:DINT;
TEMP2:DINT;
TEMP3:DINT;
TEMP4:DINT;
TENO1:BOOL;
TENO2:BOOL;
END_VAR
BEGIN
Network 1 // 此 POU 受密码保护,不能编辑和查看。

END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK S发完0:INT0
TITLE=此中断程序的连接是在【协议S3】子程序中定义的。
BEGIN
Network 1 // 发送完成中断
// 网络注释
LD SM0.0
= SM187.7
RCV VB50, 1
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK S收完1:INT1
TITLE=此中断程序的连接是在【协议S3】子程序中定义的。
BEGIN
Network 1 // 接收完成中断
LD SM0.0
= M14.0
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK MBUSM2_P1:INT2
TITLE=本代码归西门子能源与自动化公司专有,它属于附加软件包“Modbus 主站端口 1 库”的一部分。
BEGIN
Network 1 // 此 POU 受密码保护,不能编辑和查看。

END_INTERRUPT_BLOCK

芳季

  • [版主]
  • 精华:5帖
  • 求助:5帖
  • 帖子:86帖 | 5336回
  • 年度积分:0
  • 历史总积分:20165
  • 注册:2003年1月31日
发表于:2010-11-06 19:23:32
11楼

下面是程序的数据块

《》《》《》《》《》《》《》《》《》《》《》《》《》《》

//对照伺服手册地址,本地址要减一
发送缓冲 0
VB1 90 // 起始码
VB2 0 //数据数。(
//计算获得。)
VB3 0 // 固定值
VB4 255 // 处理状态
VB5 123 // 连接方式,固定
VB6 0 //站号高位
VB7 0 //站号低位
VB8 17 // 固定
VB9 0 // 固定
VB10 255 // 固定
VB11 255 // 固定
VB12 255 // 固定
VB13 255 // 固定
VB14 0 //指令。(
//根据指令选择。)
VB15 0 // 模式,固定
VB16 0 // 结束信息,固定
VB17 1 // 顺序命令号码,固定
VB18 0 //数据部计数。(
//计算获得)
VB19 0 // 固定值
//以下属于数据部
VB20 0 //存储器类别
VB21 0 //地址L
VB22 0 //地址M
VB23 0 //地址H
VB24 0 //数据长度
VB25 0 // 固定
//这里开始是指令的参数。读参数命令没有参数携带。
//VB26开始是数据
//BCC(
//计算获得)

LIUXD6909

  • 精华:2帖
  • 求助:11帖
  • 帖子:145帖 | 5530回
  • 年度积分:1300
  • 历史总积分:29990
  • 注册:2008年4月27日
发表于:2010-11-06 21:48:17
12楼
叹……论坛上真高手如云!期盼能传上富士G1S和三菱FX1N通讯控制程序。

minilee

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 7回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2010年9月04日
发表于:2010-11-07 13:14:27
13楼
论坛上真高手如云!期盼能传上富士G1S和三菱FX1N通讯控制程序

莫子辰

  • 精华:1帖
  • 求助:11帖
  • 帖子:20帖 | 939回
  • 年度积分:0
  • 历史总积分:5186
  • 注册:2010年5月12日
发表于:2010-11-07 20:56:07
14楼
我用过三菱2n写过和ABB的MODBUS RTU通讯,感觉没有什么难度CRC校验程序

昆山中宇工控网

  • 精华:1帖
  • 求助:0帖
  • 帖子:19帖 | 688回
  • 年度积分:0
  • 历史总积分:1438
  • 注册:2004年8月26日
发表于:2010-11-07 22:32:21
15楼

这个讨论好

我在学习三菱PLC与变频器通迅

台达PLC于变频器通迅

其它有点难

大家有什么交流一下心得哦

昆山中宇工控,诚交天下工控朋友

彩虹

  • 精华:2帖
  • 求助:4帖
  • 帖子:54帖 | 1626回
  • 年度积分:8
  • 历史总积分:7586
  • 注册:2006年9月21日
发表于:2010-11-08 21:32:46
16楼

  没有多少很好的 ,各位加油啊!!!

五花马

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 52回
  • 年度积分:0
  • 历史总积分:290
  • 注册:2006年8月15日
发表于:2010-11-09 10:01:19
17楼

用点其他的品牌学习学习,上面这些太常见了。

彩虹

  • 精华:2帖
  • 求助:4帖
  • 帖子:54帖 | 1626回
  • 年度积分:8
  • 历史总积分:7586
  • 注册:2006年9月21日
发表于:2010-11-09 11:43:48
18楼

 写程序一定要逻辑清晰可读性要强!!!才是好程序也才可以授人以鱼。

彩虹

  • 精华:2帖
  • 求助:4帖
  • 帖子:54帖 | 1626回
  • 年度积分:8
  • 历史总积分:7586
  • 注册:2006年9月21日
发表于:2010-11-09 14:29:41
19楼

我下面采用西门子PLC与丹佛斯变频器用Profibus通讯来控制变频器的运行。

下面是丹佛斯VLT5000变频器相关参数的设置,可以手动在变频器上设置,也可用软件编辑好后下载到变频器
此程序应该用指针来寻址编写就篇幅小一点,但在这里我还是用一般的写法来编辑对于编程还不是很好的同行能看懂。
其它的几个变频器的数据块是一样的,DB12 DB13 DB14 DB15 DB16,下面只展示一个DB11块,其实还可以自定义一个UDT1块,然后再建一个DB块,在DB块内的Type(数据类型)选择UDT1就很快建很多变频器的数据,一个数据块就可搞定。

彩虹

  • 精华:2帖
  • 求助:4帖
  • 帖子:54帖 | 1626回
  • 年度积分:8
  • 历史总积分:7586
  • 注册:2006年9月21日
发表于:2010-11-09 15:07:57
20楼

最后一张又显示不了再补上。


热门招聘
  • 客服
  • 小程序
  • 公众号
首页 上一页 1 2 3 下一页 尾页