内容 | 
陈忠华(1938-)男,江苏苏州人,教授级高级工程师,1965年毕业于上海交通大学电磁理论研究生班。主要从事自动化领域的设计、制造工作,是国产第一条4米双向拉伸薄膜生产线电气控制系统的总负责人。近年来,还承担“长江三峡大坝泄洪闸门控制系统”的设计、制造任务。曾获多项国家科技进步奖。近期著作有《可编程序控制器与工业现场总线》、《可编程序控制器与工业自动化系统》等。
在现代的各种控制项目中都大量使用可变速传动装置,包括直流数字传动、交流变频和交流伺服系统。作为政府的长远经济政策,大力提倡低碳经济和使用各种节能设备,对于感应电动机一类的设备(特别是风机、泵类驱动),采用可变速传动装置是最为有效的节能措施。对其它的大型成套设备(例如轧钢设备、造纸设备、高速彩印设备、双向拉伸薄膜生产线等),不仅使用了大量的可变速传动装置,还有高同步精度和其它一些技术要求。
用PLC实现对大量的可变速传动装置的控制,采用传统的方法(模拟量设定和开关量I/O控制),已经不能完全满足技术要求(例如控制精度不够、不能保证精确同步、不能采集到大量的现场设备信息、不能实现远程的参数设定和修改等),也很不经济,因为要使用大量的I/O模板,要敷设大量的控制电缆,增加了安装和维护的成本。还增大了产生故障的几率(由于节点和端子的增加)。解决上述矛盾的比较好的方法是采用PLC和现场总线技术,用通信的方法实现对大量可变速传动装置的控制。
本文就上述命题的实现方法、系统组态、通信协议和程序编写进行了详细介绍,还通过了一个具体的实例来说明程序的编写。
1 可变速传动通信中的过程数据通道和参数数据通道
为实现对可变速传动装置的通信需要区分“过程数据通道”和“参数数据通道”两类不同性质的数据通道。
通过过程数据通道传输过程数据:
控制器由过程数据进行控制;
过程数据的传输在时间上有严格的要求;
在上位PLC和控制器之间,过程数据是周期传输的(连续交换当前输入和输出数据);
上位PLC能直接访问过程数据。例如,在PLC中直接分配到传动装置的I/O区域;
过程数据在控制器内不被保存(掉电时过程数据将丢失);
作为过程数据的例子,例如:设备的控制字和设定值(写过程数据),状态字和实际值(读过程数据)。
通过参数数据通道传输参数数据:
参数数据通道提供用来访问所有的可变速传动装置的参数
代码;
通常参数数据的传输在时间上没有十分严格的要求;
在通信行规中如果执行的是DP-V0协议,则参数数据也需要进行周期传送。在DP-V0协议中参数数据通道被激活后,除了过程输入数据和过程输出数据外,参数数据另占据4个字;
在通信行规中如果执行的是DP-V1协议,参数数据可以实现非周期的传送;
作为参数数据的例子,有操作参数(例如伦茨9400伺服控制器中的C00006控制方式的选择、C00105电动机快停的执行时间、C00070速度控制器的增益、C00072速度控制器的积分时间常数),诊断信息(C00061控制器功率单元散热器温度、C00062控制器内部的温度)和电动机数据(C00011电动机的额定速度、C00022电动机的最大允许电流、C00063电动机当前温度值)等。
2 实现任务的PLC侧硬件组态
笔者用西门子公司的S7300 PLC实现对西门子公司的6RA70直流传动装置和伦茨公司的9400交流伺服控制装置进行通信,作为例子,介绍PLC侧的系统硬件组态,硬件包括PLC的CPU,一块32点的DI模板和一块32点的DO模板,6RA70的DP通信模板CBP2和9400控制器的通信模板E94AYCPM。图1和图2为应用STEP 7软件完成的项目硬件组态,项目名称为“可变速传动装置通信示例”。
图1 硬件组态中对6R A7 0 装置的“ 参数过程数据通道”和“过程数据通道”的定义
图1 是对6R A7 0 装置的组态, 选择“ 参数过程数据目标”PPO1(见图1右侧红色椭圆标记)。PPO1表示选择4个参数数据字(PKW),它们的读地址为PIW256至PIW263,写地址为PQW256至PQW263,PPO1还定义2个过程数据字(PZD),它们的读地址为PIW264至PIW267,写地址为PQW264至PQW267(见图1下方的红色椭圆标记)。

图2 硬件组态中对伦茨9400装置的“ 参数过程数据通道”和“过程数据通道”的定义
图2是对伦茨9400装置的组态,选择参数数据和3个过程数据 (见图2右侧红色椭圆标记)。选择的4个参数数据字(PAR),它们的读地址为PIW268至PIW275,写地址为PQW268至PQW275,同时定义3个过程数据字(PZD),它们的读地址为PIW276至PIW281,写地址为PQW276至PQW281(见图2下方的红色椭圆标记)。
4个参数数据字的详细定义和报文结构将在第Ⅳ节中介绍。
6RA70的两个读PZD,一个定义成“状态字”(16位),另一个定义成实际值(16位整型数),6RA70的两个写PZD,一个定义成“控制字”(16位),另一个定义成设定值(16位整型数)。
伦茨9400装置的参数通道也定义为4个字,过程数据读/写的定义,和6RA70一样,只是实际值和设定值都是32位的双整型数。
3 实现过程数据PZD的通信

图3 对伦茨9400伺服装置实现“过程数据”和“参数数据”通信的程序编写
图3表示对伦茨9400伺服装置,实现“过程数据”和“参数数据”通信程序编写的程序结构。本节先说明过程数据PZD的通信程序编写。
首先要建立一个过程数据读/ 写的缓冲数据块( 例如,DB20),数据块中数据地址按控制字(16位)、设定值(32位)、状态字(16位)实际值(32位)的次序排列。
表1列出了DB20的具体内容。

表1也同时给出了根据“PROFIdrive”(可变速传动技术行规)标准,对“控制字”和“状态字”各个“位”的定义。
应用STEP 7提供的系统功能SFC 14(DPRD_DAT)完成过程数据的读程序,读到的过程数据状态字和实际速度存放在数据块DB20中从地址6.0开始的连续6个字节中,如图4所示。

图4 应用系统功能SFC 14读过程数据的程序
应用STEP 7提供的系统功能SFC 15(DPWR_DAT)完成过程数据的写程序,将过程数据控制字和设定速度从数据块DB20中从地址0.0开始的连续6个字节写到9400装置中,如图5所示。

图5 应用系统功能SFC 15写过程数据字的程序
以上是PLC侧完成的过程数据读/写程序。除此之外,在9400伺服控制器侧还要进行相应的组态。这里要用到伦茨公司的L-force Engineer 组态软件。图6是应用该软件对“可变速传动装置通信示例”项目中9400装置组态的基本画面。

图6 应用L-force Engineer 组态软件对传动装置进行的组态
从图6中看到,该项目配置了PROFIBUS_V1.10通信模板,放置在装置的1号扩展槽上(见图6左侧红色椭圆标记)。在组态时选择该通信模板的站地址为4(在模板正面有硬件地址选择开关,同样要设置成4),这一站地址的选择要和PLC硬件组态时的从站站地址相一致。

图7 应用L-force Engineer 软件组态PROFIBUS通信的接收过程数据接收字PDO_RV0
图7是对PROFIBUS_DP通信模板的过程数据接收字PDO_RV0进行的组态,第1个过程数据字定义为LPortControl 1,其Offset地址为0,第2和第3个过程数据字定义为LPort32In 1(双字),其Offset地址为2。

