起订:1
供应:931
发货:1天内
西门子为其产品及系统提供工业安全功能,以支持工厂、解决方案、机器和网络的安全运行。
为了保护设备、系统、机器和网络以防受到网络威胁,必须实施并持续保持全面、的工业安全概念。西门子的产品和解决方案构成了这种概念的一个要素。
客户负责防止未经授权的对其工厂、系统、机器设备和网络进行访问。这种系统、机器和部件只应连接到企业网络或互联网,前提是需要进行这种连接,且仅当采取适当措施时的情况下才进行这种连接(例如,使用防火墙和/或进行网络分隔)。
西门子在 Micro/WIN V4.0 SP5 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。
图 1. 西门子标准指令库(Micro/WIN V4.0 SP5)
注意-
1. Modbus RTU 主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库对 Port 0 和 Port 1 有效。该指令库将设置通信口工作在自由口模式下。
2. Modbus RTU 主站指令库使用了一些用户中断功能,编其他程序时不能在用户程序中禁止中断。
3. Modbus RTU 主站库对CPU的版本有要求。CPU 的版本必须为 2.00 或者 2.01(即订货号为 6ES721*-***23-0BA*),1.22版本之前(包括1.22版本)的 S7-200 CPU 不支持。
使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器。
要使用 Modbus RTU 主站指令库,须遵循下列步骤:
-
1.安装西门子标准指令库
2.按照要求编写用户程序调用 Modubs RTU 主站指令库
安装西门子标准指令库
1.2 Modbus RTU 主站功能编程
1. 调用 Modbus RTU 主站初始化和控制子程序
使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:
图 2. 用 SM0.0 调用 Modbus RTU 主站初始化与控制子程序
各参数意义如下:
a. | EN | 使能: | 必须保证每一扫描周期都被使能(使用 SM0.0) |
---|---|---|---|
b. | Mode | 模式: | 为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议 |
c. | Baud | 波特率: | 支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。 |
d. | Parity | 校验: | 校验方式选择 |
0=无校验 | |||
1=奇较验 | |||
2=偶较验 | |||
e. | Timeout | 超时: | 主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。 |
注意:这个值必须设置足够大以保证从站有时间响应。 | |||
f. | Done | 完成位: | 初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作(见例程) |
g. | Error | 初始化错误代码(只有在 Done 位为1时有效): | |
0= 无错误 | |||
1= 校验选择非法 | |||
2= 波特率选择非法 | |||
3= 模式选择非法 |
2. 调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;
图 3. 调用Modbus RTU 主站读写子程序
各参数意义如下:
a. | EN | 使能: | 同一时刻只能有一个读写功能(即 MBUS_MSG)使能 |
---|---|---|---|
注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。 | |||
b. | First | 读写请求位: | 每一个新的读写请求必须使用脉冲触发 |
c. | Slave | 从站地址: | 可选择的范围 1 - 247 |
d. | RW | 从站地址: | 0 = 读, 1 = 写 |
注意: | |||
1. 开关量输出和保持寄存器支持读和写功能 | |||
2. 开关量输入和模拟量输入只支持读功能 | |||
e. | Addr | 读写从站的数据地址: | |
选择读写的数据类型 | |||
00001 至 0xxxx - 开关量输出 | |||
10001 至 1xxxx - 开关量输入 | |||
30001 至 3xxxx - 模拟量输入 | |||
40001 至 4xxxx - 保持寄存器 | |||
f. | Count | 数据个数 | 通讯的数据个数(位或字的个数) |
注意:Modbus主站可读/写的数据量为120个字(是指每一个 MBUS_MSG 指令) | |||
g. | DataPtr | 数据指针: | 1. 如果是读指令,读回的数据放到这个数据区中 |
2. 如果是写指令,要写出的数据放到这个数据区中 | |||
h. | Done | 完成位 | 读写功能完成位 |
i. | Error | 错误代码: | 只有在 Done 位为1时,错误代码才有效 |
0 = 无错误 | |||
1 = 响应校验错误 | |||
2 = 未用 | |||
3 = 接收超时(从站无响应) | |||
4 = 请求参数错误(slave address, Modbus address, count, RW) | |||
5 = Modbus/自由口未使能 | |||
6 = Modbus正在忙于其它请求 | |||
7 = 响应错误(响应不是请求的操作) | |||
8 = 响应CRC校验和错误 | |||
- | |||
101 = 从站不支持请求的功能 | |||
102 = 从站不支持数据地址 | |||
103 = 从站不支持此种数据类型 | |||
104 = 从站设备故障 | |||
105 = 从站接受了信息,但是响应被延迟 | |||
106 = 从站忙,拒绝了该信息 | |||
107 = 从站拒绝了信息 | |||
108 = 从站存储器奇偶错误 |
-
如果多个 MBUS_MSG 指令同时使能会造成 6 号错误
库存储区被程序其它地方复用,有时也会造成6 号错误
从站 delay 参数设的时间过长会造成主站 3 号错误
从站掉电或不运行,网络故障都会造成主站 3 号错误
3. 在 CPU 的 V 数据区中为库指令分配存储区(Library Memory)
Modbus Master 指令库需要一个284个字节的全局 V 存储区。
参考:分配库指令数据区
1.3 关于 Modbus RTU 主站协议及地址
此为西门子正式推出的标准库指令说明资料。
在 Modbus RTU Master 协议和 PPI 协议之间切换:Modbus RTU Master 协议指令库使通信口工作在自由口模式下,此时不能与 Micro/WIN 软件通信。要在切换回 PPI 协议,可以:
-
将 MBUS_CTRL 指令的 Mode 输入端设置为逻辑"0"
将 CPU 的允许模式选择开关置为 STOP 位置
Modbus RTU Master 协议库的执行时间:
Modbus RTU Master 协议库的 MBUS_CTRL 指令不需要很长的执行时间。MBUS_需要 1.11 ms 用于初始化,在后续的每个扫描周期中只占用 0.41 ms。
调用 MBUS_MSG 子程序会加长处理时间。大部分时间都用于 CRC 校验的计算。每读、写一个字的数据就需要 1.85 ms 扫描时间。数据多的情况下(读、写 120 字的数据),扫描时间大概会扩增加 222 ms。读操作的时间主要消耗在接收数据上;写操作的时间主要消耗在发送数据上。
Modbus 地址通常 Modbus 地址由 5 位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbus Master 协议库把标准的 Modbus 地址映射为所谓 Modbus 功能号,读写从站的数据。Modbus Master 协议库支持如下地址:
-
00001 - 09999:数字量输出( 线圈)
10001 - 19999:数字量输入(触点)
30001 - 39999:输入数据寄存器(通常为模拟量输入)
:数据保持寄存器
Modbus Master 协议库支持的功能
为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能:
表 1. 需要从站支持的功能
Modbus 地址 | 读/写 | Modbus 从站须支持的功能 |
---|---|---|
00001 - 09999 数字量输出 |
读 | 功能 1 |
写 |
功能 5:写单输出点 功能 15:写多输出点 |
|
10001 - 19999 数字量输入 |
读 | 功能 2 |
写 | - | |
30001 - 39999 |
读 | 功能 4 |
写 | - | |
保持寄存器 |
读 | 功能 3 |
写 |
功能 6:写单寄存器单元 功能 16:写多寄存器单元 |
S7-200 通过 Modbus Master 和 Slave 协议库通信时,Modbus 地址和 S7-200 内存储区地址的 映射关系都类似。
Modbus 保持寄存器地址映射举例:
Modbus 数字量地址映射举例:
位地址(0xxxx 和 1xxxx)数据总是以字节为单位打包读写。个字节中的低有效位对应 Modbus 地址的起始地址。如下图所示:
图 4. 数字量地址映射举例
1.4 Modbus RTU 主站例程
为了更好地理解 Modbus 主站的编程,可参考下面的例程。
例子程序1: 多个MBUS_MSG指令轮询执行,
注意-
1. 该例程使用 Micro/WIN V4.0 SP5 保存。
2. 该例程仅访问一个从站,若访问不同的从站,可通过改变从站地址来实现。
Modbus RTU 主站指令库应用例程
例子程序2:反复激活单个MBUS_MSG指令:Modbus RTU 主站变址方式轮询访问应用例程
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为 此联系西门子技术支持与服务部门。
1.5 Modbus RTU 主站常问问题
Modbus RTU 主站库对 CPU 的版本是否有要求,为什么编译例子程序时,会遇到 4 个错误?
Modbus RTU 主站库对 CPU 的版本确实有要求,CPU 的版本必须为 2.00 或者 2.01(即订货号为6ES721*-***23-0BA*),1.22 版本之前(包括 1.22 版本)的 S7-200 CPU 不支持。
Modbus 指令库启动后,如何通过同一个通信端口进行 CPU 监控?
Modbus 指令库使用的是 CPU 的自由口通信功能,工作在自由口模式下的通讯口不能使用 Micro/WIN 的 PPI 编程通信监控。如果通信口都已经被占用,可以考虑:
-
加一个通信模块(如 EM 277、CP 243-1、EM 241 等)扩展出一个编程通信口
中止自由口模式,可以将 CPU 上的模式开关从 RUN 拨到 STOP;或者保持处于 RUN 状态,用程序停止指令库的 Modbus 模式(参见指令库应用)
如何理解 Modbus 地址与功能码的区别?
Modbus 地址与 Modbus 的功能码是两个层次的概念。
根据 Modbus 通信协议,Modbus 数据的地址使用 0xxxx、1xxxx、3xxxx 和 4xxxx 的形式,分别表示数字量输出、数字量输入、模拟量输入等数据地址。在使用 S7-200 的指令库时,Modbus 数据地址与 S7-200 的 I/O 和数据存储区地址间有特定的对应关系。
有些设备表明它支持 Modbus RTU 通信协议,但也详细提供了读写数据的详细通信帧格式,其中包括如何* Modbus 站的地址,需要读写数据类型、长度等等。数据帧有特定字节指出此指令读写的数据类型和地址,此字节的数据内容即所谓"功能码",如功能 1 *读取单个/多个数字量输出点的值。
支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种"功能"读写而来。功能码是 Modbus 地址的底层。如果 Modbus 通信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此功能号与 Modbus 地址间的对应关系。
如何访问大于 9999 的保持寄存器地址?
通常 Modbus 协议的保持寄存器地址范围在 之间。对于多数应用来说已经够了。但有些 Modbus 从站把地址映射到保持寄存器区的地址超过 9999 的部分。
Modbus Master 协议库支持超过 9999 的保持寄存器地址。地址范围为 36。只需在调用 MBUS_MSG 子程序时给 Addr 参数赋相应的值即可,如 416768。
Modubs Master 扩展地址模式仅支持保持寄存器区,不支持其他地址类型。
S7-200 作为 Modbus 主站方接收上来的数据格式与第三方设备不一样怎么办?
西门子PLC数据的存储格式为高位低存方式。举例:VD200中包含VW200和VW202,其中VW202是低字,VW200是高字。若第三方设备与西门子数据存储格式不同,是低位低存的方式,那么通信上来的数据就会存在错误,需要进行转换才能使用。编程的方式比较多样,针对双字中高低字的交换可以使用SWAP(字交换)指令,若是字节交换可以考虑循环移位指令。
S7-200 是否支持如 Modbus TCP 等其它协议?
不支持。S7-200自身的通信端口或其通信扩展模块均不支持 Modbus TCP、CANopen、DeviceNet 以及 BACnet 通信协议。
为什么 S7-200 作 Modbus 主站时 MBUS_MSG 指令报6号错误?
引起6号错误主要有两方面的原因:1.多个 MBUS_MSG 指令同时使能执行;2. Modbus库存储区中分配的建议地址区与编程中已使用的V存储区有重叠。
2Modbus RTU从站
2.1 CPU 上的通信口(Port0)支持 Modbus RTU 从站通信协议
S7-200 CPU上的通信口Port0可以支持Modbus RTU协议,成为Modbus RTU从站。此功能是通过S7-200的自由口通信模式实现,因此可以通过无线数据电台等慢速通信设备传输。
详情请参考《S7-200系统手册》之相关章节。
要实现Modbus RTU通信,需要STEP 7-Micro/WIN32 V3.2以上版本的编程软件,而且须安装STEP 7-Micro/WIN32 V3.2 Instruction Library(指令库)。Modbus RTU功能是通过指令库中预先编好的程序功能块实现的。
Modbus RTU从站指令库只支持CPU上的通信0口(Port0)。
2.2 编程基本步骤:
检查Micro/WIN的软件版本,应当是STEP 7-Micro/WIN V3.2以上版本。
检查Micro/WIN的指令树中是否存在Modbus RTU从站指令库(图1),库中应当包括MBUS_INIT和MBUS_SLAVE两个子程序。如果没有,须安装Micro/WIN32 V3.2的Instruction Library(指令库)软件包;
图1. 指令树中的库指令
编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用MBUS_SLAVE,并*相应参数。关于参数的详细说明,可在子程序的局部变量表中找到;
图2. 调用Modbus RTU通信指令库
图中参数意义如下:
-
模式选择:启动/停止Modbus,1=启动;0=停止
从站地址:Modbus从站地址,取值1~247
波特率:可选1200,2400,4800,9600,19200,38400,57600,115200
奇偶校验:0=无校验;1=奇校验;2=偶校验
延时:附加字符间延时,缺省值为0
I/Q位:参与通信的I/O点数,S7-200的I/O映像区为128/128,缺省值为128
AI字数:参与通信的AI通道数,可为16或32
保持寄存器区:参与通信的V存储区字(VW)
保持寄存器区起始地址:以&VBx*(间接寻址方式)
初始化完成标志:成功初始化后置1
初始化错误代码
Modbus执行:通信中时置1,无 Modbus 通信活动时为 0。
错误代码:0=无错误
表1.从站错误代码
错误代码 | 描述 |
---|---|
0 | 无错误 |
1 | 存储区范围错误 |
2 | 非法波特率或校验 |
3 | 非法从站地址 |
4 | Modbus 参数的非法值 |
5 | 保持寄存器与Modbus从站符号地址重复 |
6 | 接收校验错误 |
7 | 接收CRC错误 |
8 | 非法功能请求/不支持的功能 |
9 | 请求中有非法存储区地址 |
10 | 从站功能未使能 |
在CPU的V数据区中分配库指令数据区(Library Memory);
如有必要,使用主站软件测试。
注意:由子程序参数HoldStart和MaxHold*的保持寄存器区,是在S7-200 CPU的V数据存储区中分配,此数据区不能和库指令数据区有任何重叠,否则在运行时会产生错误,不能正常通信。注意Modbus 中的保持寄存器区按"字"寻址,即MaxHold规定的是VW而不是VB的个数。
在图2的例子中,规定了 Modbus 保持寄存器区从 VB0 开始(HoldStart = VB0),并且保持寄存器为1000个字(MaxHold=1000),因保持寄存器以字(两个字节)为单位,实际上这个通信缓冲区占用了VB0~VB1999共2000个字节。因此分配库指令保留数据区时至少要从VB2000开始。当然保持区不一定要从VB0开始。
注意:你选用的CPU的V存储区大小!CPU型号不同V数据存储区大小不同。应根据需要选择Modbus保持寄存器区域的大小。
包含 Modbus RTU 从站指令库的项目编译、下载到CPU中后,在编程计算机(PG/PC)上运行一些 Modbus 测试软件可以检验S7-200的Modbus RTU通信是否正常,这对查找故障点很有用。测试软件通过计算机串口(RS-232)和PC/PPI电缆连接CPU。如果必要,须将PC/PPI电缆设置在自由口通信方式。
可到一些软件下载网站寻找类似软件,如 ModScan32 等。
2.3 Modbus RTU 从站地址与S7-200的地址对应
Modbus地址总是以00001、30004之类的形式出现。S7-200内部的数据存储区与Modbus的0、1、3、4共4类地址的对应关系如下:
表2. Modbus地址对应表
Modbus地址 | S7-200数据区 |
---|---|
00001 ~ 00128 | Q0.0 ~ Q15.7 |
10001 ~ 10128 | I0.0 ~ I15.7 |
30001 ~ 30032 | AIW0 ~ AIW62 |
40001 ~ 4xxxx | T ~ T + 2 * (xxxx -1) |
其中T为S7-200中的缓冲区起始地址,即 HoldStart。
如果已知S7-200中的V存储区地址,推算Modbus地址的公式如下:
Modbus地址 = 40000 + (T/2+1) ; T为偶数
2.4 Modbus RTU 从站指令库支持的功能码
Modbus RTU 从站指令库支持特定的 Modbus 功能。访问使用此指令库的主站必须遵循这个指令库的要求。
表 3. Modbus RTU 从站功能码
功能码 | 主站使用相应功能码作用于此从站的效用 |
---|---|
1 | 读取单个/多个线圈(离散量输出点)状态。 功能 1 返回任意个数输出点(Q)的 ON/OFF 状态。 |
2 | 读取单个/多个触点(离散量输入点)状态。 功能 2 返回任意个数输入点(I)的 ON/OFF 状态。 |
3 | 读取单个/多个保持寄存器。功能 3 返回 V 存储区的内容。在 Modbus 协议下保持寄存器都是"字"值,在一次请求中可以读取多 120 个字的数据。 |
4 | 读取单个/多个输入寄存器。功能 4 返回 S7-200 的模拟量数据值。 |
5 | 写单个线圈(离散量输出点)。功能 5 用于将离散量输出点设置为*的值。这个点不是被强制的,用户程序可以覆盖 Modbus 通信请求写入的值。 |
6 | 写单个保持寄存器。功能 6 写一个值到 S7-200 的 V 存储区的保持寄存器中。 |
15 | 写多个线圈(离散量输出点)。功能 15 把多个离散量输出点的值写到 S7-200 的输出映像寄存器(Q 区)。输出点的地址必须以字节边界起始(如 Q0.0 或 Q2.0),并且输出点的数目必须是 8 的整数倍。这是此 Modbus RTU 从站指令库的限制。些点不是被强制的,用户程序可以覆盖 Modbus 通信请求写入的值。 |
16 | 些多个保持寄存器。功能 16 写多个值到 S7-200 的 V 存储区的保持寄存器中。在一次请求中可以写多 120 个字的数据。 |
2.5 Modbus RTU 从站例程
Modbus RTU 从站例程
需要 STEP 7-Micro/WIN V4.0 SP3 以上版打开
2.6 Modbus RTU 从站常见问题
Modbus 从站的网络地址与 S7-200 的 CPU 网络地址有什么关系?
没有关系。支持网络通信的通信协议必须有其自己的网络寻址规定。 Modbus 从站的地址只是它在 Modbus 网络上的地址,而通常所说的 S7-200 CPU 地址是 CPU 在西门子的 PPI 网络上的站地址。S7-200 CPU 的大部分通信功能都通过 PPI 网络完成,例如编程、网络读写通信等。
如何理解 Modbus 地址与功能码的区别?
Modbus 地址与 Modbus 的功能码是两个层次的概念。
根据 Modbus 通信协议,Modbus 数据的地址使用 00xxx、10xxx、30xxx 和 40xxx 的形式,分别表示数字量输出、数字量输入、模拟量输入等数据地址。在使用 S7-200 的指令库时,Modbus 数据地址与 S7-200 的 I/O 和数据存储区地址间有特定的对应关系。
有些设备表明它支持 Modbus RTU 通信协议,但也详细提供了读写数据的详细通信帧格式,其中包括如何* Modbus 站的地址,需要读写数据类型、长度等等。数据帧有特定字节指出此指令读写的数据类型和地址,此字节的数据内容即所谓"功能码",如功能 1 *读取单个/多个数字量输出点的值。
支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种"功能"读写而来。功能码是 Modbus 地址的底层。如果 Modbus 通信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此功能号与 Modbus 地址间的对应关系。
Modbus 指令库启动后,如何通过同一个通信端口进行 CPU 监控?
Modbus 指令库使用的是 CPU 的自由口通信功能,工作在自由口模式下的通讯口不能使用 Micro/WIN 的 PPI 编程通信监控。如果通信口都已经被占用,可以考虑:
-
加一个通信模块(如 EM 277、CP 243-1、EM 241 等)扩展出一个编程通信口
中止自由口模式,可以将 CPU 上的模式开关从 RUN 拨到 STOP;或者保持处于 RUN 状态,用程序停止指令库的 Modbus 模式(参见指令库应用)
为何有些 HMI 软件使用 Modbus RTU 读取S7-200中的实数会出现错误?
有些HMI软件使用Modbus RTU通信协议时,处理存储在数据保持寄存器中的实数(浮点数)的方式与西门子的实数保存格式不同。西门子的PLC遵循"高字节低地址、低字节高地址"的规律。
Modbus RTU的保持寄存器总是以"字(双字节)"为单位,而一个实数需要4个字节(双字)表示。HMI软件在处理时可能会把保持寄存器的两个"字"互换位置,造成不能识别以西门子格式表示的实数。如果HMI软件一方无法处理这种实数,则可在S7-200 CPU中编程将存入数据缓冲区(保持寄存器区)的实数的高字和低字互换。
为何有的HMI软件用Modbus RTU可以读取作为从站的S7-200的内容,但不能写入?
可能此软件使用了Modbus功能15(写多个离散量)或类似功能(功能 16)。S7-200从站协议遵守"以整字节地址边界(如Q0.0、Q2.0)开始、以8的整数倍为位个数"的规约。如果HMI软件未严格执行此规律就可能发生写入错误的情况。
S7-200是否支持 Modbus ASCII 模式?
S7-200可以支持上述模式,但是没有现成的指令库,需要用户自己编程。
项目编译后为何出现很多错误?
使用指令库时,若编译后出现很多错误,一般是因为未*库指令数据存储区。请参考相关条目。
S7-200 CPU的Port1是否可以支持Modbus RTU协议?
可以。用户可以自己编程实现。
在S7-200的"Tips and Tricks"帮助文档中,Tip041是Modbus RTU从站程序,用户可以参考。
S7-200是否可以组成Modbus RTU通信网络?如何组网?
S7-200可以组成RS-485基础上的Modbus RTU网络。如果通信对象是不同标准的通信口,可能还需要转换。
参见:RS-485网络组成
3STEP 7-Micro/WIN 的标准指令库
STEP 7-Micro/WIN V4.0 以上版内部已经带有新的指令库,但在未安装西门子 Instruction Library 软件包的情况下,不能显示出来使用。
要使用西门子的标准指令库,必须先安装西门子的指令库软件包 Instruction Library。安装了 Instruction Library 之后,只要安装的 STEP 7-Micro/WIN 版本是的,就能获得相应版本的新指令库。安装 Micro/WIN 的升级包(Service Pack)也会更新指令库的版本。
用户可以直接从下面获得西门子 Instruction Library 软件安装包:
Instruction Library
的 STEP 7-Micro/WIN V4.0 SP5 版本支持以下几种西门子标准指令库:
-
USS通信协议库:
可使CPU通信口 Port0 和 Port 1 支持与Micro-Master 3(MM3系列)和Micro-Master 4(MM4系列,如MM420、MM430、MM440等)、SINAMICS G110系列的USS通信控制,通过一些预先编好的子程序和中断程序,以方便地控制变频器的运行和读写其参数。
Micro/WIN V4.0的USS指令库现在已经针对西门子的Master Drive做了优化。 Modbus RTU Slave(从站)通信协议库:
可使CPU通信口 Port0 支持Modbus RTU从站通信功能。 Modbus RTU Master (主站)通信协议库:
可使 CPU 通信口 Port 0 和 Port 1 支持 Modbus RTU 主站通信功能。
以上通信协议库都是使用了S7-200 CPU的自由口通信功能。
图1. 西门子标准库以浅蓝色图标表示(Micro/WIN V4.0 SP5)
从以下两种途径可以获得STEP 7-Micro/WIN指令库:
-
安装STEP 7-Micro/WIN32 附加软件包Instruction Library V1.1,订货号6ES7830-2BC00-0YX0。
已安装STEP 7-Micro/WIN32 V3.1和Toolbox V1.0(包括为TP070配置的TP Designer和老的指令库,订货号6ES7810-2TC00-0YX0),再安装正式的STEP 7-Micro/WIN32 V3.2(或V4.0)版,也可自动获得新的指令库。新旧版本的软件及其指令库可以在一台计算机上共存(V4.0 的各升级包不能共存)。
注意:
-
所有旧的CPU21x不能使用新的指令库
旧版本的指令库不能与新的指令库在同一个项目文件中共存
安装了新版本的指令库后,旧版本的指令库不再能够看到
用户自定义的指令库不能与西门子的库重名
有时因为系统和软件安装有问题,可能在安装完西门子标准指令库后仍然不能看到西门子标准库。这时可以尝试添加标准库。标准库的文件存在Micro/WIN安装目录下的Standard Libs目录下。
3.1 分配库指令数据区
调用STEP 7 - Mciro/WIN32 V3.2 Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。
如果在编程时不分配库指令数据区,编译时会产生许多相同的错误(错误18)。
操作步骤(以Modbus RTU库指令为例):
在指令树的Project(项目)中,以鼠标右键单击Program Block(程序块),在弹出的快捷菜单中选择Library Memory。如图2所示:
图2
在弹出的选项卡中设置库指令数据区,如图2所示:
图3.缺省情况下是从VB0开始,但因为与Modbus的保持寄存区冲突,所以手动改为VB2000。按"Suggest Address"按钮也可以自动分配。
可以使用Suggest Address(推荐地址)设置数据区,但要注意编程软件设置的数据区地址,只考虑到了其他一般寻址,而未考虑到诸如Modbus数据保持寄存器区等的设置。应当确保不与其他任何已使用的数据区重叠、冲突。不应重复按Suggest Address按钮,否则也会造成混乱。
在STEP 7-Micro/WIN32 V3.1中,有分配库指令数据区时有不同的操作方法,需要在Symbol Table(符号表)中设置一个首地址。我们强烈建议使用当时的编程版本。
3.2 添加指令库
注意:添加自定义指令库,需要关闭编辑库指令的项目,新建立一个项目。如果要添加其他来源的库指令自然不需要如此。
步:在Micro/WIN的File(文件)菜单中选择Add/Remove Libraries...(添加/删除指令库)命令 ;或者在指令树的Libraries(指令库)分支上单击鼠标右键,选择Add/Remove Libraries...
图4. 选择添加/删除指令库命令
添加/删除对话框中将显示已经在本机的Micro/WIN中集成的用户自定义指令库。
图5. 已安装的库指令
第二步:按Add(添加)按钮,选择新定义的库文件路径。用户自定义库将自动添加到Micro/WIN指令树的Libraries分支下。
图6. 选择库文件
缺省情况下,Micro/WIN到图8中的路径下寻找库指令文件。用户也可以*其他路径。但要注意库文件应当保持在非移动的介质上,如果*了一个可移动硬盘,则硬盘不在时会发生找不到库的错误。建议用户使用缺省设置。
3.3 删除库指令
步:选择添加/删除指令库命令
图7. 选择命令
第二步:选中须卸载的库所对应的库文件,按Remove(删除)按钮
图8. 选中要删除的库指令文件
4RS-485网络
S7-200系统支持的PPI、MPI和PROFIBUS-DP协议通常以RS-485电气网络为硬件基础。
RS-485串行通信标准采用平衡信号传输方式,或者称为差动模式。平衡传输方式可以有效地抑制传输过程中干扰。
平衡方式采用一对导线,利用两根导线间的电压差传输传输信号。这两根导线被命名为A(TxD/RxD-)和B(TxD/RxD+)。当B的电压比A高时,认为传输的是逻辑"高"电平;当B的电压比A低时,认为传输的是逻辑"低"电平信号。能够有效工作的差动电压范围十分宽广,可以从零点几伏到接近十伏。
RS-485通信端口可以做到很高的通信速率,较长的通信距离,以及并联连接多个端口。
平衡通信方式能否有效工作受到共模电压差的影响。RS-485接口的两根导线相对于通信对象信号地的电压差就是共模电压。非电气隔离的RS-485接口能在一定的范围内抵抗共模电压对通信的干扰。
S7-200 CPU通信口的共模抑制电压是12V。所以对于这类非隔离型的RS-485端口,保证通信口之间的信号地等电位非常重要,将它们连接在一起(并不是说一定要接地)。
S7-200系统中的RS-485端口是半双工的,不能同时发送和接收信号。
在S7-200系统中,选择合适的通信设备,可以做到波特率从1200到12M,单段距离1000m,单段站点32个的通信网络。通过中继器,RS-485电气网络还可以扩展通信距离,增加通信站点。详情请参考《S7-200系统手册》关于通信的专门一章。
虽然常见的RS-485通信器件在电气性能上基本一致,但物理接口却五花八门,没有统一的规定。
西门子系统中的 D-Sub 9 针型 RS-485 端口,引脚定义是基本一致的。
4.1 S7-200系统中的RS-485通信
在S7-200系统中,CPU上的通信口(编程口),以及EM277模块上的通信端口都是符合RS-485电气标准的。但它们也有所不同:
-
S7-200 CPU上的通信口是非隔离型的,通信速率187.5K波特
EM277上的通信口是隔离的,通信速率12M,并且速率自适应
以下三种协议,都可以在RS-485的硬件基础上实现通信:
-
PPI(包括编程通信、S7-200 CPU之间、S7-200 CPU与HMI之间的通信等)
MPI(S7-200 CPU与S7-300/400 CPU、S7-200 CPU与HMI之间、EM277与HMI之间的通信等)
PROFIBUS-DP(EM277与其他PROFIBUS-DP主站之间的通信)
实际上,如果各通信站点的地址不同,通信波特率相同,上述三个协议可以在一个RS-485网络上同时实现各自的通信。当然,一个站点支持什么协议受到自身条件所限。
因此考察上述电气网络的通信时,我们应注意到它们都受RS-485网络电气基础的制约。上述网络所用的网络硬件基本一样。
5RS-485网络的硬件组成
在S7-200系统中,无论是组成PPI、MPI还是RPOFIBUS-DP网络,或是Modbus RTU网络,用到的主要部件都是一样的:
-
PROFIBUS电缆:电缆型号有多种,其中基本的是PROFIBUS FC(Fast Connect快速连接)Standard电缆(订货号6XV1 830-0EH10)
PROFIBUS网络连接器:网络连接器也有多种形式,如出线角度不同等等
5.1 连接网络连接器
A. 电缆和剥线器。使用FC技术不用剥出裸露的铜线。
图1. 剥好一端的PROFIBUS电缆与快速剥线器(FCS,订货号6GK1905-6AA00)。
B. 打开PROFIBUS网络连接器。首先打开电缆张力释放压块,然后掀开芯线锁。
图2. 打开的PROFIBUS连接器
C. 去除PROFIBUS电缆芯线外的保护层,将芯线按照相应的颜色标记插入芯线锁,再把锁块用力压下,使内部导体接触。应注意使电缆剥出的屏蔽层与屏蔽连接压片接触。
图3. 插入电缆
由于通信频率比较高,因此通信电缆采用双端接地。电缆两头都要连接屏蔽层。
D. 复位电缆压块,拧紧螺丝,消除外部拉力对内部连接的影响。
5.2 网络连接器
网络连接器主要分为两种类型:带和不带编程口的。不带编程口的插头用于一般联网,带编程口的插头可以在联网的同时仍然提供一个编程连接端口,用于编程或者连接HMI等。
图4. 左侧为不带编程口的网络连接器(订货号:6ES7 972-0BA52-0xA0)
右侧的是带编程口的网络连接器(订货号:6ES7 972-0BB52-0xA0)
5.3 线型网络结构
通过PROFIBUS电缆连接网络插头,构成总线型网络结构。
图5. 总线型网络连接
在上图中,网络连接器A、B、C分别插到三个通信站点的通信口上;电缆a把插头A和B连接起来,电缆b连接插头B和C。线型结构可以照此扩展。
注意圆圈内的"终端电阻"开关设置。网络终端的插头,其终端电阻开关必须放在"ON"的位置;中间站点的插头其终端电阻开关应放在"OFF"位置。
5.4 终端电阻和偏置电阻
一个正规的RS-485网络使用终端电阻和偏置电阻。在网络连接线非常短、临时或实验室测试时也可以不使用终端和偏置电阻。
终端电阻:在线型网络两端(相距远的两个通信端口上),并联在一对通信线上的电阻。根据传输线理论,终端电阻可以吸收网络上的反射波,有效地增强信号强度。两个终端电阻并联后的值应当基本等于传输线在通信频率上的特性阻抗 偏置电阻:偏置电阻用于在电气情况复杂时确保A、B信号的相对关系,保证"0"、"1"信号的可靠性
西门子的PROFIBUS网络连接器已经内置了终端和偏置电阻,通过一个开关方便地接通或断开。终端和偏置电阻的值完全符合西门子通信端口和PROFIBUS电缆的要求。
合上网络中网络插头的终端电阻开关,可以非常方便地切断插头后面的部分网络的信号传输。
与其他设备通信时(采用PROFIBUS电缆),对方的通信端口可能不是D-SUB9针型的,或者引脚定义完全不同。如西门子的MM4x0变频器,RS-485通信口采用端子接线形式,这种情况下需要另外连接终端电阻,西门子可以提供一个比较规整的外接电阻。对于其他设备,可以参照《S7-200系统手册》上的技术数据制作。
西门子网络插头中的终端电阻、偏置电阻的大小与西门子PROFIBUS电缆的特性阻抗相匹配,强烈建议用户配套使用西门子的PROFIBUS电缆和网络插头。可以避免许多麻烦。
记住联网的格言:你糊弄它,它就糊弄你!
入门实例:次使用S7-200笔录
对于很多没有使用过S7-200PLC的朋友来说,很多问题可能成为大家的拦路虎,感觉入门很难。以下就用一个实例,为大家介绍次使用S7-200PLC时具体步骤,帮助您迈开使用PLC的步。文中希望实现的功能是:按下一个开关,点亮一个输出点。本文可以帮您解决次使用S7-200时的以下问题:
(一) 需要准备哪些硬件和软件呢?
次使用S7-200时,需要准备硬件有:S7-200CPU,如CPU224XP(订货号:6ES7 214-2BD23-0xB8)
编程电缆 PC/PPI电缆(订货号:6ES7 901-3DB30-0xA0)
需要准备的软件有:SETP7-Micro/Win V4.0 SP6
还需要准备一台装有Windows XP SP2的电脑
准备好硬件,我们就需要在电脑上正确安装S7-200的编程软件。特别提示要注意这个软件是SETP7-Micro/Win,而不是SETP7。据老工程师讲,SETP7是给S7-300等系列PLC编程用的,不能给S7-200进行编程。对于SETP7-Micro/Win软件而言,目前常用的版本是V4..0 SP6。和安装其它软件一样,正确安装好编程软件后,您就可以在桌面上看到如下所示的图标。至此,我们就为下一步的调试做好基本准备喽!
(二) 如何为PLC的接线呢?
从以下接线图可以看出,我们需要做的就是将为PLC提供电源和为数字量输入点正确接线。
(三) 如何与PLC通信呢?
1. 连接编程电缆
将编程电缆的USB口侧插在电脑上,DB接口插在PLC的PORT0或者PORT1上。然后将PLC的模式开关设置为STOP。
2. 编程软件设置
(1)打开编程软件后,在整个界面的左侧,点击设置PG/PC接口。如下图所示:
在出现的对话框中,选择PC/PPIcable(PPI),并点击属性
属性对话框的个界面,使用如下设置:
在属性对话框中的第二个选项卡中,选择通讯接口为USB,具体如下设置:
之后保存并关闭相应的对话框。
(2)回到编程软件的初始界面,然后点击通信
出现如下界面:
将搜索所有波特率打勾后,双击刷新即可。
如果能出现如下页面,即表示PC与PLC的通讯成功。
(四) 如何编写程序呢?
打开编程界面,单击红色标注处,可以添加一个常开触点
同样的方法添加一个输出线圈:
需要为输入和输出分配正确的地址,如下所示。之后点击下载
出现如下界面后,继续点击下载
下图显示的是下载中的界面:
下载成功后,就可以进行PLC调试,进一步测试具体功能是否可以实现。
(五) 如何调试PLC呢?
先将模式开关设置为RUN,然后拨动连接在输入点I0.0上开关,即可看到输出点点亮了。至此,表明我们的程序和PLC运行一切正常。
如果想在编程软件上监控输入点和输出点的状态,可以点击状态表
打开状态表后,在地址栏中输入需要监控的地址,如下所示:
之后点击监控即可:
正常监控后就可以在当前值中看到相应的数值:
开关未按下时的状态
开关按下后的状态
从以上的笔录,我们可以看出S7-200PLC是一款简单易学的控制设备。当然,PLC还有通讯、PID控制、运动控制等等很多功能,我们可以在本网站中的相关介绍中一步一步的对其进行学习和了解。相信不需要很长时间,您也可以成为S7-200PLC的使用高手!模拟信号是指在一定范围内连续的信号(如电压、电流),这个“一定范围”可以理解为模拟量的有效量程。在使用S7-200模拟量时,需要注意信号量程范围,拨码开关设置,模块规范接线,指示灯状态等信息。
本文中,我们按照S7-200模拟量模块类型进行分类介绍:
1.AI 模拟量输入模块?
2.AO模拟量输出模块?
3.AI/AO模拟量输入输出模块
4.常见问题分析
首先,请参见“S7-200模拟量全系列总览表”,初步了解S7-200模拟量系列的基本信息,具体内容请参见下文详细说明:
AI 模拟量输入模块
A. 普通模拟量输入模块:
如果,传感器输出的模拟量是电压或电流信号(如±10V或0~20mA),可以选用普通的模拟量输入模块,通过拨码开关设置来选择输入信号量程。注意:按照规范接线,尽量依据模块上的通道顺序使用(A->D),且未接信号的通道应短接。具体请参看《S7-200可编程控制器系统手册》的附录A-模拟量模块介绍。
4AI EM231模块:
首先,模拟量输入模块可以通过设置拨码开关来选择信号量程。开关的设置应用于整个模块,一个模块只能设置为一种测量范围,且开关设置只有在重新上电后才能生效。也就是说,拨码设置一经确定后,这4个通道的量程也就确定了。如下表所示:
注:表中0~5V和0~20mA(4~20mA)的拨码开关设置是一样的,也就是说,当拨码开关设置为这种时,输入通道的信号量程,可以是0~5V,也可以是0~20mA。
8AI EM231模块:
8AI的EM231模块,第0->5通道只能用做电压输入,只有第6、7两通道可以用做电流输入,使用拨码开关1、2对其进行设置:当sw1=ON,通道6用做电流输入;sw2=ON时,通道7用做电流输入。反之,若选择为OFF,对应通道则为电压输入。
注:当第6、7道选择为电流输入时,第0->5通道只能输入0-5V的电压。
B. 测温模拟量输入模块(热电偶TC;热电阻RTD):
如果,传感器是热电阻或热电偶,直接输出信号接模拟量输入,需要选择特殊的测温模块。测温模块分为热电阻模块EM231RTD和热电偶模块EM231TC。注意:不同的信号应该连接至相对应的模块,如:热电阻信号应该使用EM231RTD,而不能使用EM231TC。且同一模块的输入类型应该一致,如:Pt1000和Pt100不能同时应用在一个热电阻模块上。
热电偶模块TC:
EM231 TC支持J、K、E、N、S、T和R型热电偶,不支持B型热电偶。通过拨码设置,模块可以实现冷端补偿,但仍然需要补偿导线进行热电偶的自由端补偿。另外,该模块具有断线检测功能,未用通道应当短接,或者并联到旁边的实际接线通道上。?
热电阻模块RTD:
热电阻的阻值能够随着温度的变化而变化,且阻值与温度具有一定的数学关系,这种关系是电阻变化率α。RTD模块的拨码开关设置与α有关,如下图所示,就算同是 Pt100,α值不同时拨码开关的设置也不同。在选择热电阻时,请尽量弄清楚α参数,按 照对应的拨码去设置。具体请参看《S7-200可编程控制器系统手册》的附录A-热电偶和热电阻扩展模块介绍。
EM231 RTD模块具有断线检测功能,未用通道不能悬空,接法方式如下:
(1)请将一个电阻按照与已用通道相同的接线方式连接到空的通道,注意:电阻的阻值必须和RTD的标称值相同;
(2)将已经接好的那一路热电阻的所有引线,一一对应连接到空的通道上。
因为热电阻分2线制、3线制、4线制,所以RTD模块与热电阻的接线有3种方式,如图所示。其中,精度的是4线连接,精度低的是2线连接。
提示:
(1). 在STEP7 Micor/WIN软件中(S7-200的编程软件),对于模拟量输入通道设有软件滤波功能,如图所示,具体请参见《S7-200 ? LOGO? SITOP 参考》->系统块-模拟量滤波。
但是,在系统块中设置模拟量通道滤波时,RTD和TC模块占用的模拟量通道,应禁止滤波功能。
(2) EM231 TC和RTD模块上,均有24V电源指示灯和SF故障指示灯。如图所示:(a)若24V电源指示灯=OFF,则说明该模块没有24V工作电源;(b)若SF红灯闪烁,原因可能是:模块内部软件检测出外接断线,或者输入超出范围。
注:具体请参见:《S7-200 ? LOGO? SITOP 参考》->EM231 RTD/EM231 TC。
AO模拟量输出模块
S7-200的扩展模块里,分别有2路、4路的模拟量输出模块EM232。根据接线方式(M-V或M-I)选择输出信号类型,电压:±10V,电流:0~20mA(4~20mA)。
AI/AO模拟量输入输出模块
(A) CPU模块本体集成的2路AI和1路AO
S7-200只有CPU 224XP和CPU224XPsi,本体集成有模拟量通道。其中,2路AI是:电压信号±10V,1路AO是:电压信号0~10V;或者电流信号0~20mA(4~20mA),输出信号类型可以通过硬件接线来选择。
(B) EM235模拟量输入输出模块
EM235模块有4路AI和1路AO。通过拨码开关设置来选择4路AI通道的输入信号程,如下表所示,这个模块可以测量毫伏级(mV)的信号;1路AO是:电压信号 ±10V;或电流信号0~20mA(4~20mA),可以根据硬件接线方式(M-V或M-I)选择输出信号类型。
注:模块上的电位计是用来调节输入信号和转换数值的放大关系,在模块出厂时已经设置好了,如无需要,请不要随意更改。
常见问题分析
A.模拟量输入与数字量的对应关系:
模拟量信号(0~10V,0~5V或0~20mA)在S7-200 CPU内部用0~32000的数值表示(注:4~20mA对应6400~32000),这两者之间有一定的数学关系,如图所示:
B.模拟量模块的硬件接线介绍
(1)CPU 224 XP集成有2路电压输入,接线方法见a:分别为A+和M、B+和M,此时只能输入±10V 电压信号。
CPU 224XP还集成有1路模拟量输出信号。电流输出如图b,将负载接在I和M端子之间;电压输出如图c,将负载接在V和M端子之间。
(2)模拟量输入的接线方式
以4AI EM231模块为例,分别介绍电压、电流型输入信号的接线方式,如图所示。注意:此接线图是一个示意图,表述的是不同的接线方式,并不是指该模块只有A通道可以接入电压,B通道必须悬空,C和D通道只能接入电流。
当您的信号为电压输入时可以参考接线方法a,以此类推。
方式a. 电压输入方式:信号正接A+;信号负接A-;
方式b. 未用通道接法(不要悬空):未用通道需短接,如B+和B-短接;
方式c. 电流输入方式(四线制):信号正接C+,同时C+与RC短接;信号负接C-,同时C-和模块的M端短接。
方式d. 电流输入方式(两线制):信号线接D+,同时D+与RD短接;电源M端接D-,同时和模块的M端短接。
注:具体请参见:《S7-200 ? LOGO? SITOP 参考》->模拟量模块接线。
(3)电流型信号输入接线方式
电流型信号的接线方式,分为四线制、三线制、二线制接法。这里讨论的“几线制”,是以传感器或仪表变送器是否需要外供电源来区别的,而并不是指EM231模块需要几根信号线,或该变送器的信号线输出。
a. 四线制-电流型信号的接法:
四线制信号是指信号设备本身外接供电电源,同时有信号+、信号-两根信号线输出。供电电源可有220VAC或24VDC,接线如图所示:
b. 三线制-电流型信号的接法:
三线制信号是指信号设备本身外接供电电源,只有一根信号线输出,该信号线与电源线共用公共端,通常情况是共负端的。接线如图所示:
注:若设备的24VDC供电电源与EM231模块的供电电源不是同一个电源,那么,需要将模块的M端与该通道的负端引脚短接(如,M和C-短接)。这是为了使模块与测量通道工作在同一的参考电压,也就是等电位。下面的二线制接法同理。
c. 二线制-电流型信号的接法:
二线制信号是指信号设备本身只有两根外接线,设备的工作电源由信号线提供,即其中一根线接电源,另一根线是信号输出。接线如图所示: