1FL6032-2AF21-1LB1

发布
浔之漫智控技术(上海)有限公司
品牌
西门子
型号
模块
产地
德国
电话
15821971992
手机
15821971992
发布时间
2023-07-19 17:06:40
产品详情

西门子PLC的Modbus地址问题
     关键词: 西门子PLC Modbus地址 S7-200 S7-200 SMART 摘要:Modbus地址实际上分为两种情况,本文以西门子S7-200/S7-200 SMART/和S7-1200为例来说明。
  Modbus地址实际上分为两种情况。下面以西门子S7-200/S7-200 SMART/和S7-1200为例来说明:
  种情况:PLC作Modbus主站,Modbus地址和PLC手册里的地址一致,例如作主站的S7-200的MBUS_MSG指令用于向Modbus从站发送请求消息,和处理从站返回的响应消息。要读取从站(另一台S7-200)的I0.0开始的地址区时,它的输入参数Addr(Modbus地址)为10001。S7-200从站保持寄存器的V区起始地址为VB200时,要读取从站VW200开始的V存储区时,保持寄存器的地址是40001。
  第二种情况:PLC作从站,PLC不用管什么Modbus地址,等着主站来读写它的地址区就是了。
  主站的计算机软件(例如DCS或组态软件)的编程人员需要编写实现Modbus通信的程序,首先需要确定Modbus RTU的报文结构。他们一般不熟悉PLC,因此PLC的编程人员往往需要和上位机软件的编程人员一起来讨论Modbus的报文结构。
  容易出问题的就是报文里Modbus地址与PLC存储区地址的对应关系。我做过的一个系统的上位机是专用的组态软件,我通过分析GE PLC手册给出的CRC的循环异或计算实例每一步的中间数据,编写出了CRC计算的C语言程序。通过实验验证了Modbus报文结构和CRC的计算的可行性。
  S7 PLC手册给出的Modbus地址与Modicon公司和GE公司PLC使用的地址相同,是基于1的地址,即同类元件的首地址为1。而西门子PLC采用的是基于0的地址,即同类元件的首地址为0。Modbus报文中西门子PLC的Modbus地址也采用基于0的地址。
  PLC系统手册中的Modbus地址的高位用来表示地址区的类型,例如I0.0的Modbus地址为10001。因为地址区类型的信息已经包含在报文的功能码中了,报文中S7-200的I0.0的Modbus地址不是10001,而是0。报文中其他地址区的Modbus地址也应按相同的原则处理。例如当S7-200从站保持寄存器的V区起始地址为VB200时,VW200对应的保持寄存器在报文中的Modbus地址为0,而不是40001。

    1.启动程序状态

    可以通过在程序编辑器中显示执行语句表、梯形图或功能块图程序时的状态(简称为程序状态),来了解用户程序的执行情况,对程序进行调试。

    启动程序状态的过程如下:将经过编译的程序下载到CPU;将CPU切换到RUN或RUN-P模式;打开逻辑块,点击工具条上的按钮,进入在线监控状态。

    在运行时测试程序如果出现功能错误或程序错误,可能会对人员或财产造成严重损害。

    2.语句表程序状态的显示

    从光标选择的程序段开始监视程序状态。在图1所示的语句表编辑器中,右边窗口显示每条指令执行后的逻辑运算结果( RLO)和状态位STA( Status)、累加器1(STANDARD)、累加器2( ACCU 2)和状态字(STATUS WORD),以及其他内容。

    在菜单命令“选项”→“自定义”打开的对话框的STL选项卡中,选择需要监视的内容。在“LAD/FBD”选项卡可以设置梯形图(LAD)和功能块图(SFB)程序状态的显示方式。

 

    图1    用程序状态监视语句表程序

    3.梯形图程序状态的显示

    梯形图和功能块图用绿色连续线来表示状态满足,即有“能流”流过,见图2左边较粗较浅的线;用篮色点状细线表示状态不满足,没有能流流过;用黑色连续线表示状态未知。

    在程序编辑器中执行菜单命令“选项”→“自定义”,在“LAD/FBD”选项卡中可以改变线型和颜色的设置。

 

    图2    梯形图程序状态的显示

    进入程序状态之前,梯形图中的线和元件因为状态未知,全部为黑色。启动程序状态监控后,从梯形图左侧垂直的“电源”线开始的连线均为绿色(见图2),表示有能流从“电源”线流出。有能流流过的处于闭合状态的触点、方框指令、线圈和“导线”均用绿色表示。

    如果CALL指令成功地调用了逻辑块,CALL线圈为绿色。如果跳转条件满足,跳转被执行,跳转线圈为绿色。被跳过的程序段的指令没有被执行,这些程序段的梯形图为黑色。

    梯形图中加粗的字体显示的参数值是当前值,细体字显示的参数值来自以前的循环,即该程序区在当前扫描循环中未被处理。

    4.使用程序状态功能监视数据块

    必须使用“数据视图”方式在线查看数据块的内容,在线数值在“实际值”列中显示。程序状态被激活后,不能切换为“声明视图”方式。

    现在上位机系统中很多要求具备流量计的流量累计功能,由此引出的几个问题,期望与大家分享。

 

       问题1:自行编写流量累计程序


       自行编写流量累计程序的原理,其实就是积分的原始算法概念,把单位小间隔时间内的瞬时流量乘以单位间隔时间,得到单位小间隔时间内的流量,再把这些小流量累加起来,就的到了累计流量。


       在流量累计编程中经常会遇到实数加法问题,实数加法运算的注意事项也应当引起编程人员的重视,请看下例程序(假设其在OB35中被调用,目的为每隔一定时间间隔就累计一次流量)


