线下实训
HOME
线下实训
正文内容
plc编程地址计算 快速推算Modbus通信地址对应的PLC实际地址
发布时间 : 2024-11-26
作者 : 小编
访问数量 : 23
扫码分享至微信

快速推算Modbus通信地址对应的PLC实际地址

快速推算西门子PLC Modbus通信地址对应的PLC实际地址

以下说明都是应用于西门子PLC 通信MODBUS的场合。

我们知道Modbus地址有4类:

00001---09999是离散输出地址,对应PLC的Q线圈。

10001---19999是离散输入地址,对应PLC的I输入点。

30001---39999是输入寄存器地址,对应PLC模拟量输入AIW

40001---49999是保持寄存器地址,对应PLC的V存储器

它们与PLC S7-200的地址对应关系如下:

一、以0开头的离散输出地址0XXXX--------Qaa.b

00001-------Q0.0 00002-------Q0.1 00003-------Q0.2

…………………………..

00126------Q 15.5 00127--------Q15.6 00128--------Q15.7

快速写出它们对应关系呢?用以下公式推算:

XXXX-1)/ 8=商---作为字节号aa

余数---作为位号b

如地址126 (00126-1)/8=商15---余5 则对应Q15.5

地址4 (4-1)/8=0 余3 则对应Q0.3

反过来,知道Qaa.b,对应地址

地址号=aa*8+(b+1)

如:Q15.7-----地址=15*8+(7+1)=128---则地址00128

Q1.7------地址=1*8+(7+1)=16------则地址00016

二、以1开头的离散输入地址1XXXX--------Iaa.b

10001-------I0.0 10002-------I0.1 10003-------I0.2

…………………………..

10126------I15.5 00127--------I15.6 10128--------I15.7

公式计算同上。地址要加上开头的10000

如地址10009,则对应(9-1)/8=1--余0--------I1.0

I1.1---------地址=1*8+(1+1)=10---地址为10010

以上每一个MODBUS地址对应一个位

三、30001---39999是输入寄存器地址 3XXXX-------AIWaa

30001-------AIW0 30002-------AIW2 30003-------AIW4

…………………………..

30030------AIW58 30031--------AIW60 30032--------AIW62

对应公式

AIW aa=(XXXX-1)*2

如30004 aa=(0004-1)*2=6------对应AIW6

如30030 aa=(0030-1)*2=58----对应AIW58

反过来 地址=(aa+2)/2 再加上开头30000

如AIW62 则地址=(32+2)/2=32------地址30032

注意每一个3XXXX地址对应一个

四、40001---49999是保持寄存器地址,

它对应-----从站指定的供MODBUS地址使用的V存储器。以&VBa开头的起始地址(间接寻址方式)

如下图,是PLC从站设定,HoldStart---设定起始地址是&VB0

则:对应关系

40001--------VW0(VB0、VB1) 40002-----VW2(VB2、VB3)

40003--------VW4(VB4、VB5) 40100 VW198(VB198、VB199)

如果HoldStart---设定起始地址是&VB50

则对应关系:

40001---VW50 40002---VW52 40003---VW54

40050---VW148 40051-----VW150

因此可得公式,HoldStart---设定起始地址是VBa

则对应关系

4XXXX对应 VW=(XXXX-1)*2+a

举例:HoldStart---设定起始地址是VB11

则40001对应 (0001-1)*2+11=11,对应vw11

40010对应 (0010-1)*2+11=29,对应VW29

反过来 已知VWb---对应地址

地址={(b-a)+2}/2

如VW29-----对应{(29-11)+2}/2=10-----对应地址40010

VW51------对应{(51-11)+2}/2=21------对应地址40021

西门子 S7-1200PLC编程 数组的使用方法

关注“ 技成微课堂 ”,一起涨知识~

私信回复:64,领64本西门子电子书!

使用数组数据类型注意事项

ARRAY类型是由数目固定且数据类型相同的元素组成的数据结构。ARRAY类型的定义和使用需要注意以下几点:

ARRAY类型可以在DB、OB/FC/FB接口区、PLC数据类型处定义;无法在PLC变量表中定义。数组定义:Array[维度1下限..维度1上限,维度2下限..维度2上限,...]of <数据类型>,最多可包含 6 个维度;数组元素的数据类型包括:除数组类型、Variant类型以外的所有类型;数组下标的数据类型为整数,下限值必须小于或等于上限值,上下限的限值在S7-1200 V3.0及其以前为Int范围(-32768~+32767),在S7-1200 V4.0及其以后前为DInt范围(-2147483648 ~+21474836487),可以使用局部常量或全局常量定义上下限值,数组的元素个数受DB块剩余空间大小以及单个元素大小的限制;从S7-1200 V2.0开始,下标可以不仅仅是常数、常量,也可以是变量,还可以是混合使用(多维数组),如果编程语言是SCL的话,下标还可以是表达式。使用数组的变量下标,可以在程序中很容易地实现间接寻址。注意,下标变量必须是符号名,不能是DB1.DBW0这种没有对应符号名的绝对地址。从S7-1200 V4.2开始,FC的Input/Output/InOut以及FB的InOut可以定义形如Array[*]这种变长数组,要求必须是优化FC/FB块,在调用FC/FB的实参中可以填写任意数据类型相同的数组变量;当然,也可以多维变长的数组,例如Array[*,*]of Int。数组可以使用单个数组元素例如"DB1".Static_1[1],也可以使用整个数组例如"DB1".Static_1。多维数组可以降维使用,例如三维数组:3D[0..2,0..3,0..4]of Int是一个3×4×5大小的Int数组,3D[0]是一个4×5大小的二维Int数组,3D[0,1]是一个5个元素的一维Int数组,当然多维数组下标也可以换成变量,例如3D[Tag_1,1]这种;S7-1200 V4.2开始,多重背景支持数组形式,即Array of FB,这样可以在FB中使用循环指令更方便的编写程序。不支持Array[*] of FB。在TIA 博途 V10.5 SP2,S7-1200 V1.0的时候,曾经引入FieldRead 和 FieldWrite 指令,用于数组下标的变址寻址,这种方法在TIA 博途 V11之后可以由下标变量完全取代,并且更为简化,所以该指令也只是位于“移动操作>原有”中,用于早期版本向上移植时使用,它的使用方法参见FieldRead 和 FieldWrite 间接寻址。

