西门子6SL3060-4AH00-0AA0
完成数据区的定义后,就可以对mb_comm_load功能块和mb_master功能块进行参数赋值,赋值的参数见图9和图11。在上面的编程块里需要注意的是,在mb_master功能块中的参数mb_addr参数是从站的modbus的站地址。这里要读取的从站的站地址为2;关于mode、data_addr、data_len可在下表中查看,data_ptr存放发送或接收到的数据。
表1:mb_master modbus功能表
上面就完成了程序的编写,对项目进行编译;右击plc_1项目在弹出的菜单里选择“compliesall”选项,这样就对硬件与软件进行编译,如下图:
图13:编译项目
编译且没有错误后就可以下载程序到plc中,同样右击plc_1项目,在弹出的菜单选择“download to device”。
s7-200作为modbus从站的配置步骤如下:
点击桌面上的“v4.0 step 7 microwin sp6”图标(因为step 7microwin安装时并没有安装modbus的库程序,modbus的库程序是需要单独安装的,安装后才可以在库程序中调用modbus的通讯功能块,关于库程序可以咨询西门子热线或访问西门子的****),打开后并编写modbus从站程序如下图:
图14:s7-200 modbus从站编程
在上面调用的是端口0的程序,在连接通讯线时,需要连接到端口0上,编译并下载项目到s7-200的plc中。下载后运行plc。
用dp电缆连接s7-1200与s7-200。
在线监控s7-200中的程序,并监控变量表,修改vb1000到vb1011的值为1到12(vb1000到vb1011对应的modbus的地址为40001-40006)。监控到的值如下图所示:
图15:s7-200监控变量值
在线监控 s7-1200变量表如下图:
图16:s7-1200监控变量值
4.2 s7-200作modbus主站,s7-1200作modbus从站
s7-1200作为modbus从站的配置步骤如下:
点击桌面上的“totally integrated automation portal v10”图标,打开如下图:
图17:s7-1200监控变量值
需要选择“create new project”选项,在“projectname:”里输入modbus_slave在“path:”修改项目的存储路径为“c:\backupfile”;点击“create”,这样就创建了一个文件modbus_slave的新项目。创建后的窗口如下图所示:
图18: 新建项目后
点击门户视图左下角的“project view”切换到项目视图下,如下图:
图19:切换到项目视图
打开后,在“devices”标签下,点击“add newdevice”,在弹出的菜单中输入设备名“plc_1”并在设备列表里选择cpu的类型。选择后如下图:
图20: plc硬件组态
插入cpu后,点击cpu左边的空槽,在右边的“catalog”里找到“communication”下的rs485模块,拖拽或双击此模块,这样就把串口模块插入到硬件配置里,就需要配置此rs485模块硬件接口参数,选择rs485模块,在其下方会出现该模块的硬件属性配置窗口,在属性窗口里有下面五个选项, “general”; “port configuration”;“transmit messageconfiguration”;“receive message configuration”;“io address/hwidentify”。在“general”里包括了此模块的“项目信息”;而在“portconfiguration”里可以对端口的进行参数配置,
波特率为:9600 ;
校验方式:无 ;
数据位为:8 ;
停止位: 1;
硬件流控制:无;
等待时间: 1ms
设置参数如下图:
图21: rs485端口配置
在“transmit message configuration”和“receive messageconfiguration”里保持默认设置,在“io address/hw identify”里确认一下“硬件识别号”为11。
此时,完成了硬件的组态,需要编写modbus通讯程序。
在plc中编写发送程序。在项目管理视图下双击“device”—》“program block”—》“add newblock”在弹出的窗口中选择“organizationsblock(ob)”,在其右边的窗口里选择“startup”,去除“symbolic accessonly”的选项勾。如下图所示:
图22: 添加启动ob块
点击“ok”后会打开此ob块,在启动ob块里用mb_comm_load(注:mb_comm_load和mb_slave功能块是在“projectlibrary”下的“library”选项卡里,如下图所示:)
图23: library
调用后如下图所示:
图24: 调用mb_comm_load块
在调用mb_comm_load功能块时 ,都会自动弹出创建相应背景数据块的界面,如下图:
图25:创建背景数据块
按上面的步骤在ob1中插入mb_slave功能块如下图:
图26:调用mb_slave块
在插入功能块的过程,相应的生成mb_comm_load_db和mb_slave_db,两个背景数据块。再创建一个发送或接收的数据缓冲区,点击plc_1项目下的“programblock”下的“add new block”,在弹出的窗口中选择db类型为“bbbbbb db”,并去掉“symbolicaccessonly”选项勾(这样可以对该db块进行直接地址访问),并取名该db块为mb_comm_db。建好这个db块后,双击打开mb_comm_db预先定义数据区的大小,如下图所示:
图27:数据区的定义
完成数据区的定义后,就可以对mb_comm_load功能块和mb_slave功能块进行参数赋值,赋值的参数见图24和图26。在上面的编程块里需要注意的是,在mb_slave功能块中的参数mb_addr参数是此从站的modbus站地址。这里定义为此从站的站地址为2;mb_hold_reg是指向modbus保持寄存器db的指针。保持寄存器db必须为典型的全局db。mb_slave所提供给主站的功能见下表:
表3:mb_slave modbus功能表a
表4:mb_slave modbus功能表b
图28:编译项目
s7-200作为modbus主站的配置步骤如下:
点击桌面上的“v4.0 step 7 microwin sp6”图标(因为step 7microwin安装时并没有安装modbus的库程序,modbus的库程序是需要单独安装的,安装后才可以在库程序中调用modbus的通讯功能块,关于库程序可以咨询西门子热线或访问西门子的****),打开后并编写modbus主站程序如下图:
图29:s7-200 modbus主站编程
在线监控s7-1200中的程序,并监控变量表,修改db3.dbb0到db3.dbb20的值为1到21(db3.dbb0到db3.dbb19对应的modbus的地址为40001-40010)。监控到的值如下图所示:
图30:s7-1200监控变量值
在线监控 s7-200变量表如下图:
图31:s7-1200监控变量值
从上面的变量监控表里可以看到vb420中没有数据,因为在主站的s7-200里的程序里只读取10个变量(即40001-40010)对应着的vb400-vb419,vb420的数据没有接收