STEP7中批量把模拟量输入转换为浮点数
STEP7-功能块全中文说明资料

18
35. S_ODT接通延时 S5定时器 36. S_ODTS保持接通延时 S5定时器 37. S_OFFDT断开延时 S5定时器
19
38. ---( SP ) 脉冲定时器线圈
---( SP )
39. ---( SE ) 扩展脉冲定时器线圈
---( SE ) 20
12
? 调用多重背景 ? 调用来自库的块 ? 使用 MCR 功能的重要注意事项 ? ---(MCR<) 主控制继电器打开 ? ---(MCR>) 主控制继电器关闭 ? ---(MCRA) 主控制继电器激活 ? ---(MCRD) 主控制继电器取消激活 ? RET 返回
移位和循环移位指令
? SHR_I 整数右移 ? SHR_DI 长整数右移 ? SHL_W 左移字 ? SHR_W 右移字 ? SHL_DW 双字左移 ? SHR_DW 右移双字 35. SHR_I 整数右移
两个 32 位 IEEE 浮点数
使用浮点运算指令,可对 一个 32 位 IEEE 浮点数 执行下列操作: ? 求绝对值 (ABS) ? 求平方 (SQR) 和平方根 (SQRT) ? 求自然对数 (LN) ? 求指数值 (EXP) 以 e (= 2,71828) 为底
8
? 求下列 32 位 IEEE 浮点数表示的角度的三角函数 - 正弦 (SIN) 和反正弦 (ASIN) - 余弦 (COS) 和反余弦 (ACOS) - 正切 (TAN) 和反正切 (ATAN)
11
32. ATAN 得到反正切值
33. MOVE分配值
34. 程序控制指令概述 说明 可使用下列程序控制指令: ? ---(CALL) 调用来自线圈的 FC SFC( 不带参数 ) ? CALL_FB 调用来自框的 FB ? CALL_FC 调用来自框的 FC ? CALL_SFB 调用来自框的系统 FB ? CALL_SFC 调用来自框的系统 FC
S7-300 PLC模拟量输入输出量程转换教程

S7-300/400 PLC模拟量输入/输出的量程转换SLC A&D CSMarch, 20051模拟量输入/输出量程转换的概念 (3)2S7-300/400 PLC模拟量输入/输出模板 (3)2.1需要使用的模板 (3)2.2涉及的信号类型 (3)3STEP 7中模拟量输入/输出的编程 (3)3.1FC105/FC106在哪里 (3)3.2FC105/FC106功能描述 (5)3.2.1FC105功能描述 (5)3.2.2FC106功能描述 (5)3.3FC105/FC106参数定义 (6)3.3.1FC105 的参数定义 (6)3.3.2FC106的参数定义 (6)3.4例子程序 (7)3.4.1FC105例子程序 (7)3.4.2FC106例子程序 (8)1模拟量输入/输出量程转换的概念实际的工程量,如压力、温度、流量、物位等要采用各种类型传感器进行测量。
传感器将输出标准电压、电流、温度、或电阻信号供PLC采集,PLC的模拟量输入模板将该电压、电流、温度、或电阻信号等模拟量转换成数字量——整形数(INTEGER)。
在PLC程序内部要对相应的信号进行比较、运算时,常需将该信号转换成实际物理值(对应于传感器的量程)。
而经程序运算后得到的结果要先转换成与实际工程量对应的整形数,再经模拟量输出模板转换成电压、电流信号去控制现场执行机构。
这样就需要在程序中调用功能块完成量程转换。
如一个压力调节回路中,压力变送器输出4-20mA DC信号到SM331模拟量输入模板,SM331模板将该信号转换成0-27648的整形数,然后在程序中要调用FC105将该值转换成0-10.0(MPa)的工程量(实数),经PID运算后得到的结果仍为实数,要用FC106转换为对应阀门开度0-100%的整形数0-27648后,经SM332模拟量输出模板输出4-20mA DC信号到调节阀的执行机构。
本文主要讨论S7-300/400 PLC编程中模拟量的量程转换。
S7-300PLC模拟量输入输出量程转换教程

S7-300/400 PLC模拟量输入/输出的量程转换SLC A&D CSMarch, 20051模拟量输入/输出量程转换的概念 (3)2S7-300/400 PLC模拟量输入/输出模板 (3)2.1需要使用的模板 (3)2.2涉及的信号类型 (3)3STEP 7中模拟量输入/输出的编程 (3)3.1FC105/FC106在哪里 (3)3.2FC105/FC106功能描述 (5)3.2.1FC105功能描述 (5)3.2.2FC106功能描述 (5)3.3FC105/FC106参数定义 (6)3.3.1FC105 的参数定义 (6)3.3.2FC106的参数定义 (6)3.4例子程序 (7)3.4.1FC105例子程序 (7)3.4.2FC106例子程序 (8)1模拟量输入/输出量程转换的概念实际的工程量,如压力、温度、流量、物位等要采用各种类型传感器进行测量。
传感器将输出标准电压、电流、温度、或电阻信号供PLC采集,PLC的模拟量输入模板将该电压、电流、温度、或电阻信号等模拟量转换成数字量——整形数(INTEGER)。
在PLC程序内部要对相应的信号进行比较、运算时,常需将该信号转换成实际物理值(对应于传感器的量程)。
而经程序运算后得到的结果要先转换成与实际工程量对应的整形数,再经模拟量输出模板转换成电压、电流信号去控制现场执行机构。
这样就需要在程序中调用功能块完成量程转换。
如一个压力调节回路中,压力变送器输出4-20mA DC信号到SM331模拟量输入模板,SM331模板将该信号转换成0-27648的整形数,然后在程序中要调用FC105将该值转换成0-10.0(MPa)的工程量(实数),经PID运算后得到的结果仍为实数,要用FC106转换为对应阀门开度0-100%的整形数0-27648后,经SM332模拟量输出模板输出4-20mA DC信号到调节阀的执行机构。
本文主要讨论S7-300/400 PLC编程中模拟量的量程转换。
S7-200smart-PLC模拟量输入模块使用说明

S7-200smart-PLC模拟量输入模块使用说明1. 简介S7-200smart-PLC模拟量输入模块是一种数字信号转模拟信号的设备,可将其它设备发出的模拟量信号转化为PLC可读取的数字信号。
本模块广泛应用于工业生产中,可用于温度、压力、风速等物理量的检测和控制。
2. 特点S7-200smart-PLC模拟量输入模块具有如下特点:•通道数可选:根据需求,可选择4通道、6通道或8通道。
•精度高:采用16位高精度AD转换器。
•抗干扰能力强:采用隔离式设计,具有较强的抗干扰能力。
•通信速度快:通信速率可达1.5Mbps。
3. 硬件连接3.1 电源连接将模块的电源正、负极连通24V直流电源即可。
3.2 信号输入连接将模块的信号输入连接上相应的传感器即可。
其中,八个通道的引脚分别为:•CH1: 1号、2号•CH2: 3号、4号•CH3: 5号、6号•CH4: 7号、8号•CH5: 9号、10号•CH6: 11号、12号•CH7: 13号、14号•CH8: 15号、16号需要注意的是,不同的传感器信号输入时,需要匹配相应的信号输入范围。
如果输入的传感器信号超过所选通道的电压/电流量程,则不会被正确读取。
3.3 PLC连接将模块与PLC进行连接即可。
口与PLC相连的方式包含以下两种:•自带插头与PLC主机开关相连•模块采用梳式插头,与插座相连4. 编程配置在编程之前,需要在Step 7 micro/WIN中进行模块参数的配置。
步骤如下:1.打开微型PLC编程软件Step 7 micro/WIN,选择S7-200smart PLC 模板项目文件。
2.连接PLC和计算机,将PLC与计算机相连。
3.点击。
PLC对模拟量信号是如何转换的?

PLC对模拟量信号是如何转换的?模拟量信号是自动化过程控制系统中最基本的过程信号(压力、温度、流量等)输入形式。
系统中的过程信号通过变送器,将这些检测信号转换为统一的电压、电流信号,并将这些信号实时的传送至控制器(PLC)。
PLC通过计算转换,将这些模拟量信号转换为内部的数值信号。
从而实现系统的监控及控制。
从现场的物理信号到PLC内部处理的数值信号,有以下几个步骤:从以上PLC模拟量的信号输入流程可以看到,在自动化过程控制系统中,模拟量信号的输入是非常复杂的。
但是,在现目前的工业现场,对模拟量信号的处理已基本都采用电流信号方式进行传输,相比于电压信号方式,电流信号抗干扰能力更强,传输距离更远,信号稳定。
这里就PLC对模拟量信号的转换过程进行一个简单的分解介绍。
01PLC对模拟量信号的转换西门子S7-200SMART PLC模拟量模块对模拟量信号的转换范围台达DVP系列模拟量模块对模拟量信号的转换范围从以上可以看到:1、模拟量信号接入PLC后,PLC将模拟量信号转换为了整型数据,不是浮点数(如西门子-27,648 到 27,648);2、不同品牌的PLC对模拟量转换范围是有差异的(如西门子-27,648 到 27,648;台达-32,384 到 32,384);3、PLC同一个模块对不同类型的模拟量信号的转换范围是一致的(如西门子对±10 V、±5 V、±2.5 V 或 0 到 20mA的模拟量信号的转换范围均为-27,648 到 27,648);故从以上几点我们可以知道,接入PLC的模拟量信号还需要进行再转换处理,才可以得到与实际物理量相匹配的数据;在进行数据转换处理的时候,还应该与使用的PLC模块的处理数据范围相对应。
02PLC数据转换处理过程1、模拟量信号与PLC转换数据之间的转换从以上内容知道,从PLC直接读取到的模拟量信号为整型数据,整型数据无法直观的反馈出实际的物理量大小,故为了能够直观的反馈出现场的过程信号情况,还应该将这些整型数据转换为反馈直观真实的浮点数信号。
STEP7(TIAPortal)...

