您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > s71200 modbus 通讯指令解析
S7-1200作为ModbusRTU主站S7-1200支持ModbusRTU通信模式的模块可作为ModbusRTU主站。以下以CPU1215CDC/DC/DC和CM1241RS485模块为例,介绍S7-1200ModbusRTU主站通信组态及编程步骤。硬件和软件需求及所完成的通信任务:硬件:①CPU1215CDC/DC/DC(订货号:6ES7215-1AG31-0XB0)②CM1241RS485(订货号:6ES7241-1CH30-0XB0)③PS307电源(订货号:6ES7307-1KA02-0AA0)④PC(带以太网卡)⑤TP以太网电缆软件:①STEP7ProfessionalV11SP2UPD4+HSP②ModSim(该软件是第三方软件,可以从Internet网络下载)所完成的通信任务:将ModbusRTU从站ModSim中Modbus地址从40001开始的5个字中的数据,分别读取到ModbusRTU主站CPU1215C中地址从DB1.DBW0开始的5个字中。1.组态ModbusRTU通信模块在硬件目录里找到“通信模块”→“点到点”→“CM1241(RS485)”,双击或拖拽此模块至CPU左侧即可,如下图1所示:图1组态通信模块接下来,在“设备视图”中用鼠标选中CM1241(RS485)模块,在“属性”→“端口组态”中配置此模块硬件接口参数。如下图2所示:以下以传输率=9.6Kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=1,其它保持默认设置为例。图2RS485端口设置最后在“硬件标识符”里确认一下硬件标识符为271,如下图3所示:图3硬件标识符2.添加启动OB在项目树下选择“CPU1215CDC/DC/DC”→“程序块”→“添加新块”,在弹出的窗口中选择“OB组织块”→“Startup”,添加启动OB100,如下图4所示:图4添加启动OB3.调用MB_COMM_LOAD指令为使端口一启动就被设置为ModbusRTU通信模式,可在OB100中调用“MB_COMM_LOAD”指令。调用“MB_COMM_LOAD”指令时会自动弹出创建相应背景数据块的界面,如下图5所示:图5调用MB_COMM_LOAD指令点击“确认”为该指令创建背景数据块后,为各输入/输出引脚分配地址。尤其需注意MB_DB输入引脚需指向“MB_MASTER”指令的背景数据块,如下图6所示:注意:“MB_COMM_LOAD”指令输入位“REQ”需使用上升沿触发。由于OB100只在S7-1200启动时执行一次,因此,此例中将“REQ”设为“TRUE”。图6MB_COMM_LOAD指令MB_COMM_LOAD指令参数意义如下表1所示:引脚说明EN使能端REQ在上升沿执行该指令PORT通信端口的硬件标识符BAUD波特率选择:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200(注意:所有其它值均无效)PARITY奇偶检验选择:0-无;1-奇校验;2-偶校验FLOW_CTRL流控制选择:0-(默认值)无流控制RTS_ON_DLYRTS延时选择:0-(默认值)RTS_OFF_DLYRTS关断延时选择:0-(默认值)RESP_TO响应超时:默认值=1000ms。MB_MASTER允许用于从站响应的时间(以毫秒为单位)。MB_DB对MB_MASTER或MB_SLAVE指令所使用的背景数据块。DONE完成位:指令执行完成且未出错置1ERROR错误位:0-未检测到错误;1-检测到错误。在参数STATUS中输出错误代码。STATUS端口组态错误代码表1MB_COMM_LOAD指令参数意义4.创建DATA_PTR数据发送、接收缓冲区通过“程序块”→“添加新块”,选择“数据块(DB)”创建DB块,选择“标准与S7-300/400兼容”,点击“确认”键。在DB中创建数据类型为5个字的数组,如下图7所示:注意:DATA_PTR数据发送、接收缓冲区使用的DB访问类型必须是标准与S7-300/400兼容。图7创建DATA_PTR数据发送、接收缓冲区5.调用MB_MASTER指令在OB1中调用“MB_MASTER”指令,调用该指令时会自动弹出创建相应背景数据块的界面,如下图8所示:图8调用MB_MASTER指令点击“确认”为该指令创建背景数据块后,并为各输入/输出引脚分配地址,如下图9所示:注意:“MB_MASTER”指令的输入位“REQ”必须使用上升沿触发。以下以S7-1200作为ModbusRTU主站,用F03功能码读取ModbusRTU从站2,从Modbus地址40001开始的五个字,接收的数据存放在缓冲区DB3.DBW0开始区域为例。设置如下所示:MB_ADDR=2,MODE=0,DATA_ADDR=40001,DATA_LEN=5。地址对应关系如下表2所示:ModbusRTU主站CPU1215C数据缓冲区地址ModbusRTU从站Modbus地址DB3.DBW040001DB3.DBW240002DB3.DBW440003DB3.DBW640004DB3.DBW840005表2Modbus地址对应关系图9MB_MASTER指令MB_MASTER指令参数意义如下表3所示:引脚说明EN使能端REQ在上升沿执行该指令,请求将数据发送或读取到Modbus从站MB_ADDRModbusRTU从站地址。默认地址范围:0至247;扩展地址范围:0至65535。值0被保留用于将消息广播到所有Modbus从站。MODE模式选择:指定请求类型DATA_ADDR从站中的起始地址:指定Modbus从站中将供访问的数据的起始地址。DATA_LEN数据长度:指定要在该请求中访问的位数或字数。DATA_PTR数据指针:指向要写入或读取的数据的M或DB地址(DB访问类型必须是标准与S7-300/400兼容)。DONE完成位:上一请求已完成且没有出错后,DONE位将保持为TRUE一个扫描周期时间。BUSY0–无正在进行的MB_MASTER操作;1–MB_MASTER操作正在进行EEROR错误位:上一请求因错误而终止后,ERROR位将保持为TRUE一个扫描周期时间。STATUS参数中的错误代码值仅在ERROR=TRUE的一个扫描周期内有效。STATUS错误代码表3MB_MASTER指令参数意义关于MODE,DATA_ADDR,DATA_LEN可在下表4中查看:MB_MASTERModbus功能Modbus地址参数地址类型Modbus数据长度参数Modbus功能模式0读取00001到09999输出位1到20000110001到19999输入位1到20000230001到39999输入寄存器1到1250440001到49999400001到465535(扩展)保持寄存器1到12503模式1写入00001到09999输出位1(单个位)0540001到49999400001到465535(扩展)保持寄存器1(单个字)0600001到09999输出位2到19681540001到49999400001到465535(扩展)保持寄存器2到12316模式2有些Modbus从站不支持使用Modbus功能05H或06H写入单个位或字。在这样的情况下,可通过模式2强制使用Modbus功能15H或16H写入单个位或字写入00001到09999输出位2到19681540001到49999400001到465535(扩展)保持寄存器1到12316模式11读出从站的通信状态字和事件计数器:状态字指示指令的执行状态(0:未在执行;0xFFFF:正在执行)。每次成功传送一条消息时,事件计数器值将递增。使用该功能时,忽略“MB_MASTER”指令的DATA_ADDR和DATA_LEN参数。模式80通过读取错误代码(0x0000)检查从站状态:每个请求1个字模式81通过诊断代码0x000A复位从站的事件计数器:每个请求1个字表4MB_MASTERModbus功能表6.Modbus从站软件设置注意:ModbusRTU从站采用ModSim软件测试,该软件是第三方软件,可以从Internet网络下载。在打开的ModSim软件中建立连接,并设置RTU模式的参数:波特率Baud=9600,数据位Data=8,停止位Stop=1,校验Parity=NONE,如下图10所示:图10建立ModSim连接选择“File”→“New”打开ModSim通信界面,设置ModbusRTU从站的地址DeviceId=2,开始地址Address=0001,数据长度Length=5,Modbus数据类型功能码03。分别双击各Modbus地址后的数据区,出现“WriteRegister对话框,在此写入数据值,如下图11所示:注意:DeviceId设置必须与“MB_MASTER”指令中输入引脚“MB_ADDR”设置的地址一致。图11设置ModSim7.ModbusRTU测试结果在STEP7ProfessionalV11UPD4软件中打开该项目CPU1215CDC/DC/DC的“监控表”,触发“MB_MASER”指令的输入位M10.0。ModbusRTU主站将ModSim从站地址40001中的数值11,40002中的数值12,40003中的数值13,40004中的数值14,40005中的数值15,分别读取到了地址DB3.DBW0,DB3.DBW2,DB3.DBW4,DB3.DBW6,DB3.DBW8中,如下图12所示:图12ModbusRTU测试结果S7-1200ModbusRTU通信模式的多地址或多站点轮询多个CM1241RS485通讯模块之间可以使用PROFIBUS电缆相互连接。可以将1个主站和最多31个MODBUS从站使用PROFIBUS电缆连接组网。S7-1200ModbusRTU轮询需要通过上一条”MB_MASTER“指令输出位“Done“=1来触发下一条“MB_MASTER“指令。具体说明及编程思路请参考以下链接:如何使用STEP7(TIAPortal)V11为SIMATICS7-1200建立ModbusRTU通讯?和MB_MASTER指令STATUS错误代码STATUS(W#16#)说明0000端口无错误8180端口ID值无效8181波特率值无效8182奇偶校验值无效8183流控制值无效8184响应超时值无效8185MB_DB参数不是MB_MASTER或MB_SLAVE的背景数据块表5MB_COMM_LOAD指令STATUS错误代码STATUS(W#16#)说明0000无错误80C8从站超时。检查波特率,奇偶校验和从站的接线80D1接收方发出了暂停主动传输的流控制请求并在指定的等待时间内未重新激活该传输。如果接收方在等待时间内未检测到CTS,则在硬件流控制期间也会生成该错误。80D2由于没有从DCE接收到DSR信号,传送请求终止80E0接收缓冲区已满,消息被终止80E1奇偶校验错误,消息被终止80E2组帧错误,消息被终止80E3超时错误,消息被终止80E4指定长度超出总缓冲区大小,消息被终止8180无效端口ID值8186Modbus站地址无效8188对于广播调用,参数MODE的值无效。8189数据地址值无效818A数据长度值无效818B指向本地数据源/目标的指针无效818CDATA_PTR的指针无效:使用指向位存储区或访问类型为“标准-与S7-300/400兼容”的数据块的指针。8200端口正忙于处理传送请求表6MB_MASTER指令STATUS错误代码(指令的通信和组态错误消息)STATUS(W#16#)从站的响应代码说明8380-CRC错误838101不支持此功能码838203数据长度错误838302数据地址错误或地址超出DATA_PTR的有效范围838403数据值错误838503不支持此数据诊断代码8386-响应中的功能代码与传送中的功能代
本文标题:s71200 modbus 通讯指令解析
链接地址:https://www.777doc.com/doc-3508591 .html