step7编程时整数INT、时间S5Time及Time之间的相互转换 Word 文档

合集下载

西门子STEP7编程软件如何显示和设置时间与日期

西门子STEP7编程软件如何显示和设置时间与日期

西门子STEP7编程软件如何显示和设置时间与日期显示和设置时间与日期按如下开展操作:打开项目,选择一个S7/M7程序,或使用菜单命令plc > 显示可访问节点,打开"可访问节点"窗口,然后选择一个节点("MPI=...")。

选择菜单命令PLC > 诊断/设置> 设置日期与时间。

只有在项目窗口(在线视图)中选择了一个S7/M7程序,或在"可访问节点"窗口中选择了一个节点("MPI=...")时,才能选择该菜单命令。

在所显示的对话框中,可读取选中模块的当前时间与日期。

如有必要,可以在"日期"和"时间"域中输入新数值,或可使用默认选项来接收编程设备/PC上的时间和日期,如UTC。

具有时区设置和夏令/冬令时的CPU时钟在固件版本V3起的S7-400 CPU上,除时间和日期外,还可以执行或评估以下设置:夏令/冬令时显示时区的偏移量因数显示时区系统工作采用全局的、连续的和没有中断的TOD,即模块时间。

本地自动化系统允许计算当地时间,它与模块时间不同,并且可以被用户程序使用。

当地时间不直接输入,而是使用模块时间加/减与模块时间的时间差来计算。

夏令/冬令时当设置TOD和日期时,也可以设置夏令或标准时。

例如,通过用户程序从夏令时切换到标准时时,只需考虑相对于模块时间的时间差。

可以用从Internet上获取的块来实现此切换。

读取和调节TOD和TOD状态夏令/冬令时标识符和相对于模块时间的时间差包括在日时间(TOD)状态中。

有以下选项可用于读取或调节TOD及其状态:使用STEP 7 (在线)通过菜单命令PLC > 诊断/设置> 调节TOD(读取和调节)通过"模块信息"对话框,"时间系统"选项卡(只读)在用户程序中SFC 100 "SET_CLKS" (读取和调节)SFC 51 "RDSYSST",具有SZL 132,索引8 (只读)诊断缓冲区、消息和OB起始信息中的时间戳采用模块时间生成时间戳TOD中断当标准时切换为夏令时的时候,如果由于"时间跳转"导致没有触发TOD中断,则调用OB 80。

STEP7中的基本数据类型-重要

STEP7中的基本数据类型-重要

STEP7中的基本数据类型⑴位(BOOL )位数据的数据类型为BOOL (布尔)型,在软件编程中BOOL变量的值1和0常用英语词TURE (真)和FALSE (假)来表示,对应二进制数中的“ 1和“0,常用于开关量的逻辑运算,存储空间为1位。

⑵字节(BYTE)字节数据长度为8位,数据格式为B#16#,B代表BYTE,表示数据长度为一个字节(8位),# 16#表示十六进制,取值范围为B#16#0〜B#16#FF。

⑶字(WORD )字数据长度为16位,这种数据可采用4种方法进行描述。

二进制:二进制的格式为 2 #,如2 # 101,取值范围为2# 0〜2# 1111_1111_1111_1111, 书写时每4位可用下划线隔开,也可直接表示为2# 111111111111十六进制:十六进制的格式为W # 16#, W代表WORD,表示数据长度为16位,#16#表示十六进制,数据取值范围为W # 16# 0〜W # 16 # FFFF。

BCD码:BCD码的格式为C#,取值范围为C# 0〜C# 999。

BCD码是用4位二进制表示1位十进制数,4位二进制中的0000〜1001组合分别表示十进制中的0〜9, 4位二进制中的1010〜1111组合放弃不用。

BCD码的最高4位用来表示符号,十六位BCD码的取值范围为—999〜+999。

在STEP7的数据格式中,BCD码的取值只取正值,与最高4位的符号无关。