STEP7(TIAPortal)...STEP 7 (TIA Portal) 中使用 S7-1200/1500 控制器,怎样将整型转化为实数或将实数转化为整型用于模拟量输入和输出?新手必读: 新手必读!文献涉及产品可以使用SCALE_ X “缩放” 和NORM_X “标准化”来转化模拟量值。
这些功能块位于 STEP 7 (TIA Portal)“指令”任务卡中,“基本指令”下的“转换操作”中。
功能与参数的详细说明参考STEP 7 在线帮助。
若要取得某个功能块的在线帮助,需选中该块 ( 如 SCALE_X ) 然后按下“F1” 键。
STEP7(TIA Portal)的用户程序中提供了模拟值转换的指令。
说明:可以使用SCALE_ X “缩放” 和NORM_X “标准化”来转化模拟量值。
这些功能块位于STEP 7 (TIA Portal)“指令”任务卡中,“基本指令”下的“转换操作”中。
功能与参数的详细说明参考 STEP 7 在线帮助。
若要取得某个功能块的在线帮助,需选中该块 ( 如 SCALE_X ) 然后按下“F1” 键。
下面的例子中假设测量范围是单极性的。
整数值介于 0 到 27648 之间。
下面的值是由转换(例如,通过电流测量转换为温度)所产生的:整形值 (模拟值) 0 6912 13824 20736 27648测量值 (在 0-20mA 范围) 0.0 5.0 10.0 15.0 20.0测量值 (在 4-20mA 范围) 4.0 8.0 12.0 16.0 20.0 物理值20° C 52.5° C 85° C 117.5° C 150° C例子1 - 模拟值转换为物理值(模拟量输入,以转换温度为例)上限最大 27648 和下限最小 0 转换后对应最大150° C 和最小20° C 。
由于输入值是整数数据类型,输出值被转换为实数数据类型,功能块NORM_X 可将整数转化为实数。
在STEP7中使用标定值:FC105的模拟量处理使用说明

BIPOLAR:假定输入整型值介于 –27648与27648之间,因此K1 = –27648.0,K2 = +27648.0
UNIPOLAR:假定输入整型值介于0和27648之间,因此K1 = 0.0,K2 = +27648.0
如果输入整型值大于K2,输出(OUT)将钳位于HI_LIM,并返回一个错误。如果输入整型值小于K1, 输出将钳位于LO_LIM,并返回一个错误。
通过设置LO_LIM > HI_LIM可获得反向标定。使用反向转换时,输出值将随输入值的增加而减小。
FC105参数
参数 EN
说明 输入
ENO
输出
IN
输入
HI_LIM
数值转换:FC105
描述
SCALE功能接受一个整型值(IN),并将其转换为以工程单位表示的介于下限和上限(LO_LIM和HI_LIM) 之间的实型值。将结果写入OUT。SCALE功能使用以下等式:
OUT = [ ((FLOAT (IN) – K1)/(K2–K1)) (HI_LIM–LO_LIM)] + LO_LIM
输入
LO_LIM 输入
BIPOLAR 输入
OUT
输出
RET_VAL 输出
数据类型 BOOL BOOL INT REAL REAL BOOL
REAL WORD
存储区
描述
I、Q、M、D、L 使能输入端,信号状态为1 时激活该功能。
I、Q、M、D、L 如果该功能的执行无错误, 该使能输出端信号状态为1。
I、Q、M、D、L、P欲、转换为以工程单位表示的
常数
实型值的输入值。
西门子S7-300PLC模拟量转换为不同位数的数字后,为什么都是0276

西门子S7-300PLC模拟量转换为不同位数的数字后,为什么都是0~276
日本的PLC将12位模拟量输入模块转换后的数(0~4095)去掉尾数后为0~4000,对应于模块的模拟量的量程(例如0~10V)。
美国的PLC (例如S7-200和GE的PLC)将4000左移3位,12位模拟量输入模块转换后的数为0~32000,接近16位正数的最大值32767。
西门子S7-300PLC模拟量输入模块一般采用积分转化法,转换后的二进制数的位数可以设置为9~16位(与模块的型号和组态有关),如果小于16 位(包括符号位),则转换值被自动左移,使其最高位(符号位)在16位字的最高位,左移后未使用的低位则填入0。
设转换的精度为12位加符号位,左移3位后低3位为0,相当于实际的值被乘以8。
这种处理方法使转换后的数值与模拟量的关系与组态的A/D转换的位数无关,便于对转换值的后续计算和处理,例如PID控制功能块FB 41需要将来自模拟量输入模块的整数转换为0~%的浮点数。
下表给出了模拟量输入模块的转换值与以百分数表示的模拟量之间的对应关系,其中最重要的关系是双极性模拟量量程的上、下限(100%和−100%)分别对应于模拟值27648和−27648。
单极性模拟量量程的上、下限(100%和0%)分别对应于模拟值27648和0。
有人可能要问,为什么是27648呢?我认为可能是制定规则的人担心实际的模拟量输入可能会超过选择的量程,因此在量程的上、下限(-100%~100%)之外设置了%的裕量。
为什么是27648而不是别的数呢?因为27648的十六进制数6C00H是个较特殊的数。
不能认为模块的分辨率为1/27648,分辨率还是取决于模块设置的实际精度(转换后的位数)。
西门子S7-300PLC模拟量编程

西门子S7-300PLC模拟量编程西门子S7-300PLC模拟量方面的实例,包含了以下几个方面的要点:1、对变送器进行取值,并进行控制2、对模数功能块FC105 进行调用3、对AI 模块进行设置4、对AI 量程块进行选择这个实例,调试的是一个流量调节回路中,流量变送器输出2-2-MA DC信号到SM331 模拟输入模块,模块将该信号转换成浮点数,然后在程序中调用FC105将该值转换成工程量,我们就可以监视实际工程中的流量值了。
模拟量AI 采用SM311 模块是8x12Bit(8 通道12 位)对应货号是6ES7 331-7KF02-OABO,在模数转化上利用传感器或变送器的,电压或电流取出的值,到AI 模块上进行转换,然后把值传给西门子的CPU 进行处理,从而检测控制传感器的值,如图:模拟量输入模块模拟量输入用于连接电压和电流传感器、热电耦、电阻和热电阻,用来实现PLC 与模拟量过程信号的连接。
模拟量输入模块将从过程发送来的模拟信号转换成供PLC 内部处理用的数字信号。
本次工程用的是SM311 输入模块如下图所示。
该模块具有如下特点:分辨率为9 到15 位+符号位(用于不同的转换时间),可设置不同的测量范围。
通过量程模块可以机械调整电流/电压的基本测量范围。
用STEP 7硬件组态工具可进行微调。
模块把诊断和超限中断发送到可编程控制器的CPU 中。
模块向CPU 发送详细的诊断信息。
模拟量输入模块的接线方式两线制电流和四线制电流都只有两根信号线,它们之间的主要区别在于:两线制电流的两根信号线既要给传感器或者变送器供电,又要提供电流信号;而四线制电流的两根信号线只提供电流信号。
因此,通常提供两线制电流信号的传感器或者变送器是无源的;而提供四线制电流信号的传感器或者变送器是有源的。
因此,当PLC 的模板输入通道设定为连接四线制传感器时,PLC 只从模板通道的端子上采集模拟信号,如图2-3,而当PLC 的模板输入通道设定为连接二线制传感器时,如图2-2,PLC 的模拟输入模板的通道上还要向外输出一个直流24V的电源,以驱动两线制传感器工作。
模拟量滤波程序说明(STEP7)

在很多时候,用户需要对模拟量或多个数值进行极值处理,即去除最大、最小值操作。
对于这种处理,STEP7中没有集成的函数以供使用,下面的程序实现了此功能。
程序调用:假设需要处理的浮点数被存储在自DB207.DBD0开始的,720个字节的区域内,共180个浮点数,则调用函数格式如下:CALL FC 207Location :=P#DB207.DBX 0.0 DWORD 180Max_Value :=MD20 //最大值Max_Position :=MW24 //最大值位置Min_Value :=MD30 //最小值Min_Position :=MW34 //最小值位置Sum_Value_Nfiltered :=MD40 //滤波前所有数据和Sum_Value_Filtered :=MD44 //滤波后所有数据和Average_Nfiltered :=MD50 //滤波前平均值Average_Filtered :=MD54 //滤波后平均值Status :=MW60 //程序执行状态注意:由于例子程序中的DB207定义范围上限为DBD716,所以例子程序可以处理最多(716+4)/4=180个浮点数。
如果用户需要更多的数据,可以人为更改DB207 定义范围,以及输入参数中P#DB207.DBX 0.0 DWORD 180 红色部分。
例如仅需要处理20个浮点数:则不需要修改DB207 定义,仅将输入参数Location的实参改为P#DB207.DBX 0.0 DWORD 20即可。
但是,如果数据过多,用户更改的范围太大,有可能导致程序执行时间超过CPU的最大允许扫描时间,导致CPU停机!FC207参数:软件要求:STEP7 V5.4其它要求:在项目中增加OB121并下载到 CPU中。
STEP7模拟量转换

Group Topic1Scaling Analog ValuesOverviewAnalog Inputs and Outputs in an S7 PLC are represented in the PLC as a 16-bit integer. Over the nominal span of the analog input or output, the value of this integer will range between -27648 and +27648. However, it is easier to use the analog values if they are scaled to the same units and ranges as the process being controlled. This applications tip describes methods for scaling analog values to and from engineering units.Program DescriptionThe program for scaling analog values consists of 2 function (FC) blocks. These blocks are optimized for unipolar (0..27648) analog values, but will also work with bipolar analogs. Both blocks are shown in two different languages: LAD and STL.FC100 converts an integer in a nominal 0..27648 range to a floating point number in the specified engineering units.FC101 converts a floating point number in the specified engineering units to an integer in 0..27648 range.FC100 “Scale2Real” in LADFC101 “UnscaleReal” in STLScaling ExampleThe following gives an example of calling each of the scaling blocks from within your program. The main thing you need to remember is that MinEU is the engineering unit value corresponding to a reading of 0 V or mA, and that MaxEU is the engineering unit value corresponding to the nominal maximum reading of the analog point.General NotesThe SIMATIC S7-300/400 Application Tips are provided to give users of the S7-300 and S7-400 some indication as to how, from the view of programming technique, certain tasks can be solved with this controller. These instructions do not purport to cover all details or variations in equipment, nor do they provide for every possible contingency. Use of the S7-300/400 Application Tips is free.Siemens reserves the right to make changes in specifications shown herein or make improvements at any time without notice or obligation. It does not relieve the user of responsibility to use sound practices in application, installation, operation, and maintenance of the equipment purchased. Should a conflict arise between the general information contained in this publication, the contents of drawings or supplementary material, or both, the latter shall take precedence.Siemens is not liable, for whatever legal reason, for damages or personal injury resulting from the use of the application tips.All rights reserved. Any form of duplication or distribution, including excerpts, is only permitted with express authorization by SIEMENS.。
西门子STEP7常用功能块说明

