9
上海庆惜自动化设备有限公司
公司始终本着"顾客至上"的经营理念,在为客户提供尖端技术的同时,我们同样非常注重售后服务。西门子上海庆惜自动化设备有限公司拥有多名技术人员,他们经过专业培训和长期实践,积累了丰富的现场经验,能做到24小时响应,处理各种故障和紧急情况, 使用户没有后顾之忧。 一直以来,其工作得到了用户的一致**。
西门子在 Micro/WIN V4.0 SP5 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。 1
图 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
图 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 请求;
4
图 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.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 拨到 S**;或者保持处于 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(指令库)软件包;
-0AA0 电源模块(2A)
6ES7 307-1EA01-0AA0 电源模块(5A)
6ES7 307-1KA02-0AA0 电源模块(10A)
CPU
6ES7 312-1AE13-0AB0 CPU312,32K内存
6ES7 312-1AE14-0AB0 CPU312,32K内存
6ES7 312-5BE03-0AB0 CPU312C,32K内存 10DI/6DO
6ES7 313-5BF03-0AB0 CPU313C,64K内存 24DI/16DO / 4AI/2AO
6ES7 313-6BF03-0AB0 CPU313C-2PTP,64K内存 16DI/16DO
6ES7 313-6CF03-0AB0 CPU313C-2DP,64K内存 16DI/16DO
6ES7 313-6CF03-0AM0 CPU313C-2DP,64K内存 16DI/16DO组合件(6ES7 313-6CF03-0AB0+6ES7 392-1AM00-0AA0)
6ES7 314-1AG13-0AB0 CPU314,96K内存
6ES7 314-1AG14-0AB0 CPU314,128K内存
6ES7 314-6BG03-0AB0 CPU314C-2PTP 96K内存 24DI/16DO / 4AI/2AO
6ES7 314-6CG03-0AB0 CPU314C-2DP 96K内存 24DI/16DO / 4AI/2AO
6ES7 314-6CG03-9AM0 CPU314C-2DP 96K内存 24DI/16DO / 4AI/2AO组合件(6ES7 314-6CG03-0AB0+6ES7 392-1AM00-0AA0*2)
6ES7 315-2AG10-0AB0 CPU315-2DP, 128K内存
6ES7 315-2AH14-0AB0 CPU315-2DP, 256K内存
6ES7 315-2EH14-0AB0 CPU315-2 PN/DP, 256K内存
6ES7 317-2AJ10-0AB0 CPU317-2DP,512K内存
6ES7 317-2EK14-0AB0 CPU317-2 PN/DP,1MB内存
6ES7 318-3EL00-0AB0 CPU319-3 PN/DP,1.4M内存
内存卡
6ES7 953-8LF20-0AA0 SIMATIC Micro内存卡 64kByte(MMC)
6ES7 953-8LG11-0AA0 SIMATIC Micro内存卡128KByte(MMC)
6ES7 953-8LJ30-0AA0 SIMATIC Micro内存卡512KByte(MMC)
6ES7 953-8LL20-0AA0 SIMATIC Micro内存卡2MByte(MMC)
6ES7 953-8LM20-0AA0 SIMATIC Micro内存卡4MByte(MMC)
6ES7 953-8LP20-0AA0 SIMATIC Micro内存卡8MByte(MMC)
开关量模板
6ES7 321-1BH02-0AA0 开入模块(16点,24VDC)
6ES7 321-1BH02-9AJ0 开入模块(16点,24VDC)组合件 (6ES7 321-1BH02-0AA0+6ES7 392-1AJ00-0AA0)
6ES7 321-1BH10-0AA0 开入模块(16点,24VDC)
6ES7 321-1BH50-0AA0 开入模块(16点,24VDC,源输入)
6ES7 321-1BH50-9AJ0 开入模块(16点,24VDC,源输入)组合件 (6ES7 321-1BH50-0AA0+6ES7 392-1AJ00-0AA0)
6ES7321-1BL00-0AA0 开入模块(32点,24VDC)
6ES7 321-1BL00-9AM0 开入模块(32点,24VDC)组合件 (6ES7 321-1BL00-0AA0+6ES7 392-1AM00-0AA0)
6ES7 321-7BH01-0AB0 开入模块(16点,24VDC,诊断能力)
6ES7 321-1EL00-0AA0 开入模块(32点,120VAC)
6ES7 321-1FF01-0AA0 开入模块(8点,120/230VAC)
6ES7 321-1FF10-0AA0 开入模块(8点,120/230VAC)与公共电位单独连接
6ES7 321-1FH00-0AA0 开入模块(16点,120/230VAC)
6ES7 321-1FH00-9AJ0 开入模块(16点,120/230VAC) (6ES7 321-1FH00-0AA0+6ES7 392-1AJ00-0AA0)
6ES7 321-1CH00-0AA0 开入模块(16点,24/48VDC)
6ES7 321-1CH20-0AA0 开入模块(16点,48/125VDC)
6ES7 322-1BH01-0AA0 开出模块(16点,24VDC)
6ES7 322-1BH01-9AJ0 开出模块(16点,24VDC) (6ES7 322-1BH01-0AA0+6ES7 392-1AJ00-0AA0)
6ES7 322-1BH10-0AA0 开出模块(16点,24VDC)高速
6ES7 322-1CF00-0AA0 开出模块(8点,48-125VDC)
6ES7 322-8BF00-0AB0 开出模块(8点,24VDC)诊断能力
6ES7 322-5GH00-0AB0 开出模块(16点,24VDC,独立接点,故障保护)
6ES7 322-1BL00-0AA0 开出模块(32点,24VDC)
6ES7 322-1BL00-9AM0 开出模块(32点,24VDC) (6ES7 322-1BL00-0AA0+6ES7 392-1AM00-0AA0)
6ES7 322-1FL00-0AA0 开出模块(32点,120VAC/230VAC)
6ES7 322-1BF01-0AA0 开出模块(8点,24VDC,2A)
6ES7 322-1FF01-0AA0 开出模块(8点,120V/230VAC)
6ES7 322-5FF00-0AB0 开出模块(8点,120V/230VAC,独立接点)
6ES7 322-1HF01-0AA0 开出模块(8点,继电器,2A)
6ES7 322-1HF01-9AJ0 开出模块(8点,继电器,2A) (6ES7 322-1HF01-0AA0+6ES7 392-1AJ00-0AA0)
6ES7 322-1HF10-0AA0 开出模块(8点,继电器,5A,独立接点)
6ES7 322-1HH01-0AA0 开出模块(16点,继电器)
6ES7 322-1HH01-9AJ0 开出模块(16点,继电器) (6ES7 322-1HH01-0AA0+6ES7 392-1AJ00-0AA0)
6ES7 322-5HF00-0AB0 开出模块(8点,继电器,5A,故障保护)
6ES7 322-1FH00-0AA0 开出模块(16点,120V/230VAC)
6ES7 323-1BH01-0AA0 8点输入,24VDC;8点输出,24VDC模块
6ES7 323-1BL00-0AA0 16点输入,24VDC;16点输出,24VDC模块
6ES7 323-1BL00-9AM0 16点输入,24VDC;16点输出,24VDC模块 (6ES7 323-1BL00-0AA0+6ES7 392-1AM00-0AA0)
模拟量模板
6ES7 331-7KF02-0AB0 模拟量输入模块(8路,多种信号)
6ES7 331-7KF02-9AJ0 y
6ES7 331-7KB02-0AB0 模拟量输入模块(2路,多种信号)
6ES7 331-7KB02-9AJ0 模拟量输入模块(2路,多种信号) (6ES7 331-7KB02-0AB0+6ES7 392-1AJ00-0AA0)
6ES7 331-7NF00-0AB0 模拟量输入模块(8路,15位精度)
6ES7 331-7NF00-9AM0 模拟量输入模块(8路,15位精度) (6ES7 331-7NF00-0AB0+6ES7 392-1AM00-0AA0)
6ES7 331-7NF10-0AB0 模拟量输入模块(8路,15位精度)4通道模式
6ES7 331-7HF01-0AB0 模拟量输入模块(8路,14位精度,快速)
6ES7 331-1KF02-0AB0 模拟量输入模块(8路, 13位精度)
6ES7 331-1KF02-9AM0 模拟量输入模块(8路, 13位精度) (6ES7 331-1KF02-0AB0+6ES7 392-1AM00-0AA0)
6ES7 331-7PF01-0AB0 8路模拟量输入,16位,热电阻
6ES7 331-7PF01-9AM0 8路模拟量输入,16位,热电阻 (6ES7 331-7PF01-0AB0+6ES7 392-1AM00-0AA0)
6ES7 331-7PF11-0AB0 8路模拟量输入,16位,热电偶
6ES7 331-7PF11-9AM0 8路模拟量输入,16位,热电偶 (6ES7 331-7PF01-0AB0+6ES7 392-1AM00-0AA0)
6ES7 332-5HD01-0AB0 模拟输出模块(4路)
6ES7 332-5HD01-9AJ0 模拟输出模块(4路) (6ES7 332-5HD01-0AB0+6ES7 392-1AJ00-0AA0)
6ES7 332-5HB01-0AB0 模拟输出模块(2路)
6ES7 332-5HB01-9AJ0 模拟输出模块(2路) (6ES7 332-5HB01-0AB0+6ES7 392-1AJ00-0AA0)
6ES7 332-5HF00-0AB0 模拟输出模块(8路)
6ES7 332-5HF00-9AM0 模拟输出模块(8路) (6ES7 332-5HF00-0AB0+6ES7 392-1AM00-0AA0)
6ES7 332-7ND02-0AB0 模拟量输出模块(4路,15位精度)
6ES7 334-0KE00-0AB0 模拟量输入(4路RTD)/模拟量输出(2路)
6ES7 334-0CE01-0AA0 模拟量输入(4路)/模拟量输出(2路)
附件
6ES7 365-0BA01-0AA0 IM365接口模块
6ES7 360-3AA01-0AA0 IM360接口模块
6ES7 361-3CA01-0AA0 IM361接口模块
6ES7 368-3BB01-0AA0 连接电缆 (1米)
6ES7 368-3BC51-0AA0 连接电缆 (2.5米)
6ES7 368-3BF01-0AA0 连接电缆 (5米)
6ES7 368-3CB01-0AA0 连接电缆 (10米)
6ES7 390-1AE80-0AA0 导轨(480mm)
6ES7 390-1AF30-0AA0 导轨(530mm)
6ES7 390-1AJ30-0AA0 导轨(830mm)
6ES7 390-1BC00-0AA0 导轨(2000mm)
6ES7 392-1AJ00-0AA0 20针前连接器
6ES7 392-1AM00-0AA0 40针前连接器
功能模板
6ES7 350-1AH03-0AE0 FM350-1 计数器功能模块
6ES7 350-2AH01-0AE0 FM350-2 计数器功能模块
6ES7 351-1AH01-0AE0 FM351 定位功能模块
6ES7 352-1AH02-0AE0 FM352 电子凸轮控制器+组态包光盘
6ES7 355-0VH10-0AE0 FM355C 闭环控制模块
6ES7 355-1VH10-0AE0 FM355S 闭环控制系统
6ES7 355-2CH00-0AE0 FM355-2C 闭环控制模块
6ES7 355-2SH00-0AE0 FM355-2S 闭环控制模块
6ES7 338-4BC01-0AB0 SM338**位置输入模块
6ES7 352-5AH00-0AE0 FM352-5高速布尔处理器
通讯模板
6ES7 340-1AH02-0AE0 CP340 通讯处理器(RS232)
6ES7 340-1BH02-0AE0 CP340 通讯处理器(20mA/TTY)
6ES7 340-1CH02-0AE0 CP340 通讯处理器(RS485/RS422)
6ES7 341-1AH01-0AE0 CP341 通讯处理器(RS232)
6ES7 341-1BH01-0AE0 CP341 通讯处理器(20mA/TTY)
6ES7 341-1CH02-0AE0 CP341 通讯处理器(RS485/RS422)
6ES7 870-1AA01-0YA0 可装载驱动 MODBUS RTU 主站
6ES7 870-1AB01-0YA0 可装载驱动 MODBUS RTU 从站
6ES7 902-1AB00-0AA0 RS232电缆 5m
6ES7 902-1AC00-0AA0 RS232电缆 10m
6ES7 902-1AD00-0AA0 RS232电缆 15m
6ES7 902-2AB00-0AA0 20mA/TTY电缆 5m
6ES7 902-2AC00-0AA0 20mA/TTY电缆 10m
6ES7 902-2AG00-0AA0 20mA/TTY电缆 50m
6ES7 902-3AB00-0AA0 RS485/RS422电缆 5m
6ES7 902-3AC00-0AA0 RS485/RS422电缆 10m
6ES7 902-3AG00-0AA0 RS485/RS422电缆 50m
6GK7 342-5DA02-0XE0 CP342-5通讯模块
6GK7 342-5DF00-0XE0 CP342-5 光纤通讯模块
6GK7 343-5FA01-0XE0 CP343-5通讯模块
6GK7 343-1EX30-0XE0 CP343-1 以太网通讯模块
6GK7 343-1EX21-0XE0 CP343-1 以太网通讯模块
6GK7 343-1CX10-0XE0 CP343-1 以太网通讯模块
6GK7 343-1GX30-0XE0 CP343-1 IT以太网通讯模块(支持PROFINET)
完成以太网向导配置后需要在程序中调用以太网向导所生成的ETHx_CTRL和ETH0_XFR, 然后,将整个项目下载到作CLIENT的S7-200 CPU上。
图25 程序编
关键词
S7-200模拟量模块系列
模拟信号是指在一定范围内连续的信号(如电压、电流),这个“一定范围”可以理解为模拟量的有效量程。在使用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 M231模块:
首先,模拟量输入模块可以通过设置拨码开关来选择信号量程。开关的设置应用于整个模块,一个模块只能设置为一种测量范围,且开关设置只有在重新上电后才能生效。也就是说,拨码设置一经确定后,这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,对应通