图8 应用L-force Engineer 软件组态PROFIBUS通信的发送过程数据接收字PDO_TV0
图8是对PROFIBUS_DP通信模板的过程数据发送字PDO_TV0进行的组态,第1个过程数据字定义为LPortStatus 1,其Offset地址为0,第2和第3个过程数据字定义为LPort32Out 1(双字),其Offset地址为2。以上组态是在图7和图8的右侧上方,选择Process data objects项,并进入Edit PDO 对话框时进行的。这一组态步骤是在9400传动装置内部设定,用PROFIBUS_DP (V0标准)进行通信时,对接收的第1个过程数据字传送给LPortControl 1端口,对第2、第3个过程数据字,传送给LPort32In 1(双字)端口,同样内部设定从LPortStatus 1端口发送的是第1个发送过程数据字,从LPort32Out 1(双字)端口发送的是第2、第3个发送过程数据字。

图9 应用L-force Engineer 软件组态过程数据字和内部端口的连接
图9表示组态后的内部端口选择(高亮黑字)。
以上只是组态的第一步,接下来还要选择端口和内部功能的连接,需要通过L-force Engineer软件的FB Editor功能来完成。
如图10所示,应用L-force Engineer软件选择参数C03000(X Speed setpoint from)的源为171:Input port 1(32bit),这样就将过程数据接收字的第2和第3个字(LPort32In 1)内部连接为速度设定值,如图11所示,LPort32In 1最后连接到SpeedRamp(速度斜坡功能块)的dnSpeedSetpointIn_n作为装置的速度给定值,由于是32位的速度输入,当输入数字值为L#1073741824时,代表100%的设定速度输入(对应C00011参数设定的电动机最高转速,例如3000 rpm)。

图10 应用L-force Engineer 软件选择参数 C03000
(X Speed setpoint from)的源为171:Input port 1(32bit)

图11 应用L-force Engineer的FB Editor功能进行LPort32In 1的连接

图12 应用L-force Engineer软件选择参数C03009子代码04
(X Activ.fixed 1 with)的源为138:Control word 1 bit08
如图12所示,应用L-force Engineer软件选择参数C03009子代码04(X Activ.fixed 1 with)的源为138:Control word 1 bit08,这样就将过程数据接收字的第1个字(LPortControl 1)的第08位(bit08),作为开关信号用来控制转换速度设定值的源,变成由Jog1的固定速度值给定,如图13所示,SpeedRamp(速度斜坡功能块)的bJog1的控制端是由过程数据控制字的bi t08位(ControlWord.bit08)来控制的。

图13 应用L-force Engineer软件的FB Editor功能进行LPortcontrol 1的内部连接

图14 应用L-force Enginee软件r的FB Editor功能定义LPortstatus 1 的信号输出
图13表示过程数据控制字的16个位在本项目中的定义:图上只定义了4个位,即Bbit0(主开关接通),Bbit2(QSP快停的第2激活信号,快停的激活控制信号是“或”逻辑关系),Bbit7(故障复位控制信号),Bbit8(Jog1的固定速度值切换),其它12个位都没有定义,用户可以根据控制的需要,用L-force Engineer的FB Editor功能,自行定义。
传动装置和通信模板(例如,E94AYCPM模板)的操作说明书中都列出了包含该装置全部参数代码的代码表。
参数代码的变址号:
在DRIVECOM行规的参数数据通道中,控制器的参数不直接用伦茨的代码号来寻址,而是通过代码的变址号和子变址号来进行寻址,变址号放在参数通道数据字的“字节3”和“字节4”,子变址号放在参数通道数据字的“字节2”。参数代码号和变址号之间有固定的转换关系,两者之间差一个偏置量(24575dec 或5FFFhex),表3用举例来说明这一转换关系。
参数代码值的表示:参数代码的值写入参数通道数据字的“字节5”至“字节8”(报文的用户数据区)。
参数通道报文结构(综述):DRIVECOM行规的参数通道通信报文,总共由8个字节组成,定义见表4。报文结构各字节的具体定义如下:
字节1(Byte 1):字节1是服务字节,定义作业和对DP参数数据通道的控制响应