西门子STEP7常用功能块说明西门子step7常用功能块说明【工控老鬼】(2021-10-2609:02:55)转载标签:plc培训plc实例感悟人生工控老鬼深圳plc培训分类:plc1.sfb0\相容iec61131-3的计数和计时功能块2.sfb41\用于pid控制41---连续42---离散43---用作将一个模拟量转变为与之对应的周期性控制器量脉冲信号,该脉冲的充电电流与模拟量的数值大小成正比.3.sfc0\用于读写plc中的系统时间4.sfc14\用于读写dp从站中的一致性数据如:读写用dp通讯的变频器中的控制字5.sfc20\块拷贝,块充填6.sfc46\sfc46并使plc步入stop状态,挺有价值的:可以当软件陷阱,或利用上位掌控plc停机7.sfc60\mpi的gd通讯8.iecfunctionblocksfc22\fc22---限幅输出fc25,fc27---3个数比大小9.pidcontrolblocksfb41/42/43同sfb41\fb58\用于温度控制pid10.ti-s7convertingblocksfc105\模拟量输入输出的比例和数据类型转换【工控旧鬼】(2021-10-2609:02:55)转载标签:plc培训plc实例感悟人生工控老鬼深圳plc培训分类:plc1.sfb0\相容iec61131-3的计数和计时功能块2.sfb41\用于pid控制41---连续42---离散43---用作将一个模拟量转变为与之对应的周期性控制器量脉冲信号,该脉冲的充电电流与模拟量的数值大小成正比.3.sfc0\用于读写plc中的系统时间4.sfc14\用于读写dp从站中的一致性数据如:读写用dp通讯的变频器中的控制字5.sfc20\块拷贝,块充填6.sfc46\sfc46并使plc步入stop状态,挺有价值的:可以当软件陷阱,或利用上位掌控plc停机7.sfc60\mpi的gd通讯8.iecfunctionblocksfc22\fc22---限幅输出fc25,fc27---3个数比大小9.pidcontrolblocksfb41/42/43同sfb41\fb58\用于温度控制pid10.ti-s7convertingblocksfc105\模拟量输入输出的比例和数据类型转换。
STEP7中批量把模拟量输入转换为浮点数

STEP7批量把模拟量输入转换为浮点数使用STEP7编程的工程师都知道,把模拟量输入转换为浮点数需要用FC105块。
FC105需要填写模拟量输入地址、高量程、低量程以及输出浮点数的地址等数据,如果项目只有几个模拟量输入,这样做没有问题,如果项目有几十个甚至超过100个模拟量输入,这样做就是非常痛苦的一件事。
本篇文章就可以解决大量模拟量输入的问题,这个方法在多个项目可以共享,每次项目只需要做小量修改,可以节约大量的时间,并且不容易出错,几乎无需调试。
本篇文章面向的是有初步STEP7编程基础的工程师,如果以前没有用过STEP7软件,可能看起来比较吃劲,下面详细讲解操作步骤,子程序会提供全部的源码,已经经过验证,复制过去就可以用,有兴趣的人也可以分析一下子程序。
操作步骤共有4个步骤:步骤1设定模拟量输入地址及要求,步骤2创建3个数据块;步骤3创建转换子程序,步骤4把子程序放在OB1中运行。
步骤1:在做项目时最好保证模拟量输入地址是连续,如果模拟量输入地址不连续,有两个方法解决,方法1,如果新设计的项目,最好修改硬件组态,使模拟量输入地址是连续的;方法2,如果项目不允许修改模拟量输入地址,可以多次调用子程序,有几个连续的地址就调用几次。
模拟量输入地址的起始与模拟量的数量在步骤4中使用。
步骤2:创建三个数据块DB3621、DB3622、DB3627(这3个数据块编号在具体的项目中可以修改),DB3621存放模拟量浮点数输出,这个数据块存放的数据就是转换完的模拟量数据,DB3622存放模拟量的高量程、DB3627存放模拟量的低量程,根据项目不同,数据块采用不同的数据块格式可以简化操作,以下介绍什么情况采用哪种数据块数据格式。
数据块数据格式1 ,这个数据格式采用数组结构,这种数据块创建与修改数据块大小十分容易,但是在STEP 7中不容易手动修改单个的值,这种格式适合存放模拟量浮点数输出,如果模拟量的低量程基本上全部是0,只有个别数据不为0,也用这个格式。
西门子STEP7的汇总贴——STEP7有哪些基本数据类型,如何使用?

