电机控制
直播中

王超

7年用户 1228经验值
私信 关注
[文章]

介绍S7-1200 Modbus RTU主站通信组态及编程步骤

  S7-1200 支持Modbus RTU通信模式的模块可作为Modbus RTU主站。以下以 CPU1215C DC/DC/DC和CM1241 RS485模块为例,介绍S7-1200 Modbus RTU主站通信组态及编程步骤。
  硬件和软件需求及所完成的通信任务:
  硬件:
  ① CPU1215C DC/DC/DC (订货号:6ES7 215-1AG31-0XB0)
  ② CM1241 RS485 (订货号:6ES7 241-1CH30-0XB0)
  ③ PS 307电源(订货号:6ES7307-1KA02-0AA0)
  ④ PC(带以太网卡)
  ⑤ TP以太网电缆
  软件:
  ① STEP 7 Professional V11 SP2 UPD4+HSP
  ② ModSim(该软件是第三方软件,可以从 Internet 网络下载
  所完成的通信任务:
  将Modbus RTU从站ModSim中Modbus地址从40001开始的5个字中的数据,分别读取到Modbus RTU主站CPU1215C 中地址从DB1.DBW0开始的5个字中。
  1. 组态Modbus RTU 通信模块
       在硬件目录里找到“通信模块”→“点到点”→“CM1241(RS485)”,双击或拖拽此模块至CPU左侧即可,如下图1所示:
2.jpg
  接下来,在“设备视图”中用鼠标选中CM1241(RS485)模块,在“属性”→“端口组态”中配置此模块硬件接口参数。如下图2所示:
  以下以传输率=9.6Kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=1,其它保持默认设置为例。
2.jpg
  最后在“硬件标识符”里确认一下硬件标识符为271,如下图3所示:
  2. 添加启动OB
2.jpg
       在项目树下选择“CPU1215C DC/DC/DC”→“程序块”→“添加新块”,在弹出的窗口中选择“OB 组织块”→ “Startup”,添加启动OB 100,如下图4所示:
2.jpg
  3. 调用MB_COMM_LOAD指令
      为使端口一启动就被设置为Modbus RTU通信模式,可在OB 100中调用“MB_COMM_LOAD”指令。调用“MB_COMM_LOAD”指令时会自动弹出创建相应背景数据块的界面,如下图5所示:
2.jpg
  点击“确认”为该指令创建背景数据块后,为各输入/输出引脚分配地址。尤其需注意MB_DB输入引脚需指向“MB_MASTER”指令的背景数据块,如下图6所示:
  注意:“MB_COMM_LOAD”指令输入位“REQ”需使用上升沿触发。由于OB 100只在S7-1200启动时执行一次,因此,此例中将“REQ”设为“TRUE”。
2.jpg
  MB_COMM_LOAD指令参数意义如下表1所示:
2.jpg
  4. 创建DATA_PTR数据发送、接收缓冲区
       通过“程序块”→ “添加新块”,选择“数据块(DB)”创建 DB 块,选择“标准与S7- 300/400兼容” ,点击“确认”键。在DB中创建数据类型为5个字的数组,如下图7所示:
  注意:DATA_PTR数据发送、接收缓冲区使用的DB访问类型必须是标准与S7- 300/400兼容。
2.jpg
3.jpg
  5. 调用MB_MASTER指令
       在OB1中调用“MB_MASTER”指令,调用该指令时会自动弹出创建相应背景数据块的界面,如下图8所示:
2.jpg
  点击“确认”为该指令创建背景数据块后,并为各输入/输出引脚分配地址,如下图9所示:
  注意:“MB_MASTER”指令的输入位“REQ”必须使用上升沿触发。
2.jpg
  以下以S7-1200作为Modbus RTU主站,用F03功能码读取Modbus RTU从站2,从Modbus地址40001开始的五个字,接收的数据存放在缓冲区DB3.DBW0开始区域为例。设置如下所示:MB_ADDR=2,MODE=0,DATA_ADDR=40001,DATA_LEN=5。
  地址对应关系如下表2所示:
2.jpg
  MB_MASTER指令参数意义如下表3所示:
2.jpg
  关于MODE,DATA_ADDR,DATA_LEN可在下表4中查看:
2.jpg
3.jpg
  6. Modbus 从站软件设置
       注意:Modbus RTU从站采用ModSim软件测试,该软件是第三方软件,可以从 Internet 网络下载。
  在打开的ModSim软件中建立连接,并设置RTU模式的参数:波特率Baud=9600,数据位Data=8,停止位Stop=1,校验Parity=NONE,如下图10所示:
2.jpg
  选择“File”→“New”打开ModSim通信界面,设置Modbus RTU从站的地址Device Id=2,开始地址Address=0001,数据长度Length=5,Modbus数据类型功能码03。分别双击各Modbus地址后的数据区,出现“Write Register“对话框,在此写入数据值,如下图11所示:
  注意:Device Id设置必须与“MB_MASTER”指令中输入引脚“MB_ADDR”设置的地址一致。
2.jpg
  7. Modbus RTU测试结果
       在STEP 7 Professional V11 UPD4软件中打开该项目CPU1215C DC/DC/DC的“监控表”,触发“MB_MASER”指令的输入位M10.0。Modbus RTU主站将ModSim从站地址40001中的数值11,40002中的数值12,40003中的数值13,40004中的数值14,40005中的数值15,分别读取到了地址DB3.DBW0,DB3.DBW2,DB3.DBW4,DB3.DBW6,DB3.DBW8中,如下图12所示:
2.jpg
  S7-1200 Modbus RTU通信模式的多地址或多站点轮询
  多个CM 1241 RS485 通讯模块之间可以使用 PROFIBUS 电缆相互连接。可以将 1 个主站和最多 31 个 MODBUS 从站使用 PROFIBUS 电缆连接组网。
  S7-1200 Modbus RTU轮询需要通过上一条”MB_MASTER“指令输出位“Done“=1来触发下一条“MB_MASTER“指令。
  MB_COMM_LOAD和MB_MASTER指令STATUS错误代码
2.jpg
3.jpg
4.jpg
  常见问题说明
      1、如何检查S7-1200 通信模块CM1241是否已被成功设置为Modbus RTU通信模式?
  可在程序或监控表中查看“MB_COMM_LOAD”指令的输出位“DONE”,“ERROR”以及“STATUS”状态来判断S7-1200 通信模块CM1241是否已被成功设置为Modbus RTU通信模式。
  如果该模块被成功设置为Modbus RTU通信模式:“MB_COMM_LOAD”指令输出位“DONE”=1,“ERROR”=0,输出状态字“STATUS”=0;
  如果该模块未被成功设置为Modbus RTU通信模式:“MB_COMM_LOAD”指令输出位“DONE”=0,“ERROR”=1,输出状态字“STATUS”输出错误代码。具体错误原因可查看“MB_COMM_LOAD指令STATUS错误代码”表。
  2、执行“MB_MASTER”指令,总是显示输出位“Busy”=1,为什么?
  因为端口正忙于处理传送请求。出现该错误时请检查“MB_MASTER“指令输入位”REQ“是否为上升沿触发,或是否有其它的多个“MB_MASTER”指令在执行。
  3、通过执行“MB_MASTER”指令无法写入或读取Modbus RTU丛站地址的数据,但程序中监视“MB_MASTER”指令错误位“Error”=0,错误代码“STATUS”=16#0,为什么?
  “MB_MASTER”指令上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间,并且 STATUS 参数中的错误代码值仅在 ERROR =TRUE 的一个扫描周期内有效,因此无法通过程序或监控表查看到。可采用如下所示的编程方式将ERROR 和 STATUS 参数读出。
2.jpg
  4、S7-1200 作为Modbus RTU 主站,如何对Modbus RTU从站进行0-65535扩展寻址?
  通常,“MB_MASTER”指令的背景数据块“MB_MASTER_DB”中的“EXTENDED_ADDRESSING”默认为0,可以对Modbus RTU从站地址0-247进行访问。
  将“MB_MASTER”指令的背景数据块“MB_MASTER_DB”中的“EXTENDED_ADDRESSING”设置为1,才能对Modbus RTU从站进行0-65535扩展寻址。可按照如下步骤设置“EXTENDED_ADDRESSING”:
  首先找到“系统块”→“程序资源”,双击“MB_MASTER_DB”,在“MB_MASTER”指令的背景数据块“MB_MASTER_DB”中查看“EXTENDED_ADDRESSING”。
2.jpg
  在“监控表”内输入“MB_MASTER_DB.EXTENDED_ADDRESSING”,将该位置1。
2.jpg




原作者:西安达泰电子

更多回帖

发帖
×
20
完善资料,
赚取积分