L MD0 //累计流量存储值

L MD4 //流量瞬时值

+R

T MD 0


       以上的程序是否存在问题?

     
       很多人会认为没有问题,但实际情况是此程序在运行一段时间后就将出现错误。此程序在运行之初是正常的,因为累计流量初始值及流量瞬时值都为一个很小的浮点数,两数相加后,结果正确。但是当一段时间后,累计流量的数值逐渐增大,当它与瞬时流量的数值相差很远的时候,两者执行加法操作后,瞬时流量的数值将被忽略掉(如9999990.0与0.2做加法操作)。

       其实具备计算机常识的人都应当清楚这一点,这是由于浮点数的存储机制造成的,是所有计算机方面编程都需要考虑的问题。这个问题可以通过使用二次累加或多次累加的方法来解决。所以在编程时应避免数量级相差太多的浮点数之间进行运算。很多人反映“加法指令不好用了”,很有可能就是数量级相差很多的实数进行了加法运算。

       问题2:累计流量误差问题


       对于积分算法,取小的矩形对流量进行累计,肯定是矩形划分越细,误差越小,不存在误差是不可能的。

       问题3:流量计与PLC构成的系统的误差


       流量计有多种多样,下面举些例子:


       1、流量计本身没有累计流量功能,但可以把瞬时流量以模拟量的方式(例如4-20mA)输出。


       此时累计流量的大误差可以估算为:


       流量计本身误差 * 流量计D/A误差 * 模拟量模块A/D误差 * PLC流量累计算法误差假设上面所有误差都是1%,则后的误差约为:4.06% *1.01=1.0406


       对于某些流量计,本身的瞬时流量误差可能就是3%,所以这样的系统累计流量的误差可能还要大些。


       2、流量计本身没有累计流量功能,但可以把瞬时流量以数字量的方式输出。


       有些流量计提供数字量接口,可以连接PLC的数字量输入模板,流量计每流过一定流量后(例如0.1吨),此输入点就导通一次,PLC就把累计流量累加0.1吨即可。


       此类系统避免了A/D,D/A转化的误差,以及PLC累计算法误差。但是会出现一定时间内累计流量不变化的情况,实时性不好(每0.1吨累积的时间)。


       3、流量计本身有累计流量功能,同时可以把瞬时流量以模拟量的方式(例如4-20mA)输出,但无法将累计流量数值送出。


       流量计本身累积流量的数值,后很有可能与PLC的累计流量数值相差很大,原因可能是多方面造成的,除去系统累计流量误差的因素,如果PLC系统检修时,流量计还计量,则PLC无法累积这部分流量。


       4、流量计本身有累计流量功能,同时可以通过通信的方式,把瞬时流量及累计流量数值送给PLC。这种情况理想,但系统的成本也高。  


浔之漫智控技术(上海)有限公司

联系人:
聂聪(先生)
电话:
15821971992
手机:
15821971992
地址:
上海市松江区石湖荡镇塔汇路755弄29号1幢一层A区213室
邮件:
2724917714@qq.com
行业
工控系统及装备 上海工控系统及装备
我们的其他产品
拨打电话 请卖家联系我