西门子STEP7的汇总贴——STEP7有哪些基本数据类型,如何使用?STEP7有3种数据类型:1. 基本数据类型2. 由基本数据类型组合而成的复合数据类型;3. 用来传送FB块和FC块参数的参数数据类型本文首先介绍一下基本数据类型。
STEP7的基本数据类型总共有7种,分别为:位(bit)、字节(Byte)、字(Word)、双字(Double Word)、整型数(INT)、双整型数(DINT)以及实数(REAL)。
1. 位(bit)取值:1、0寻址方式:地址标识符+字节地址+位地址。
图1 基本数据类型:位(bit)2. 字节(Byte)8位二进制数组成一个字节。
其中,第0位为最低位(LSB),第7位为最高位(MSB)。
寻址方式:地址标识符+B+字节地址,其中,'B'即代表字节。
图2 基本数据类型:字节(Byte)3. 字(Word)相邻的两个字节组成一个字,16位。
字用来表示无符号数,范围:[0000,FFFF]16进制,或[0,65535]10进制寻址方式:地址标识符+W+首字节地址,其中,'W'代表字。
图3 基本数据类型:字(Word)4. 双字(Double Word)相邻的两个字组成一个双字,32位。
双字也用来表示无符号,范围:[00000000,FFFFFFFF]16进制寻址方式:地址标识符+D+首字节地址,其中,'D'代表双字。
图4 基本数据类型:双字(Double Word)5. 整型数(INT)整数是有符号数,占16位。
最高位为符号位,0:正数;1:负数。
取值范围为:[-32768,32767]。
6. 双整型数(DINT)双整数也是有符号数,占32位。
最高位为符号位,0:正数;1:负数。
取值范围为:[-2147483648,2147483647]。
7. 浮点数(REAL)标准的浮点数格式如图5所示,占32位。
最高位为符号位,0:正数;1:负数。
STEP7-功能块全中文说明书

parator== IN1等于IN2<> IN1不等于IN2> IN1大于IN2< IN1小于IN2>= IN1大于或等于IN2<= IN1小于或等于IN22.整数就是没有小数位都是零的数,即能被1整除的数(如-1,-2,0,1,……)CMP ?I(INT)整数比较CMP ?D (DINT)比较双精度整数CMP ?R (REAL)比较实数3.转换指令概述BCD_I BCD码转换为整数I_BCD 整型转换为BCD码BCD_DI BCD码转换为双精度整数I_DINT 整型转换为长整型DI_BCD 长整型转换为BCD码DI_REAL 长整型转换为浮点型4 计数器指令S_CUD 双向计数器S_CD 降值计数器S_CU 升值计数器---( SC ) 设置计数器线圈•---( CU ) 升值计数器线圈•---( CD ) 降值计数器线圈5.S_CUD 双向计数器`6. S_CU 升值计数器7. S_CD 降值计数器8. ---( SC ) 设置计数器值9. ---( CU ) 升值计数器线圈10. ---( CD ) 降值计数器线圈11. ---(OPN)打开数据块:DB或DI如果想将数据块中的数据读出(如DB和DI),需要通过(OPN)打开数据块后才可读出。
12. ---(JMP)--- 无条件跳转13. ---(JMPN) 若“否”则跳转14. LABEL标号【整型数学运算指令】整型数学运算指令概述说明使用整数运算,您可以对两个整数(16和32位)执行以下运算:•ADD_I 加整数•SUB_I 减整型•MUL_I 乘整型•DIV_I 除整型•ADD_DI 加双精度整数•SUB_DI 减长整型•MUL_DI 乘长整型•DIV_DI 除长整型•MOD_DI 返回分数长整型15. ADD_I 整数加16. SUB_I 整数减17. MUL_I 整数乘18. DIV_I 整数除19. MOD_DI 返回长整数余数20. 浮点运算指令概述IEEE32位浮点数属于REAL数据类型。
STEP7-功能块全中文说明

parator== IN1等于IN2<> IN1不等于IN2> IN1大于IN2< IN1小于IN2>= IN1大于或等于IN2<= IN1小于或等于IN22.整数就是没有小数位都是零的数,即能被1整除的数(如-1,-2,0,1,……)CMP ?I(INT)整数比较CMP ?D (DINT)比较双精度整数CMP ?R (REAL)比较实数3.转换指令概述BCD_I BCD码转换为整数I_BCD 整型转换为BCD码BCD_DI BCD码转换为双精度整数I_DINT 整型转换为长整型DI_BCD 长整型转换为BCD码DI_REAL 长整型转换为浮点型4 计数器指令S_CUD 双向计数器S_CD 降值计数器S_CU 升值计数器---( SC ) 设置计数器线圈•---( CU ) 升值计数器线圈•---( CD ) 降值计数器线圈5.S_CUD 双向计数器`6. S_CU 升值计数器7. S_CD 降值计数器8. ---( SC ) 设置计数器值9. ---( CU ) 升值计数器线圈10. ---( CD ) 降值计数器线圈11. ---(OPN)打开数据块:DB或DI如果想将数据块中的数据读出(如DB和DI),需要通过(OPN)打开数据块后才可读出。
12. ---(JMP)--- 无条件跳转13. ---(JMPN) 若“否”则跳转14. LABEL标号【整型数学运算指令】整型数学运算指令概述说明使用整数运算,您可以对两个整数(16和32位)执行以下运算:•ADD_I 加整数•SUB_I 减整型•MUL_I 乘整型•DIV_I 除整型•ADD_DI 加双精度整数•SUB_DI 减长整型•MUL_DI 乘长整型•DIV_DI 除长整型•MOD_DI 返回分数长整型15. ADD_I 整数加16. SUB_I 整数减17. MUL_I 整数乘18. DIV_I 整数除19. MOD_DI 返回长整数余数20. 浮点运算指令概述IEEE32位浮点数属于REAL数据类型。
西门子实数转整数_西门子PLC模拟量输入输出相关数据类型转换