字节1中8个位的具体定义如图18所示。
字节2(Byte2):子变址号

对于伦茨公司的9400系列伺服控制装置,有许多参数码带有子代码号,因此需要增加一个子变址号,对它们进行寻址,参数通道的字节2,用来放置子变址号,没有子代码号的参数,字节2= 0,有子代码号的参数,字节2 = 子代码号,字节2可以表示1到256 个子代码号。
举例:参数码 C00050/子代码号1,“Speed setpoint1(rpm)”,字节2=1;

图18 参数通道报文结构字节1(服务字节)中各个“位”的定义
参数码 C00050/子代码号2,“Speed setpoint 2(rpm)”,字节2=2。
字节3(Byte 3)和字节4(Byte 4):变址号按照以下公式用将伦茨的参数代码号转换成2个字节的变址号:
变址号 = 24575 – 伦茨代码号
举例:
参数C00011(电动机参考速度,单位r pm)转换成变址号:
24575 – 11 = 24564 = 5FF4hex
对这一例子的输入应该是:
字节3:变址号高字节 = 5Fhex
字节4:变址号低字节 = F4hex
字节5(Byte 5)-字节8(Byte 8):参数值(数据)或故障信息(错误号)

由字节1(“服务字节”)第7位的“状态”,决定数据场字节5到字节8的含义,见表5。
表4 按照DRIVECOM行规的参数通道通信报文结构
DRIVECOM行规的参数数据通道,通信报文结构
Byte1
字节1
Byte2
字节2
Byte3
字节3
Byte4
字节4
Byte5
字节5
Byte6
字节6
Byte7
字节7
Byte8
字节8
Service
服务
Subindex
子变址号
IndexHigh byte
变址号高字节
IndexLow byte
变址号低字节
Date 4 /Or Error4
数据4或错误号4
Date 3 /Or Error3
数据3或错误号3
Date 2 /Or Error2
数据2或错误号2
Date 1 /Or Error1
数据1或错误号1
表5 由字节1第7位的“状态”,决定数据场字节5到字节8的含义
字节1的第7位0 1
字节5到字节8的含义参数值(数据1到4)
访问无效,表示故障
信息(错误1到4)
参数值(数据):
取决于数据格式,参数值的长度从一个字节到4个字节。数据的序列按照Motorola格式,亦即,第一是高字节/高字,第二是低字节/低字。
错误信息:
如果字节1(“服务字节”)第7位的“状态”为1时,表示通信作业没有完成,出现故障,则在字节5~8中表示的是错误信息,各错误信息码的含义,见表6。
表6 错误信息表,在字节5~8数据场中表示以下错误信息
Data 1 Data 2 Data 3 Data 4 错误信息含义
6 3
00
00 访问不允许(无权访问)
6 5 11 无效的子代码变址号
6 5 12 数据长度太长
6 5 13 数据长度太短
6 7 00 访问目标不存在
6 8 00 数据类型不符合
8 0 00 作业不能执行
8 0 20 作业当前不能执行
8 0 22 由于控制器的状态使无法执行
8 0 30 只有在控制器处于禁止状态,才允
许改变参数以及输出值的范围
8 0 31 参数值太大
8 0 32 参数值太小
8 0 80 硬件故障
数据内容以16进制表示。
读作业和写作业的编程过程举例:
举例1: 读参数值
读控制器散热器的温度(C00061),(例如:读到值θ=430 C)。
字节1:作业

图19 参数通道报文结构字节1(读参数)举例
字节2:子变址号
子变址号 = 0,因为参数码C00061没有子变址号。
字节3/4:变址号(计算)
变址号(读请求) = 24575-代码号
变址号 = 24575-61 = 24514 = 5FC2hex (5F hex = 高字节,
C2 hex = 低字节)
字节5~8:数据 (包括在响应报文中)
数据字节1到数据字节4 = 43 [0C] x 1 (1是参数代码表中查得的内部因子)=43=00 00 00 2Bhex
运行结果见表7。
举例2:写参数值
设置控制器的快停斜坡时间(C00105),设定时间为50 ms(0.05 S)
字节1:作业