无符号十进制数:无符号十进制数的格式为 B #( X, X),取值范围为B #( 0, 0)〜B #( 255, 255),无符号十进制数是用十进制的0〜255对应二进制数中的0000_0000〜1111_1111 ( 8位),16位二进制数就需要两个0〜255的数来表示,例如:B# (12, 254)= 2# 0000_1100_1111_1110_12 ― 254上面4种数据都是描述一个长度位16位的二进制数,无论你使用哪种方式都可以。

西门子PLC STEP7编程S5T格式输入设置

西门子PLC STEP7编程S5T格式输入设置
T MW 6
AN OV
SAVE
CLR
A BR
)
JNB _001
L MW 6
L W#16#2000
NOP 0
LC T 2
T MW 10
NOP 0
一,调用FC40,因是MS,还要在S7里*1000转换为S。二,发个可转换为LAD的给你,W#16#2000为1S,3000为10S,即在WCC里输入1时,S7的时间为10S。用DB看着办。
A(
A(
L 1
ITB
OW
T MW 8
SET
SAVE
CLR
_001: A BR
)
L MP 0
一般情况下,wincc只负责时间的设定,而执行应由plc来完成,所以你可以看看step7的帮助文件就可以知道s5t#10m的二进制表示形式,所以你既可以在wincc里直接把设定的时间转换成step7的格式,也可以在plc中完成这项工作
我的项目中也有一个向PLC传递实际值的问题,我是在wincc中编写了一个将wicc设置的时间转化为PLC所需要的S5Timel类型的时间值的转换函数。比如wincc中设置10分钟,在plc中如果用word类型表示就是w#16#2600,该值在PLC被自动转换为s5T#10m.如果是20分钟,则对应的word类型的实际值则为w#16#3120.因此,转换函数就是将wincc的实际时间值转换为用word类型的时间值即可。每次在winc中设置了实际的时间值后,通过该转换函数,即可自动将实际的时间值传递到plc所需要的时间类型值
另外,如果直接用输入时间来控制,可以建立DB块,在里面建立三个量1、S1上位机输入时间(DINT型)(分钟)2、S2上位机输入时间中间状态(DINT型)(毫秒)。3S3、传到下位机时间块中的值(S5TIME型)。 建立完这三个量后,首先从上位机给定一个DINT值,给到S1,然后将S1做毫秒转化到S2里面,这一步是因为定义S3为TIME型它是以毫秒来作为单位的,最后用MOVE将S2的值给到S3里面,这样S3作为时间型数据结构的变量就可以直接给时间块来用。这样的做法适于大数据量,比如你有很都时间要设置,这样比较清晰。

整数INT_时间S5Time及Time相互转换

整数INT_时间S5Time及Time相互转换

整数INT_时间S5Time及Time相互转换的困惑作为热线工程师,每天面临客户大量的各种技术问题,从产品功能、组态设置、参数含义、编程细节到故障诊断,林林总总。

不过,总有一些共性的问题,常常在热线中出现。

下面就是一个出镜频率很高的例子。

客户1:“西门子热线工程师,你好,我用第三方组态软件(如Intouch、iFix、组态王等),想在画面上设置定时器T的时间,以便人工及时修改。

但组态软件中没有S5Time数据类型,怎么办?”客户2:“我想在PLC程序中,用整数INT给定时器T的预设时间赋值,怎么做?”客户3:“我用的第三方组态软件(如Intouch、iFix、组态王等),想在画面上设置PID积分时间,但FB41的积分时间TI是Time类型,组态软件中没有Time类型,怎么办?”客户4:“在PLC程序中,数据类型S5Time如何转换到整数INT类型?”以上四个客户,遇到的问题实质上是一样的,就是整数INT、时间S5Time及Time之间的相互转换。

如何转换,首先要弄清整数INT、时间S5Time及Time的数据结构。

整数INT是16位的数据:时间S5Time是16位数据,BCD码格式:时间Time是32位数据,类似于双整数DINT:由此可见,三者之间的转换即是整数INT、双整数DINT及BCD码之间的转换。

可以根据数据结构特点,自己编程实现相互转换,这样比较复杂。

利用库函数FC33/FC40是最简单方便的。

方法如下:1. 整数INT到时间S5Time的转换方法:INT -> I_DI指令 -> DINT -> MOVE指令 -> Time -> 库函数FC40 -> S5Time。

2. 整数INT到时间Time的转换方法:INT -> I_DI指令 -> DINT -> MOVE指令 -> Time。

如图示:3. 时间S5Time到整数INT的转换方法:S5Time -> 库函数FC33 -> Time -> MOVE指令 -> DINT -> 取其高字部分,用MOVE指令-> INT。

s7数字转时间指令

s7数字转时间指令

s7数字转时间指令S7数字转时间指令S7数字转时间指令是指西门子S7系列可编程逻辑控制器(PLC)中的一种特殊指令,用于将数字值转换为对应的时间值。

通过该指令,可以方便地对时间进行计算和操作,实现精确的时间控制。

一、S7数字转时间指令的基本语法和参数解释1. 语法:TON(TimerName, IN, PT)TimerName:定时器名称,用于标识不同的定时器IN:输入的时间值,可以是一个字或双字类型的变量PT:预设时间,用于设置定时器的时间上限2. 参数解释:定时器名称:用于标识不同的定时器,可以自定义,命名规则要符合PLC的命名规范输入的时间值:可以是一个字或双字类型的变量,表示从外部输入的时间值,单位可以是毫秒、秒、分钟等预设时间:用于设置定时器的时间上限,单位与输入的时间值一致二、S7数字转时间指令的使用示例例如,我们需要一个定时器,当输入的时间值达到预设时间时,输出一个开关信号。

以下是一个示例程序:```VARInputTime: INT; // 输入的时间值PresetTime: INT; // 预设时间Timer1: TON; // 定时器1Output: BOOL; // 输出信号END_VAR// 设置输入的时间值和预设时间InputTime := 5000; // 5000毫秒PresetTime := 10000; // 10000毫秒// 调用S7数字转时间指令TON(Timer1, InputTime, PresetTime);// 检测定时器的状态IF Timer1.Q THENOutput := TRUE; // 输出开关信号ELSEOutput := FALSE;END_IF```在上述示例中,我们首先定义了输入的时间值和预设时间的变量,以及一个定时器和一个输出信号的变量。

然后,我们将输入的时间值和预设时间赋值给对应的变量。

接下来,我们调用了S7数字转时间指令,将定时器和输入的时间值、预设时间作为参数传入。

step7编程时整数INT、时间S5Time及Time之间的相互转换Word文档

step7编程时整数INT、时间S5Time及Time之间的相互转换Word文档

:数INT_时间S5Time及Time相互转换
就是整数INT、时间S5Time及Time之间的相互转换。

如何转换,首先要弄清整数INT、时间S5Time及Time的数据结构。

整数INT是16位的数据:
时间S5Time是16位数据,BCD码格式:
时间Time是32位数据,类似于双整数DINT:
由此可见,三者之间的转换即是整数INT、双整数DINT及BCD码之间的转换。

可以根据数据结构特点,自己编程实现相互转换,这样比较复杂。

利用库函数FC33/FC40是最简单方便的。

方法如下:
1. 整数INT到时间S5Time的转换方法:
INT -> I_DI指令 -> DINT -> MOVE指令 -> Time -> 库函数FC40 -> S5Time。

2. 整数INT到时间Time的转换方法:INT -> I_DI指令 -> DINT -> MOVE指令 -> Time。

如图示:
3. 时间S5Time到整数INT的转换方法:
S5Time -> 库函数FC33 -> Time -> MOVE指令 -> DINT -> 取其高字部分,用MOVE指令 -> INT。

注意数据类型。

西门子触摸屏上设置可更改的S5TIME数据方法

西门子触摸屏上设置可更改的S5TIME数据方法

西门子触摸屏上设置可更改的S5TIME数据
方法
在一些项目中,我们会用到一些计时,比如你想要让一个风机连续运行一段时间,而这个时间是可以让你在触摸屏上自己设置的,这时候我们就需要在触摸屏上做出这个功能了。

首先我们要了解下西门子s7-300plc中关于时间设置的一些规章方法,首先我们先要了解s7中数据类型S5TIME的格式
如上图所示,我们可以看到时间基准有4个时基
时基的二进制码
10 ms 00
100 ms 01
1s 10
10s 11
最大的时间设置值是9990秒,了解这些后,我们就要去详细的设置一个值了,我们现在触摸屏程序中新建一个变量
是word类型的,然后在程序中对这个变量编程,
上图程序段12是将这个变量乘6,这个是由于我想将这个设置值的单位作为分钟而做的,下面我们主要来看程序段13,首先将MW602的word类型的值转化为BCD码类型,由于S5TIME数据类型如下图
所示
然后通过与操作,将数据有效位保证在S5TIME数据需要的位上
最终通过OW的或指令,确定当前S5TIME数据的时基,我用了10s 的时基,大家也可以设置别的时基,这样我们就设置完成了,在触摸屏上输入的值就可以直接转换为你想要的S5TIME数据的值了。

西门子PLCSTEP7编程S5T格式输入设置

西门子PLCSTEP7编程S5T格式输入设置

西门子PLCSTEP7编程S5T格式输入设置污水处理项目中,在Wincc6.0中我要进行时间值的设定,以改变反冲洗的时间。

请问各位武林高手,比如我想设时间为10分钟如何做?S5T#10M。

方法一般有两种,一种是做一个以1分钟为单位的计时器,当计数达到上位机设定值时停止工作,另一种是直接用时间来做,无论哪一种方法都可以实现,问题是怎样实现通过wincc设置数据,这是一个数据结构的问题,无论是计数器还是时间,在step7运行实质是16进制的数,可以用mw来作,上位机将一个数据送到某个MW即可,此MW直接给时间或者计数块复值就可以了不过这个值是毫秒级的,你如果上位机输入分钟的话,要在下位作相应的运算后,给其付值。

另外,如果直接用输入时间来控制,可以建立DB块,在里面建立三个量1、S1上位机输入时间(DINT型)(分钟)2、S2上位机输入时间中间状态(DINT型)(毫秒)。

3S3、传到下位机时间块中的值(S5TIME型)。

建立完这三个量后,首先从上位机给定一个DINT值,给到S1,然后将S1做毫秒转化到S2里面,这一步是因为定义S3为TIME 型它是以毫秒来作为单位的,最后用MOVE将S2的值给到S3里面,这样S3作为时间型数据结构的变量就可以直接给时间块来用。

这样的做法适于大数据量,比如你有很都时间要设置,这样比较清晰。

一般情况下,wincc只负责时间的设定,而执行应由plc来完成,所以你可以看看step7的帮助文件就可以知道s5t#10m的二进制表示形式,所以你既可以在wincc里直接把设定的时间转换成step7的格式,也可以在plc中完成这项工作我的项目中也有一个向PLC传递实际值的问题,我是在wincc中编写了一个将wicc设置的时间转化为PLC所需要的S5Timel类型的时间值的转换函数。

比如wincc中设置10分钟,在plc中如果用word 类型表示就是w#16#2600,该值在PLC被自动转换为s5T#10m.如果是20分钟,则对应的word类型的实际值则为w#16#3120.因此,转换函数就是将wincc的实际时间值转换为用word类型的时间值即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

:数INT_时间S5Time及Time相互转换
就是整数INT、时间S5Time及Time之间的相互转换。

如何转换,首先要弄清整数INT、时间S5Time及Time的数据结构。

整数INT是16位的数据:
时间S5Time是16位数据,BCD码格式:
时间Time是32位数据,类似于双整数DINT:
由此可见,三者之间的转换即是整数INT、双整数DINT及BCD码之间的转换。

可以根据数据结构特点,自己编程实现相互转换,这样比较复杂。

利用库函数FC33/FC40是最简单方便的。

方法如下:
1. 整数INT到时间S5Time的转换方法:
INT -> I_DI指令 -> DINT -> MOVE指令 -> Time -> 库函数FC40 -> S5Time。

2. 整数INT到时间Time的转换方法:INT -> I_DI指令 -> DINT -> MOVE指令 -> Time。

如图示:
3. 时间S5Time到整数INT的转换方法:
S5Time -> 库函数FC33 -> Time -> MOVE指令 -> DINT -> 取其高字部分,用MOVE指令 -> INT。

注意数据类型。

相关文档
最新文档