西门⼦实数转整数_西门⼦PLC模拟量输⼊输出相关数据类型转换PLC模拟量输⼊输出都会涉及到数据类型的互转问题,然⽽西门⼦300系统对于数据格式有着明确的规定,⼀般的四则运算都是在同⼀数据类型下才能进⾏的,这也是⼀直以来困扰初学者的⼀个问题。
西门⼦300编程软件step7 和 博图都提供了相应的模拟量输⼊输出处理模块FC105,FC106。
但是好多场合下,要对数据进⾏线性转换或运算,靠这两个函数是远远不够的。
这时候就需要⽤户⾃⼰动⼿写⼀些数据转换的⼦程序。
所以知道西门⼦数据类型转换是很有必要的。
1.模拟量数据采集值(PIW INT) 转换为 物理量(浮点数real)西门⼦PLC通过采集通道采集到的值以整型(INT)型式保存在PIWx(PIW0)内,要换算为浮点型式的物理量需要经过以下两步。
第⼀步:把INT 转换为 DINT ,不⽤为为什么,就是精度精度精度。
第⼆部:把DINT 转换为REAL。
这两步都很简单,如图所⽰。
难点在于,把浮点数(REAL)转换为整形(INT),再通过PQW输出。
2.物理量(浮点数real) 转换为 模拟量数据输出值(PQW INT)西门⼦PLC以整型(INT)型式输出模拟量(PQW0),⼀般的物理量都是浮点数型式,要把物理量换算为模拟量输出,需要经过以下两步。
第⼀步:通过ROUND函数或TRUNC函数,把REAL数据转换为DI格式。
ROUND是实数转换双字整数指令,⼩数点后的第⼀位采取四舍五⼊。
TRUNC也是实数转换为双整数,但是去⼩数部分取整数。
第⼆部:把DINT 数据通过MOVE指令输送到VW区,再通过MOVE指令由PQW输出即可。
下篇内容打算讲⼀下 PLC编程中常遇到的 线性转换⼦程序的编写和传感器标定问题。
浮点数互换指令