图20 参数通道报文结构字节1(写参数)举例
表7 读参数值报文举例
字节1 字节2 字节3 字节4 字节5 字节6 字节7 字节8
作业服务子变址号
变址号
高字节
变址号
低字节
数据4 数据3 数据2 数据1
从主站到驱动器的请求报文
HEX 01 00 5F C2 00 00 00 00
BIN 0000
0001
0000
0000
0101
1111
1100
0010
0000
0000
0000
0000
0000
0000
0000
0000
等待在响应报文中握手信号位的改变(这里是字节1的第6位:1→0)
从驱动器到主站的响应报文(如果没有错误)
HEX 30 00 5F C2 00 00 00 2B
BIN 0011
0000
0000
0000
0101
1111
1100
0010
0000
0000
0000
0000
0000
0000
0010
1011
表8 写参数值报文举例
字节1 字节2 字节3 字节4 字节5 字节6 字节7 字节8
作业服务子变址号
变址号
高字节
变址号
低字节
数据4 数据3 数据2 数据1
从主站到驱动器的请求报文
HEX 72 00 5F 96 00 00 00 32
BIN 0111
0010
0000
0000
0101
1111
1001
0110
0000
0000
0000
0000
0000
0000
0011
0010
等待在响应报文中握手信号位的改变(这里是字节1的第6位:0→1)
从驱动器到主站的响应报文(如果没有错误)
HEX 40 00 5F 96 00 00 00 32
BIN 0100
0000
0000
0000
0101
1111
1001
0110
0000
0000
0000
0000
0000
0000
0011
0010
等待握手信号位的改变(这里是字节1的第6位:1→0)
表9 将要读/写的参数数据列表
地址符号名数据类型初始值说明
Struct
+0.0 telegram_head STRUCT telegram head: !! not overwrite
+0.0 zerro BYTE B#16#0 breakup between lists of telegrams in one DB (value = 0)
+1.0 servicebyte BYTE B#16#0 stored infos by the actual opened telegrams
+2.0 telegrampointer INT 0 pointer to the actual working telegram (0 := default starting value)
+4.0 error DWORD DW#16#0 request error, infos at Lenze Profibus manuel
+8.0 END_STRUCT
+8.0 telegram_001 STRUCT ##### C00011 -> Servodrive
+0.0 servicebyte BYTE B#16#32 Servicebyte -> Lenze
+1.0 subindex BYTE B#16#0 Subindex (Subcode)
+2.0 index INT 24564 Index = 24575 - Code-Nr.
+4.0 data DINT L#0 parameter value ( observe format and decimal place)
+8.0 END_STRUCT
+16.0 telegram_002 STRUCT ##### C00022 <- Servodrive
+0.0 servicebyte BYTE B#16#31 Servicebyte -> Lenze
+1.0 subindex BYTE B#16#0 Subindex (Subcode)
+2.0 index INT 24553 Index = 24575 - Code-Nr.
+4.0 data DINT L#0 parameter value ( observe format and decimal place)
+8.0 END_STRUCT
+24.0 telegram_003 STRUCT ##### C00054 <- Servodrive
+0.0 servicebyte BYTE B#16#31 Servicebyte -> Lenze
+1.0 subindex BYTE B#16#0 Subindex (Subcode)
+2.0 index INT 24521 Index = 24575 - Code-Nr.
+4.0 data DINT L#0 parameter value ( observe format and decimal place)
+8.0 END_STRUCT
+32.0 telegram_004 STRUCT ##### C00061 <- Servodrive
+0.0 servicebyte BYTE B#16#31 Servicebyte -> Lenze
+1.0 subindex BYTE B#16#0 Subindex (Subcode)
+2.0 index INT 24514 Index = 24575 - Code-Nr. C 013
+4.0 data DINT L#0 parameter value ( observe format and decimal place)
+8.0 END_STRUCT
=40.0 END_STRUCT
字节2:子变址号
子变址号=0,因为参数码C00105没有子变址号。
字节3/4:变址号(计算)
变址号(读请求)=24575-代码号
变址号=24575-105=24470=5F96hex(5F hex=高字节,96hex=低字节)
字节5~8:数据 (包括在发送报文中)
写入的参数值=0.05S x 1000 (1000是参数代码表中查得的内部因子)=50 =00 00 00 32hex
运行结果见表8。
图3中FC127功能和DB31数据块程序的说明。
下面将具体的说明“可变速传动装置通信示例”项目中的实际程序。程序中的Blocks文件夹包含有OB1、FC30、FC127、DB31等程序块。
数据块DB31是用数据结构格式,列出将要读/写参数的列表,见表9。
现在来具体分析数据块DB31,它采用数据结构的格式存放数据,该数据结构是按参数通道的8个字节定义的,它包含将要传送(读/写)的参数数据。例如,DB31方块中的telegram_001是一个数据结构,在DB31中占据DBB 8-DBB 15共8个字节,该结构的内容是将参数C00011(最高转速)的值,由PLC传送给伺服控制器,这一结构包括不同的数据类型,DBB 8是服务字节(数据类型为Byte,符号名servicebyte),初始值为B#16#32,表示写参数, DBB 9存放子代码号(数据类型为Byte,符号名subindex,本例中子代码为0),DBW 10存放代码号(数据类型为INT,符号名index,本例中代码的变址号为5FF4H ),参数值占用4个字节,存放在DBD 12双字中(数据类型为DINT,符号名data),在FC30程序块的Network:3中将它赋值为L#3000(3000 rpm)。类似的数据结构:telegram_002是读参数C00022(最大电流值)的数据结构,telegram_003是读参数C00054(电动机电流值)的数据结构,telegram_004是读参数C00061(散热器温度)的数据结构。在表9中telegram_head(报文头)也是一个数据结构,从DBB0至DBB7,DBB 0是数据块报文列表的分隔(数据类型为Byte,符号名zerro),初始值为B#16#0, DBB1存放实际被打开报文的信息(数据类型为Byte,符号名servicebyte,初始值为B#16#0),DBW 2是指向正被打开报文的指针(数据类型为INT,符号名telegrampointer,默认的起始值为0),DBD 4存放出现通信错误时的错误信息(数据类型为DINT,符号名error),错误信息定义见表6(错误信息表)。
在FC127的程序中会看到应用指针寻址的方法,顺序执行DB31中的telegram_001至telegram_004,在每执行一个报文结构时telegram_head中的内容都是不一样的。
FC127程序的主要功能是完成硬件组态中有关参数通道的读/写,需要读/写的参数以报文结构的形式存放在DB31数据块中(见上面的说明),FC127功能使用指针寻址的方法,顺序将DB31中的telegram_001至telegram_004依次读/写。程序共有15个Network网络段组成,另外在变量登记表中定义了若干形式参数,首先对定义的形式参数作一说明:

