浔之漫智控技术(上海)有限公司
西门子PLC模块 , CPU模块 , DP通讯电缆 , 6GK交换机
西门子cpu模块|授权总代理

1、“启用外设输出”功能简介
在系统的调试阶段,我们经常会用到对单个设备进行接线检查或调试的功能。如果CPU工作在RUN模式,那么可以通过在强制变量表中对输出写强制值的方式实现,,但当CPU工作在STOP模式时,如何修改外围输出点的输出状态呢?
在STEP7变量表中的“启用外设输出 ”(Enable peripheral outputs)功能可以将特定值分配给处于 STOP 模式下的 CPU 的各个外设输出,可以用于设备的接线检查或调试。
2、“启用外设输出”的使用条件
在STEP7中的“启用外设输出”功能只有在满足以下几个条件时才有效:

CPU处于STOP工作模式

只能对外设输出地址区,即必须是带 ”P” 的 Q 地址区地址进行修改

已经建立与 CPU 的在线连接
3、实验环境:

软件:STEP7 V5.5 SP2

硬件:CPU315-2PN/DP,SM374(仿真模块,组态为8DI/8DO),组态如图1所示。


图 1
4、操作步骤
1)在项目中新建一个监控变量表,或打开一个已经存在的监控变量表。
2)根据实际需要,在变量表中添加要启动外设输出的地址,本例中添加了“PQB0”(注意,外设地址区不能按位寻址,只能按字节、字或双字寻址)


图2

3)建立与plc的在线连接,并通过CPU的模式转换开关(或通过菜单命令)将CPU的工作模式转换为STOP模式。

4)选择变量表窗口中的“Variable”菜单,可以看到这时的” Enable peripheral outputs”菜单已经有效。在菜单中选中此功能,并在弹出的对话框中选择“Yes”,即可激活“启用外设输出”的功能。


图3

5)在变量表的修改值列中输入相应的修改值(这里将PQB0的修改值设置为B#16#FF),并在快捷菜单中选择“Active Modify Value”,则实际的输出点状态将被修改为设定值(可以看到这时的SM374模块的8个输出点指示灯全部被点亮)。


图4
5、“启用外设输出”的取消
可以通过以下几种方式取消“启用外设输出”功能:

通过菜单取消激活“启用外设输出”功能

将STEP7转到离线模式

直接通过”ESC”键退出
注意,功能取消后不能再恢复,需要重新启用。

一、 背景
  2002年开始开发焦炉四大机车自动化系统(见下图)的时候,遇到了无线通信的难题,众所周知目前的电台不能直接支持PPI协议,别的的无线通信的方案要么成本过高,要么性能不稳定,不可靠。
所以早期的时候,都是用自由口,自己编写基于主、从通信协议的通信程序,不过很不灵活,协议一旦确定就很难更改,如果有升级和变动,都需要大量的修改代码,维护极不方便。
  后来西门子推出了Micro Win32引入了库的概念,可以直接提供Moubus Rtu Slave库供开发人员使用,但是只提供Moubus Slave,没有提供Moubus Client,所以PLC直接通过Moubus协议访问还是有问题。


二、 实施方案
  Modbus是一个公开协议,包括ASCII、RTU和TCP几种,很显然我选择了Rtu,因为西门子提供的Slave就是基于Rtu协议的。
  我们知道Modbus支持好多功能,如下表:

  如果在PLC中把所有的功能都实现了,不光代码编写较为繁琐,对PLC本身的程序和容量空间都是考验。所以根据需要我仅实现3和16号指令,详细的协议如下:
  1、 读取保持寄存器(单个和多个,以字为小单位)
发送命令帧:

返回命令帧:

说明:
命令正确:
1) 设备地址相同Addr0=Addr1
2) 功能码相同
3) 返回的数据字节数N=DataNum×2 DataNum的范围(0~120)
4) 返回数据的意义
a=HoldStart
n= DataNum-1

命令有误:
1) 没有任何返回
2) 返回异议帧

2、 设置保持寄存器(多个,以字为小单位)
发送命令帧:

返回命令帧:

说明:
数据字节数:bytN= DataNum×2

命令正确:
1) 设备地址相同Addr0=Addr1
2) 功能码相同
3) 地址相同
4) 数据量相同

命令有误:
1) 没有任何返回
2) 返回异议帧

  有了协议,有知道了西门子库的开发方法,剩下的事,就是开工,下面详细介绍终的完成成果:

  Modbus RTU客户程序由于建立在PLC中,所以它的读写函数的处理方法和一般上位机的读写程序不一样,PLC内部的程序执行是扫描式的,而读写数据时的通信却是过程的需要一定时间来等待的,所以读写的函数不是独立的,它需要一个专门的服务程序来反馈执行的结果。同时需要注意的是,读写操作在某一时刻只允许一个执行(好读写操作之间留一定时间间隔)。
  此外,西门子提供的Modbus RTU Slave程序不支持广播命令。
I、地址定义
1、 V变量区的占用
一共需要V变量区786个字节。在程序设计时,用户程序不要占用该内存区。

特别注意:V变量区的占用地址是相对的,通过修改库内存地址,可以改变使用V变量区的范围。


2、 定时器的占用
占用了定时器T100,用户程序不要再使用T100了。
变量名 说明 备注
T100 10ms定时器


II、接口函数说明

1、YFMBUS_INIT
a. 名称:YFMBUS_INIT
b. 类型:
c. 功能:Modbus RTU Client初始化
d. 参数:


2、YFMBUS_ Server
a. 名称:YFMBUS_Server
b. 类型:
c. 功能:Modbus RTU Client服务程序,负责通信后台的处理
d. 参数:

名 称 类 型 说 明 备 注
Done BOOL 0 - 服务空闲 1 - 正在服务 输出

3、YFMBUS_ReadVW
a. 名称:YFMBUS_ ReadVW
b. 类型:
c. 功能:读取指定VW变量区的数据
d. 参数:

inErrorAddr的反馈信息:


4、YFMBUS_WriteVW
a. 名称:YFMBUS_ WriteVW
b. 类型:
c. 功能:写指定VW变量区的数据
d. 参数:

inErrorAddr的反馈信息:


III、样例程序
网格 1
// 网络注解
LD SM0.1 //PLC初次扫描
//--------------------------------
//PLC的端口号:0/1|波特率0-4800 1-9600 2-19200|校验:0-无 1-奇校验 2-偶校验
CALL YFMBUS_INIT, 0, 1, 2
//--------------------------------
MOVB 0, VB0

网格 2
LD SM0.0
//端口0 JRModbus客户端程序
CALL YFMBUS_Server, M0.1

网格 3
LD SM0.0
TON T32, +200

网格 4
LD T32
R T32, 1
AB<> 16#CC, VB0 //操作完毕
INCB VB10
LPS
AB> VB10, 1
MOVB 0, VB10

LRD
AB= VB10, 0 //读数据
//从站号|从站存放地址(VW100)|数据量|主PLC存放数据地址|反馈信息
CALL YFMBUS_ReadVW, 1, 50, 10, &VB50, &VB0

LPP
AB= VB10, 1 //写数据
//从站号|从站存放地址(VW200)|数据量|主PLC存放数据地址|反馈信息
CALL YFMBUS_WriteVW, 1, 100, 10, &VB100, &VB0
//----
INCW VW100 //测试数据 自加1

三、 结语
  从实施以来,无线通信的数据包结构变化很大,但这个通信架构却没有再改变过,近两年的多时间在多个现场,它都运行的很稳定,完全实现了无线通信基于PLC的应用.

发布时间:2023-10-26
展开全文
优质商家推荐 拨打电话