关于莫迪康modbus通讯协议详解

西门子S7_200 MODBUS通信协议和支持MODBUS RTU协议的电磁流量计、超声波流量计的通信实例

其实这里的RW功能就是告诉s7-200是读还是写,至于是具体读什么或具体写什么并不是从这里来确定的,是按照它下面的地址“Addr”来区分的。在step7 micro/win 软件的帮助中是这样规定的:

所以,在我们要读取的MODBUS从站的寄存器地址的基础上加上40000,我们最终要输入的地址就是4000x了(注意地址是从40001开始的而不是40000)。这样输入后,PLC在执行MODBUS指令时就会判断并发送的指令是03。同样如果我们输入的地址数据是3000x,PLC就会发送04这个指令了,也可以这样理解,s7-200 MODBUS指令通过判断输入的信息地址“Addr”的最高位来发送具体的功能指令(03、04或其他)的。在设备和PLC通信之前最好先用调试软件来调试设备通信是否正常,是否能采集到数据,然后再编写PLC程序。下面这个软件就是模拟了PLC执行MODBUS指令,从下面图中可以看到30001对应的F(功能指令)是04。

还有一点就是编程时要注意MODBUS指令的调用:MBUS_CTRL_P1指令要一直调用, MBUS_MSG_P1同一条指令使能在没有完成时要一直有效,要想再次调用该指令必须将使能端无效一次扫描让完成标志位复位。

SMB30和SMB130的停止位是1位,其他参数可以修改的。

04 读取线圈状态 读取输入状态 读取保持寄存器 读取输入寄存器 作用 取得一组逻辑线圈的当前状态(ON/OFF) 取得一组开关输入的当前状态(ON/OFF) 在一个或多个保持寄存器中取得当前的二进制值 在一个或多个输入寄存器中取得当前的二进制值

Word文档免费下载:

(下载1-12页,共12页)

专业文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“专业文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取,非会员用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文库认证用户/机构上传的专业性文档,需要文库用户支付人民币获取,具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档。