图21 FC127功能中变量登记表中的IN、OUT、IN_OUT类形式参数
从图21知,变量登记表中的IN包含5个形式参数:peripherieadr_1st_byte,定义硬件组态中参数通道的的起始字节地址,数据类型是INT,例如,本例中起始地址是PIW 268/PQW268(见图2),将来在调用FC127时替代该形式参数的实际参数就应该填上268;
DB_transferlist ,定义保存要读/写参数数据结构的数据块号,数据类型是Block_DP。如果在同一项目中组态有多个伦茨传动装置的从站,对每一个从站的参数数据读/写都要建立独立的DB数据块(类似DB31),在调用FC127时,替代这一形式参数的实际参数就应该是对那一个从站通信的数据块号。
begin_DB_transferlist,定义“DB_transferlist”数据块号数据块的起始字节地址(即数据结构的起始字节地址),数据类型为INT。
enable_transfer , 允许参数读/ 写的控制位, 数据类型为BOOL。
Timeout_timer,监控参数读/写过程的最大允许时间的定时器,如果在允许时间内FC127没有执行完,就会发出超时报警,将参数报文服务字节的第7位置成1,数据类型为TIMER。在调用FC127时,替代这一形式参数的实际参数就应该是不同的定时器号。
从图21知,变量登记表中对OUT和IN_OUT类形式参数没有定义。

