SIEMENS西门子中国总代理商
如何理解 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软件使用ModbusRTU通信协议时,处理存储在数据保持寄存器中的实数(浮点数)的方式与西门子的实数保存格式不同。西门子的PLC遵循"高字节低地址、低字节高地址"的规律。
ModbusRTU的保持寄存器总是以"字(双字节)"为单位,而一个实数需要4个字节(双字)表示。HMI软件在处理时可能会把保持寄存器的两个"字"互换位置,造成不能识别以西门子格式表示的实数。如果HMI软件一方无法处理这种实数,则可在S7-200CPU中编程将存入数据缓冲区(保持寄存器区)的实数的高字和低字互换。
为何有的HMI软件用ModbusRTU可以读取作为从站的S7-200的内容,但不能写入?
可能此软件使用了Modbus功能15(写多个离散量)或类似功能(功能16)。S7-200从站协议遵守"以整字节地址边界(如Q0.0、Q2.0)开始、以8的整数倍为位个数"的规约。如果HMI软件未严格执行此规律就可能发生写入错误的情况。
S7-200是否支持 Modbus ASCII模式?
S7-200可以支持上述模式,没有现成的指令库,需要用户自己编程。
项目编译后为何出现很多错误?
使用指令库时,若编译后出现很多错误,一般是因为未库指令数据存储区。请参考相关条目。
S7-200CPU的Port1是否可以支持Modbus RTU协议?
可以。用户可以自己编程实现。
在S7-200的"Tips andTricks"帮助文档中,Tip041是Modbus RTU从站程序,用户可以参考。
S7-200是否可以组成ModbusRTU通信网络?如何组网?
S7-200可以组成RS-485基础上的Modbus RTU网络。如果通信对象是不同标准的通信口,可能还需要转换。
参见:RS-485网络组成
3STEP 7-Micro/WIN 的标准指令库
STEP 7-Micro/WIN V4.0 以上版内部已经带有新的指令库,但在未安装西门子 InstructionLibrary 软件包的情况下,不能显示出来使用。
要使用西门子的标准指令库,必须先安装西门子的指令库软件包Instruction Library。安装了 Instruction Library 之后,只要安装的 STEP7-Micro/WIN 版本是的,就能获得相应版本的新指令库。安装 Micro/WIN 的升级包(ServicePack)也会更新指令库的版本。
用户可以直接从下面获得西门子 Instruction Library 软件安装包:
InstructionLibrary
的 STEP 7-Micro/WIN V4.0 SP5 版本支持以下几种西门子标准指令库:
USS通信协议库:
可使CPU通信口 Port0 和 Port 1 支持与Micro-Master 3(MM3系列)和Micro-Master4(MM4系列,如MM420、MM430、MM440等)、SINAMICSG110系列的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-200CPU的自由口通信功能。
图1. 西门子标准库以浅蓝色图标表示(Micro/WIN V4.0 SP5)
从以下两种途径可以获得STEP 7-Micro/WIN指令库:
安装STEP 7-Micro/WIN32 附加软件包Instruction LibraryV1.1,订货号6ES7830-2BC00-0YX0。
已安装STEP 7-Micro/WIN32 V3.1和Toolbox V1.0(包括为TP070配置的TPDesigner和老的指令库,订货号6ES7810-2TC00-0YX0),再安装正式的STEP 7-Micro/WIN32V3.2(或V4.0)版,也可自动获得新的指令库。新旧版本的软件及其指令库可以在一台计算机上共存(V4.0的各升级包不能共存)。
注意:
所有旧的CPU21x不能使用新的指令库
旧版本的指令库不能与新的指令库在同一个项目文件中共存
安装了新版本的指令库后,旧版本的指令库不再能够看到
用户自定义的指令库不能与西门子的库重名
有时因为系统和软件安装有问题,可能在安装完西门子标准指令库后仍然不能看到西门子标准库。这时可以尝试添加标准库。标准库的文件存在Micro/WIN安装目录下的StandardLibs目录下。
3.1 分配库指令数据区调用STEP 7 - Mciro/WIN32 V3.2 InstructionLibrary(指令库)需要分配库指令数据区(LibraryMemory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。
如果在编程时不分配库指令数据区,编译时会产生许多相同的错误(错误18)。
操作步骤(以Modbus RTU库指令为例):
在指令树的Project(项目)中,以鼠标右键单击Program Block(程序块),在弹出的快捷菜单中选择LibraryMemory。如图2所示:
图2
在弹出的选项卡中设置库指令数据区,如图2所示:
图3.缺省情况下是从VB0开始,但因为与Modbus的保持寄存区冲突,手动改为VB2000。按"SuggestAddress"按钮也可以自动分配。
可以使用SuggestAddress(*地址)设置数据区,但要注意编程软件设置的数据区地址,只考虑到了其他一般寻址,而未考虑到诸如Modbus数据保持寄存器区等的设置。应当确保不与其他任何已使用的数据区重叠、冲突。不应重复按SuggestAddress按钮,否则也会造成混乱。
在STEP7-Micro/WIN32 V3.1中,有分配库指令数据区时有不同的操作方法,需要在SymbolTable(符号表)中设置一个首地址。我们强烈建议使用当时的编程版本。
3.2 添加指令库注意:添加自定义指令库,需要关闭编辑库指令的项目,新建立一个项目。如果要添加其他来源的库指令自然不需要如此。
*步:在Micro/WIN的File(文件)菜单中选择Add/Remove Libraries...(添加/删除指令库)命令;或者在指令树的Libraries(指令库)分支上单击鼠标右键,选择Add/Remove Libraries...
图4. 选择添加/删除指令库命令
添加/删除对话框中将显示已经在本机的Micro/WIN中集成的用户自定义指令库。
图5. 已安装的库指令
第二步:按Add(添加)按钮,选择新定义的库文件路径。用户自定义库将自动添加到Micro/WIN指令树的Libraries分支下。
6SL3244-0BA10-0BA0
6SL3244-0BA20-1BA0
6SL3244-0BA20-1PA0
6SL3255-0AA00-4BA1
6SL3244-0BB00-1BA0
6SL3244-0BB00-1PA0
6SL3244-0BB12-1BA0
6SL3244-0BB12-1PA0
6SL3255-0AA00-4CA1
6SL3224-0BE13-7UA0
6SL3224-0BE15-5UA0
6SL3224-0BE17-5UA0
6SL3224-0BE21-1UA0
6SL3224-0BE21-5UA0
6SL3224-0BE22-2UA0
6SL3224-0BE23-0UA0
6SL3224-0BE24-0UA0
6SL3224-0BE25-5UA0
6SL3224-0BE27-5UA0
6SL3224-0BE31-1UA0
6SL3224-0BE31-5UA0
6SL3224-0BE31-8UA0
6SL3224-0BE32-2UA0
6SL3224-0BE33-0UA0
6SL3224-0BE33-7UA0
6SL3224-0BE34-5UA0
6SL3224-0BE35-5UA0
6SL3224-0BE37-5UA0
6SL3224-0BE38-8UA0
6SL3224-0BE41-1UA0
6SL3224-0XE41-3UA0
6SL3224-0XE41-6UA0
6SL3224-0XE42-0UA0
6SL3217-0CE15-5UA1
6SL3217-0CE17-5UA1
6SL3217-0CE21-1UA1
6SL3217-0CE21-5UA1
6SL3217-0CE22-2UA1
6SL3217-0CE23-0UA1
6SL3217-0CE24-0UA1
6SL3217-0CE25-5UA1
6SL3217-0CE27-5UA1
6SL3217-0CE31-1UA1
6SL3217-0CE31-5UA1
6SL3217-0CE31-8UA1
400H系统,CPU上的两块后备电池没电已报警,在外部供电突然断电后,1对CPU及CP全部掉电,停止运行,掉电后,CPU重启run灯闪烁几下后,STOP指示灯亮,cpu无法启动。
经过向大家请教学习,查看400cpu中使用的是RAM存储卡,查看文档得知使用RAM存储卡时,如果电源出现故障,系统必须能使用后备电池或通过“EXT.BATT”插座为CPU提供外部备用电压,这样才能备份存储卡的数据和内部RAM上的数据;因为CPU上的后背电池已经没电,在外部供电断掉后,导致了RAM卡上的程序丢失。
在没有任何程序的情况下,CPU是无法进行启动的,需要重新下载组态和程序,CPU才能进入到运行状态。在对CPU进行下载之前,需要保证CPU进入STOP模式并且可以访问。
1、下载硬件组态
在硬件组态保存并进行编译之后,点击下载按钮,选择“在STOP模式中下载”选项,选择下载的目标CPU(机架0或机架1);
在“选择节点地址”中点击“更新”,找到目标CUP的物理地址,点击“确定”,如果该CPU没有分配IP地址,则需要为其分配一个。 也可以通过plc菜单->EditEthernet Node(编辑以太网节点)方式直接分配IP
2、下载网络组态,此时需要选中指定的CPU站,下载整个站点
3、下载用户程序(CFC或sfc进行编译后下载)
完成了上面的步骤,CPU可以完成启动。注意:我们只需对主CPU进行下载,备用CPU会通过同步光纤自动同步主CPU数据。
说来,本次故障的原因就是因为在后备电池没电的情况下CPU掉电,造成了程序丢失,RAM卡中没有程序造成CPU无法启动。