本设备构件提供设备命令,具体格式如下:设备命令读取命令Read命令格式Read(寄存器名称,寄存器地址,数据类型=返回值)命令举例例1.1:!SetDevice(设备0,6,\\读取0区地址为1,1区地址10的继电器值,放入MCGS变量Data00,Data01中。例1.2:!SetDevice(设备0,6,\\读取寄存器4区地址1的16位无符号值,和地址40的浮点数值,放入MCGS变量Data00,Data01中。写入命令WriteWrite(寄存器名称,寄存器地址,数据类型=写入值)例1.3:!SetDevice(设备0,6,\\将Data00,Data01的值分别以16位无符号和浮点数写入4区寄存器地址10和40中。32位读命令Read32Read32(寄存器名称,寄存器地址,数据类型=字符返回值)例2.1:!SetDevice(设备0,6,\\读取4区寄存器中地址10的32位无符号值,放入字符变量strData中。例2.2:!SetDevice(设备0,6,32位写命令Write32Write32(寄存器名称,寄存器地址,数据类型=字符写入值)\\将字符变量strData的值,以32位无符号格式写入4区寄存器地址1中。例3.1:!SetDevice(设备批量读取A:ReadPReadP(寄存器名称,起始地址,数据类型,数据个数n,数据1,…..数据n[,返回状态])0,6,\表示读取4区寄存器从地址10开始的两个16位无符号数值,放入MCGS变量Data00,Data01中,执行结果存入变量nReturn中。批量读取B:ReadPVReadPV(寄存器名称,起始地址,数据类型,数据个数n,数据1[,返回状态])例3.2:!SetDevice(设备0,6,\返回值)\表示读取4区寄存器从地址10开始的5个16位无符号数值,放入MCGS变量Data00为起始,连续5个变量(即:Data00,Data01,Data02,Data03,Data04)中,结果存入变量“返回值”中。批量读取C:ReadBlockReadBlock(寄存器名称,起始地址,[数据类型1][数据类型…],读取数量n,字符数据[,返回状态])说明:读取数量是指读取N个数据类型中指定的数据段到字符变量中,数据类型可以有多个,之间用中括号分隔。实际连续读取个数=读取数量n*(数据类型1+数据类型n)返回数据“字符数据”格式为:123,456,xxx的csv方式,每次读取时以回车换行结尾。例3.3:!SetDevice(设备0,6,\表示读取4区寄存器从地址10开始,按WBU,DF格式连续读取3组数据(即:数据格式为WUB,DF,WUB,DF,WUB,DF),并以相应格式解析并以逗号间隔的CSV格式存入字符变量StrData中。批量读取D:ReadMutiRegReadMutiReg(寄存器名称,起始地址,数据个数n,数据类型,字符数据)说明:按指定数据类型批量读取起始地址开始连续地址的n个数据到字符变量数据中,数据间以逗号间隔。例3.4:!SetDevice(设备0,6,\ReadMutiReg(4,10,5,DF,strData)\表示读取4区寄存器从地址10开始的5个32位浮点数值,并以逗号间隔形式,放入MCGS字符串变量strData中。例如:字符变量strData=“123.4,234.5,345.6,456.7,567.8”。批量写入A:WritePWriteP(寄存器名称,起始地址,数据类型,数据个数n,数据1,…..数据n[,返回状态])批量写入B:WritePVWriteP(寄存器名称,起始地址,数据类型,数据个数n,数据1[,返回状态])例4.1:!SetDevice(设备0,6,\表示将MCGS变量Data00,Data01的值,以16位无符号形式写入4区寄存器从地址10起始的两个寄存器中,执行结果存入变量nReturn中。例4.2:!SetDevice(设备0,6,\表示将以MCGS变量Data01为起始,连续5个变量的值(即:Data00,Data01,Data02,Data03,Data04),以16位无符号形式写入4区寄存器从地址10起始的两个寄存器中,执行结果存入变量nReturn中。批量写入C:WriteBlockWriteBlock(寄存器名称,起始地址,[数据类型1][数据类型…],读取数量n,字符数据[,返回状态])说明:写入的数据在指定的字符数据对象中,格式为:xxx,xxx,xxx的csv方式,每次读取时换行以回车换行结尾。其他具体格式参见ReadBlock。例4.3:!SetDevice(设备0,6,\表示将strData字符变量中的CSV格式的数据,按指定格式,写入4区寄存器从地址10开始的连续地址中。批量写入D:WriteMutiRegWriteMutiReg(寄存器名称,起始地址,数据个数n,数据类型,字符数据)说明:按指定数据类型将字符数据中以逗号间隔的n个数据,批量写入起始地址开始连续地址的n个数据到字符变量数据中,数据间以逗号间隔。例4.4:!SetDevice(设备0,6,\WriteMutiReg(4,10,5,DF,strData)\其中字符变量strData=“123.4,234.5,345.6,456.7,567.8”,表示将字符串变量strData中以逗号间隔形式的123.4等5个数据,以浮点数形式写入4区寄存器从地址10开始连续5个地址中。通讯日志SetHiddenPro(1,属性值)开启通讯日志:\SetHiddenPro(1,1)\开启错误日志:\SetHiddenPro(1,2)\关闭通讯日志:\SetHiddenPro(1,0)\属性获取GetHiddenPro(1,属性值)!SetDevice(设备0,6,!SetDevice(设备0,6,!SetDevice(设备0,6,读取通讯日志状态:!SetDevice(设备0,6,\etHiddenPro(1,Data01)\Data01为1时,表示通讯日志开启;为0时,表示通讯日志关闭。读取PLC延时:!SetDevice(设备0,6,\etHiddenPro(2,Data01)\读取PLC实际的响应延迟时间,存入变量Data01中。读取最小采集耗时:!SetDevice(设备0,6,\etHiddenPro(3,Data01)\读取采集最小数据(1字长数据)所用耗时,存入变量Data01中。注:通常情况下,驱动日志功能默认为关闭的;参数说明:寄存器名称:字符型变量,表示当前操作的寄存器,值为”1”,”0”,”3”,”4”,分别对应[1区]输入继电器、[0区]输出继电器、[3区]输入寄存器、[4区]输出寄存器。寄存器地址:数值型变量,表示当前操作的寄存器地址,不同的设备地址范围不同,查阅相关手册确定。数据类型:字符型变量,表示当前操作的寄存器数据类型附录2数据:数值型变量、开关量,它是用来存储设备命令数据的MCGS变量。返回状态:返回批量读写设备命令的执行状态(当设备命令格式错误时无效),具体返回值意义请参见通讯状态说明,返回状态为可选参数(以[]标记),用户也可通过通讯状态通道判断返回结果。批量读写说明:1.批量读写操作(包括:ReadP、ReadPV、WriteP、WritePV),为对同类寄存器连续地址的一次性读写操作。使用时要注意变量对应寄存器地址的连续性。2.批量读写操作(包括:ReadP、ReadPV、WriteP、WritePV),数据个数最大为512个。建议一次批量操作数据量不要过大,否则会影响正常采集效果。3.批量读写ReadPV和WritePV为对连续变量的操作,使用时要注意保证变量命名的索引累加的连续性。具体可参看相应“命令举例”部分。4.批量读写ReadBlock和WriteBlock为对连续地址的读写操作,其字符变量格式为特定的CSV格式,在写入及读取解析时一定要注意符合格式要求。通讯日志功能说明:设备命令中提供的通讯日志功能是为了方便用户现场调试,默认为不开启状态。正常时无需开启,否则影响速度。当现场有疑难无法正常通讯时,可开启通讯日志功能,记录日志信息,将通讯过程记录以供技术人员分析。对于通讯跳变等不稳定状态,可以开启通讯错误日志记录(即:当通讯不正常时,记录通讯错误的日志,而正常通讯时不记录日志)。通讯日志默认保存为C:\\ModbusRTU.log(TPC下为\\harddisk\\ModbusRTU.log)。当文件大于6M时自动清空。日志格式举例说明如下:设备地址行号操作时间发/收时间发/收次数字节长度Address:01Line001(6:21:51)属性获取功能说明:使用设备命令中提供的属性获取功能,可以获得通讯日志状态、PLC延时、最小采集耗时等数据。其中:通讯日志状态:读回值为1时,表示通讯日志开启;读回值为2时,表示开启错误日志;为0时,表示通讯日志关闭。PLC延时:为PLC实际的响应延迟时间,即:驱动读写指令帧发出后到PLC响应并开始返回数据帧所用的时间。最小采集耗时:为采集最少数据(1字长数据)所耗费的时间,最小采集耗时=发指令帧耗时+PLC延时+接收数据帧耗时。用户在调试时,可根据PLC延时、最小采集耗时判断PLC的实际响应时间,并结[1289961]Send0/Revc0[8Byte][20ms]B9CA耗时发送或接收内容

我要回帖

更多关于 modbus通讯协议详解 的文章

 

随机推荐