图22 FC127功能中变量登记表中定义了TEMP类形式参数
从图22知FC127功能的变量登记表中定义了TEMP类形式参数(暂存参数),其中:
Fault_send_receive 是数据结构,包括Ret_Val_receive(类型为INT)暂存接收错误信号,和Ret_Val_send(类型为INT)暂存发送错误信号。
L2_Adr(类型为WORD)用来暂存参数通道的首地址。
Date_receive是一数据结构,包含服务字节service的8个位(类型为BOOL),子代码号subindex(类型为BYTE),代码号index(类型为INT)和数据data(类型为DINT),这一数据结构和DB31中的telegram数据结构有相同的定义,在FC127程序执行读参数时将DB31中的报文数据结构telegram暂存到Date_receive数据结构中,在使用指针寻址的情况下,Date_receive数据结构的内容是由指针指向的不同telegram的内容。
Date_send也是一数据结构,包含服务字节service的8个位(类型为BOOL),子代码号subindex(类型为BYTE),代码号index(类型为INT)和数据data(类型为DINT),这一数据结构和DB31中的telegram数据结构也有相同的定义,在FC127程序执行写参数时,将暂存在Date_send数据结构中的内容,复制到DB31中的报文数据结构telegram中,在使用指针寻址的情况下,Date_send数据结构的内容将发送至由指针指向的不同telegram中。
在TEMP暂存变量中的old_LAR1(类型为DWORD)、old_LAR2(类型为DWORD)和old_statusword(类型为WORD)是在调用FC127时用来保存旧的地址寄存器AR1、AR2和状态字的内容,因为在执行FC127时使用了指针寻址方式,AR1、AR2以及状态字的内容都会随时改变,在FC127执行结束时应该恢复旧的地址寄存器AR1、AR2和状态字的内容。
对FC127功能的具体说明,需要使用较多的篇幅,读者理解也会有一定难度,不在本文中叙述了。有兴趣的读者,可以阅读参考文献“可编程序控制器与工业现场总线”及该书所附光盘中的程序实例“DP_94V10”。
图23是在FC30中对FC127功能的调用和用实际参数替换FC127中的形式参数。

图23 在FC30中对FC127功能的调用和用实际参数替换FC127中的形式参数
图24是可变速传动装置通信示例项目的程序构成,在主程序OB1中调用功能程序FC105、FC30和FC107。完成整个通信程序中过程数据和参数数据的读/写。

图24 可变速传动装置通信示例项目的程序构成
至此,笔者通过“可变速传动装置通信示例”项目,全面阐明了应用PLC和DP现场总线实现对可变速传动装置的通信和控制。
文中提供的实用程序,都经过作者在许多工程项目中的验证。希望本文对从事该领域的工程技术人员和读者能有一定的帮助。
参考文献:
[1] 陈忠华.可编程序控制器与工业现场总线[M]. 北京: 机械工业出版社.2010, 5.
[2] 陈忠华. 可编程序控制器与工业自动化系统[M]. 北京: 机械工业出版社.2006, 1.
[3] KHB_PROFIBUS_V3.0_EN. 伦茨公司通信手册. 2007.
[4] PROFIBUS & PROFINET Technical Profile (PROFIdrive Part 1: Profile specifications)April, 2008.
[5] PROFIBUS & PROFINET Technical Profile (PROFIdrive Part 2: Mapping of Profile to Network Technologies)April, 2008.
摘自《自动化博览》2010年第八期 |