数组的基本使用方法

一. DB中创建,如图1所示:

图1 Array在DB中的创建

二. FC的InOut中创建,如图2所示:

图2 Array在FC形参中的创建

三. 数组作为实参,如图3所示:

图3 Array作为FC的实参

四. FC程序中使用数组元素,使用形参,如图4所示:

图4 FC程序中使用形参

五. FC程序中使用数组元素,下标为变址寻址,使用形参, 如实现以下功能,将0-7这8个数,送入数组下标为0-7的8个元素,如图5-7所示:

(1)FC形参设置,如图5所示:

图5 FC形参设置

(2)程序编制,如图6所示:

图6 程序详情

(3)SCL的版本,如图7所示:

图7 SCL版本的程序

六. 在程序中直接使用数组元素,如图8所示:

图8 程序中直接使用数组元素

七. 在程序中直接使用数组元素,下标为变址寻址, 如实现以下功能,将0-7这8个数,送入数组下标为0-7的8个元素,如图9-11所示:

(1)数据块定义,如图9所示:

图9 DB1的定义

(2)程序编制,如图10所示:

图10 程序详情

(3)SCL的版本,如图11所示:

图11 SCL版本程序

Array【*】使用实例

实现以下功能:使用FC的Input定义数组Array[*] of Int,求变长数组元素的总和,可以按照以下步骤来完成。

一. 使用Array[*] ,必须使用如图12所示的指令,计算数组元素的上下限,从而得出元素个数:

图12 指令位置

二. 定义变量,如图13所示。赋初始值,计算上下限,如图14所示:

图13 定义形参

三、计算上下限程序,如图14所示:

(1)输入Array[*]类型的变量

(2)所求上下限的维数

(3)该维数下的下限/上限,DINT类型

图14 计算上下限

四. 求和程序,如图15所示:

图15 求和的程序

五. SCL的版本,如图16所示:

图16 SCL版本程序

六. OB1中调用实参为不同数组元素个数的数组,如图17所示:

图17 OB1调用程序

Array of FB的使用实例

实现以下功能:FB3多次调用FB4,在FB3内部循环调用,减少程序量。FB4的两个Input:Start,Stop,一个InOut:Run,建立Array[0..7] of FB4。同时建立变量 Array[0..7] of Struct,作为对应FB4的输入和输出,如图18所示:

图18 程序详情

版权声明:文章转自网络,版权归原作者所有。如有侵权,请联系我们删除!

私信回复:64,领64本西门子电子书!

相关问答

plc如何设置地址变量?

PLC的地址是PLC的重要属性,通过地址设定了其所对应回路在程序中的逻辑关系。在elecworks中,有手动及自动两种编址方式。手动编址方式:在电气项目中,一般在...

plc阵列的计算方法?

PLC阵列的计算方法是按照所需控制逻辑的真值表,以及PLC的输入/输出点数和存储容量进行计算。具体来说,需要先将工艺流程及控制逻辑转换为真值表,然后根据输入/...

西门子plc和变频器经过以太网通讯的话,地址是怎么算的?

以太网只有ip地址例如192.168.1.3这样你说的40001是modbus寄存器地址例如你的变频器是16进制H2000你要换成十进制,然后带入40001里面就是产品器实际地址了...

plc的算法是怎样实现的?

PLC(可编程逻辑控制器)的算法是通过编程实现的。首先,工程师需要使用特定的编程语言,如LadderDiagram(梯形图)或StructuredText(结构化文本),来描述控...PL...

只有小学文化程度,能学会PLC编程吗?里面很多复杂的计算方式我根本就看不懂。培训老师说可以学会?

想听实话吗?那我告诉你:你的文化程度绝对不适合学习PLC编程!从我开始干电工起接触到不少电工师傅,可会PLC编程的一个没有!工作中pLC出问题基夲都是拿出去或请...

plc模拟量如何编程求实例?

编程PLC模拟量需要使用模拟量输入和输出模块。首先,配置输入模块并将其连接到传感器。然后,在PLC编程软件中创建一个模拟量输入变量,并将其与输入模块的通道...

PLC正比例程序怎么写?

编写PLC正比例程序可以使用不同的编程语言和PLC品牌。下面是一种常见的PLC正比例控制程序的示例,使用了基于ladderdiagram(梯形图)的编程语言。步骤:配置...

plc模拟量输入的计算公式讲解?

您好,PLC模拟量输入的计算公式可以根据所使用的模拟量信号的类型和范围进行选择。一般情况下,模拟量输入信号的范围是0-10V或0-20mA。在这种情况下,PLC可以通...

西门子plc运算指令?

西门子PLC的运算指令包括算术运算指令,逻辑运算指令,比较运算指令,移位指令和其他特殊函数指令。这些指令用于在PLC程序中对数据进行操作,满足自动化控制系统...

plc如何传送信号模块?

PLC(可编程逻辑控制器)传送信号模块是通过输入和输出模块来实现的。以下是一般步骤:输入模块:将外部传感器或开关的信号连接到PLC的输入模块上。输入模块接...

 快乐大本营小小彬  秦皇岛市新世纪高中 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部