浮点数互换指令一、什么是浮点数互换?大家好,今天来聊聊浮点数互换这个话题。
其实啊,说起来浮点数互换这个事情并不复杂,就像咱们平时交换衣服、交换位置那样,浮点数也能在内存中做个“走位”,换个地方。
你可能会问,浮点数是什么?简单来说,浮点数就是带有小数的数字,比如3.14、0.001、999.99等等。
就像你去超市买东西时,结账的时候那一分钱也不能少,但有时小数也让人头疼,特别是在编程中,这种“精确到小数点后几位”的数字需要小心对待。
浮点数互换,顾名思义,就是让两个浮点数的位置互换一下,怎么做呢?我们来看下,方法其实很简单。
二、1.交换浮点数的方法说到浮点数互换,大家一定会想到能不能用临时变量。
对!完全可以!你可以直接创建一个临时变量,把一个浮点数的值暂时存储在里面,然后再把另一个浮点数的值放到第一个浮点数的位置,最后再把临时变量中的值赋回去。
这种方法我们可以称之为“临时存储法”,最直接、最可靠。
2.还有其他办法吗?当然有!要是你喜欢稍微有点“创意”,可以尝试利用加法和减法来交换两个浮点数的位置。
说白了,就是通过两个数相加后,再相减的方式,把它们的值互换。
比如说,假设有两个浮点数a和b,你可以先把a加到b上,得到一个新的数,然后把新的数减去b,就能得到a的值,再减去a就能得到b的值。
这个方法呢,其实挺聪明的,但要注意的就是,浮点数的精度问题,这样做可能会有微小的误差,特别是在精度要求高的场合。
3.更有创意的办法呢?如果你想再炫一点,来点儿酷炫的,也可以试试乘法和除法交换法。
这种方法可以用乘除法来完成,原理和加减法差不多。
首先把a和b相乘,得到一个新的数,然后再除以a和除以b,就能达到交换的目的。
听起来是不是很高端?不过这种方法也有个坑,就是会碰到除数为零的情况,特别是当a或者b值为零时,程序就会崩溃。
所以,使用时要格外小心。
三、浮点数互换的意义浮点数互换不仅仅是一个编程技巧,更是大家在做复杂计算时,提升效率的一种方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STEP7批量把模拟量输入转换为浮点数
使用STEP7编程的工程师都知道,把模拟量输入转换为浮点数需要用FC105块。
FC105需要填写模拟量输入地址、高量程、低量程以及输出浮点数的地址等数据,如果项目只有几个模拟量输入,这样做没有问题,如果项目有几十个甚至超过100个模拟量输入,这样做就是非常痛苦的一件事。
本篇文章就可以解决大量模拟量输入的问题,这个方法在多个项目可以共享,每次项目只需要做小量修改,可以节约大量的时间,并且不容易出错,几乎无需调试。
本篇文章面向的是有初步STEP7编程基础的工程师,如果以前没有用过STEP7软件,可能看起来比较吃劲,下面详细讲解操作步骤,子程序会提供全部的源码,已经经过验证,复制过去就可以用,有兴趣的人也可以分析一下子程序。
操作步骤共有4个步骤:步骤1设定模拟量输入地址及要求,步骤2创建3个数据块;步骤3创建转换子程序,步骤4把子程序放在OB1中运行。
步骤1:在做项目时最好保证模拟量输入地址是连续,如果模拟量输入地址不连续,有两个方法解决,方法1,如果新设计的项目,最好修改硬件组态,使模拟量输入地址是连续的;方法2,如果项目不允许修改模拟量输入地址,可以多次调用子程序,有几个连续的地址就调用几次。
模拟量输入地址的起始与模拟量的数量在步骤4中使用。
步骤2:创建三个数据块DB3621、DB3622、DB3627(这3个数
据块编号在具体的项目中可以修改),DB3621存放模拟量浮点数输出,这个数据块存放的数据就是转换完的模拟量数据,DB3622存放模拟量的高量程、DB3627存放模拟量的低量程,根据项目不同,数据块采用不同的数据块格式可以简化操作,以下介绍什么情况采用哪种数据块数据格式。
数据块数据格式1 ,这个数据格式采用数组结构,这种数据块创建与修改数据块大小十分容易,但是在STEP 7中不容易手动修改单个的值,这种格式适合存放模拟量浮点数输出,如果模拟量的低量程基本上全部是0,只有个别数据不为0,也用这个格式。
如果模拟量的高量程不需要在STEP7设置与修改,而是全部在WINCC中设置,那么模拟量的高量程的数据块也可以采用这种数据结构。
数据块数据格式2,这个数据格式是最常见格式,每条数据需要单独添加,它的优点,每数据内容直观、易修改,可以看到每条数据的注释。
数据修改可以在数据块内进行,建立这种数据块,不推荐用手工添加,最好用EXEC表格导入, EXEC表格导入方法有相关的文档介绍。
创建数据块数据格式1方法:
①新建一个数据块,修改数据块名称及编号
②打开数据块,如下图,在第2行的名称栏输入SPAN(也可以是别的名字,但不能出现非法字符与汉字),在类型栏输入ARRAY[0..100],100是指数据个数,如果需要转换的模拟量为150个,则把100改为150即可。
如果是建立低量程数据块,零点全部是0,
则在第2行的初始值栏输入0.0,如果第2行的初始值栏不确定也可以不填(例如DB3621模拟量浮点数输出数据块就不需要填写初始值),注释栏也可以不填,在第3行的类型列输入REAL,最后,点一下菜单中的保存,一个数据块创建完成。
创建数据块数据格式2方法:
①新建一个数据块,修改数据块名称及编号
②打开数据块,如下图,
按下图添加数据,一般来说,名称栏填位号(不能有中文),类型栏填REAL,初始值栏填需要输入量程值或者零点值,注释栏可以不填,建议填一些说明,可以方便后期维护与修改,这一栏可以用汉字说明。
一般来说,使用这个数据块,推荐采用EXEC导入,XEC表格导入方法有相关的文档介绍。
数据编辑完成后,点一下菜单中的保存,一个数据块创建完成。
用以上是方法创建3个数据块:DB3621、DB3622、DB3627。
步骤三:创建转换子程序
①创建一个程序,不需要带背景的数据块的,修改程序块名称及编号,例如FC3622
②打开程序块FC3622,编辑接口,接口按下图添加与修改:只有修改两个标签:IN与TEMP,分别是下面的两个图,OUT与IN_OUT不需要修改。
③在网络1粘贴以下内容,保存
L 0
T #num
//////////////////////////////////////////////////// L #DB_ADD
ITD
L L#8
*D
T LD 44
////////////////////////////////////////////
P6: NOP 0
//////////////////////////////////////////////////// L #SPAN_DB
T LW 40
OPN DB [LW 40]
L #num
L 32
*I
ITD
L LD 44
+D
T #add
L DBD [#add]
T #HI_LIM
////////////////
L #ZERO_DB
T LW 40
OPN DB [LW 40]
L DBD [#add]
T #LI_LIM
////////////////
L #num
L 16
*I
T LW 60
L #PIW
L 8
*I
L LW 60
+I
ITD
T #add_1
L PIW [#add_1]
T #SCALE_IN
///////////////////
CALL "SCALE"
IN :=#SCALE_IN
HI_LIM :=#HI_LIM
LO_LIM :=#LI_LIM
BIPOLAR:=FALSE
RET_VAL:=#RE_VAL
OUT :=#SCALE_OUT
L #AI_OUT_DB
T LW 40
OPN DB [LW 40]
L #SCALE_OUT
T DBD [#add]
////////////////////////////////////////////////////
L 1
L #num
+I
T #num
L #NU
<I
JC P6
L #num
步骤4,在OB1中调用FC3622 如下图:
PIW是模拟量输入模块输入起始地址,就是步骤1中提到的地址,NU是需要转换数据条数(模拟量输入的个数)
SPAN_DB是模拟量的高量程数据块编号,在步骤2创建DB3622
ZERO_DB是模拟量的低量程数据块编号,在步骤2创建的DB3627 AI_OUT_DB模拟量浮点数存放的数据块编号,在步骤2创建的DB3621 DB_ADD数据块内数据的起始地址(高量程等第一个数据地址)如果模拟量输入地址不连续,可以多次调用这个子程序,第2次调用时,复制上面的程序网络,只要修改PIW、NU、DB_ADD这3个参数即可。
最后,程序下载,需要重新下载OB1,还需下载新创建的FC3622与数据块DB3621,DB3622,DB3627;全部程序下载完成后,可以打开DB3621,看看转换后的数据是是否在实时更新。
最后一个小建议,做这个项目时最好编制如下的EXEC表,方便在WINCC中建立变量。