step7编程时整数INT、时间S5Time及Time之间的相互转换 Word 文档
西门子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中的基本数据类型⑴位(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格式输入设置

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相互转换的困惑作为热线工程师,每天面临客户大量的各种技术问题,从产品功能、组态设置、参数含义、编程细节到故障诊断,林林总总。
不过,总有一些共性的问题,常常在热线中出现。
下面就是一个出镜频率很高的例子。
客户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系列可编程逻辑控制器(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文档

:数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数据
方法
在一些项目中,我们会用到一些计时,比如你想要让一个风机连续运行一段时间,而这个时间是可以让你在触摸屏上自己设置的,这时候我们就需要在触摸屏上做出这个功能了。
首先我们要了解下西门子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格式输入设置污水处理项目中,在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类型的时间值即可。
STEP7基本指令 - 西门子plc

STEP7基本指令 - 西门子plc1、位逻辑指令STEP 7位逻辑指令可以分为位逻辑运算指令、定时器指令、计数器指令、位测试指令。
(1)位逻辑运算指令位逻辑运算指令是对“0”和“1”的布尔操作数进行扫描,经过相应的位逻辑运算,将逻辑运算结果“0”和“1”送到状态字的RLO位,包括AND、OR、RS触发器等与S7-200基本类似。
(2)定时器指令定时器可以提供等待时间控制,还可产生一定宽度的脉冲,也可以测量时间。
它是一种由位和字组成的复合单元,定时器的触点由位表示,其定时时间值存储在字存储器中。
STEP 7定时器可分为以下5种,如表3-4所示。
S7定时器可以用以下任一格式预装入时间值:◆W#16#wxyz,其中w = 时间基准(即时间间隔或分辨率);此处xyz = 以二进制编码的十进制格式表示的时间值◆S5T#aH_bM_cS_dMS,其中H = 小时,M = 分钟,S = 秒,MS = 毫秒;a、b、c、d由用户定义。
如自动选择时间基准,其值舍入为具有该时间基准的下一个较小的数字。
S7定时器可以输入的最大时间值是9990s或2H_46M_30S,具体如: S5TIME#4S = 4秒 s5t#2h_15m = 2小时15分钟 S5T#1H_12M_18S =1小时12分钟18秒(3)计数器指令S7计数器用于对RLO正跳沿计数,计数器字中的0至11位包含二进制代码形式的计数值,当设置某个计数器时,计数值移至计数器字,计数值的范围为0至999,如图1所示。
图1 计数器的组成可使用三种计数器指令在此范围内改变计数值:S_CUD为双向计数器;S_CD为降值计数器;S_CU为升值计数器。
2、数据指令对于复杂的开关量控制,尤其是点数多、过程复杂的项目来说,还必须了解STEP 7数据指令。
STEP 7位数据指令可以分为装载与传送指令、比较指令、算术运算指令、数据逻辑运算指令、移位和循环移位指令、数据块指令。
西门子STEP7编程中sfb4的用法

西门子STEP7编程—IEC定时器的使用2010年03月03日星期三 08:59西门子STEP7提供了10种定时器指令,用户可以根据不同的情况,很方便的选择一种适合自己的要求。
可是STEP7的定时器的时间值用了一种西门子独有的S5TIME的数据类型来表示。
某些时候使得定时器用起来不那么顺手,例如,在上位机监控软件画面上显示计时器的当前值或者需要在运行时在监控画面上修改预设值。
对此STEP7提供了FC33(S5TI_TIM)和FC40(TIM_S5TI)来实现S5TIME数据类型与TIME数据类型之间的相互转换,但是换来换去的还是很麻烦。
笔者认为在这种情况下不如直接使用STEP7的IEC 定时器。
STEP7的IEC定时器是个什么东西呢?其实就是STEP7提供的一系列系统功能块,能实现定时器同样的功能,和STEP7定时器指令不同的是它们是符合IEC1131-3标准的定时器。
具体地说就是SFB3(TP)脉冲定时器、SFB4(TON)接通延迟定时器和SFB5(TOF)关闭延迟定时器。
功能块参数说明STEP7的TIME数据类型在上位机上读写就很方便了,根据它的定义,实际上它就是一个有符号双整数,每一步长表示为1毫秒。
定时器的类型就三种。
1、接通延时定时器TON 2、记忆接通延时定时器TONR 3、断开延时定时器 TOF计时器总共有256个,其中1ms定时器4个(T0,T32,T64,T96),其中10ms 定时器16个(T1~T4,T33~T36,T65~T68,T97~T100),其余的都是100ms定时器。
1ms定时器的刷新周期为1ms,与扫描周期和程序处理无关;10ms定时器在每个扫描周期开始时进行刷新;100ms定时器在定时器指令被执行时刷新。
如有侵权请联系告知删除,感谢你们的配合!。
西门子STEP7时间相关功能整理

西门子时间处理功能块笔记1.时间相关数据类型TIME:IEC timeS5TIME:SIMATIC timeDATE:IEC dateTIME_OF_DAY:timeDATE_AND_TIME:DT1.1.S5TIME的格式S5TIME是用BCD码保存的,在数据存储区占用两个连续的字节。
Bit13和Bit12为存储的时基。
,Bit11~Bit0每四位为一个时间数值得BCD码当使用S5TIME 时,定义数值的范围为0~999,而且要指明使用的时基。
时基指定了时间单位。
可以输入的最大值为9,990秒,或2H_46M_30S。
S5TIME时基及相应的时间范围如下:时基BCD码时间范围10ms0010ms-9s990ms100ms01100ms-1min39s990ms1s101s-16min39s10s1110s-2hr46min30s∙梯形图中定于格式为S5T#0H_00M_00S_000MSo H=小时单位,M=分钟单位,S=秒单位,MS=毫秒单位2.DATE_AND_TIME的格式以及相关处理功能块当使用数据类型DATE_AND_TIME(DT)时,将占用数据存储区的8个连续字节,以BCD 码格式保存。
该数据类型范围:DT#1990-1-1-0:0:0.0to DT#2089-12-31-23:59:59.999∙DATE_AND_TIME#2020-01-02-9:01:1.00∙DT#2020-01-02-9:01:1.002020年01月02日上午9点1分3秒50.23毫秒,在date and time的八个字节中分别存储的内容:字节内容例子允许的范围BCD码0年B#16#201990~19992000~208990h~99h 00h~89h1月B#16#011~1201h~12h2日B#16#021~311h~31h3时B#16#0900~2300h~23h4分B#16#0100~5900h~59h5秒B#16#0300~5900h~59h6毫秒的后二位B#16#230~999000h~999h7毫秒的高位B#16#507星期B#16#5Sunday-Saturday1h~7h3.STEP7相关功能块块位于Libraries\Standard Library\IEC Function Blocks路径下。
西门子PLC中整数转换S5TIME

整形转S5TIME格式S5TIME时间个与其他数据格式之间的转换,首先要清楚S5TIME数据结构(如下图):长度:S5TIME占有2个字节长度的存储空间(16位)。
最大值:S5T#2h46m20s最小值:S5T10MS13、14位为时间基数整数范围:10ms~9990000ms999S在存储器中格式如下图:999s-->999000ms->S5TIME核心步骤就是把999000ms按S5TIME规则放进存储器中首先看最终的效果1s-->S5T2s999s-->S5T16m39s9990s-->S5T2h46m30s步骤1:创建FB150 “I_S5T”步骤2:双击打开FC150定义输入输出接口步骤3:逻辑程序如下:源码导入1.创建名字为FC105源文件,复制下面的源码到FC105源文件中2.点击编译按钮就可以直接生成FC150,然后就可以在程序调用FC150FUNCTION "I_S5T" : S5TIMETITLE =AUTHOR : SnailFAMILY : 'Time'NAME : T_CONVVERSION : 0.1VAR_INPUTIn : INT ; //输入整型时间(单位:秒)END_VARVAR_TEMPT_base : INT ; //时间基数T_base_temp : DWORD ;Input_D : DINT ; //输入的整数时间中间变量Input_BCD : DWORD ; //输入的整数时间中间变量BCD码Input_S5T : DWORD ; //输入的整数时间S5TimeLT_0 : BOOL ;LT_1 : BOOL ;TEMP1 : BOOL ;END_VARBEGINNETWORKTITLE =时间基数T_Base初始化L L#0;T #T_base;NOP 0;NETWORKTITLE =A( ;L #In;T #Input_D;SET ;SAVE ;CLR ;A BR;) ;JNB _001;L #Input_D;L L#1000;*D ;T #Input_D;_001: NOP 0;NETWORKTITLE =判断输入的整数书时间是否在有效范围内A( ;L #Input_D;<D ;) ;= #LT_0;A #LT_0;JC CLRB;NETWORKTITLE =判断输入的整数书时间是否在有效范围内A( ;L #Input_D;L L#9990000;<=D ;) ;= #LT_1;A #LT_1;JC LOP1;NETWORKTITLE =S5_Time := 3.999L W#16#3999;T #Input_S5T;SET ;SAVE ;CLR ;A BR;JC CLRB;NETWORKTITLE =999s 999000ms /10ms 待转换的时间时间除以最小时间基数10msLOP1: L #Input_D;L L#10;/D ;T #Input_D;NOP 0;NETWORKTITLE =如果输入#Input_D的整数值小于等于999说明说明存储时间基数的二进制//如果输入#Input_D的整数值小于等于999说明说明存储时间基数的二进制位是00,所以直接//跳转执行程序标签为BCD1的程序段L #Input_D;L L#999;<=D ;JC BCD1;NETWORKTITLE =Input_D > 999 则T_basen + 1//如果输入#Input_D的整数值大于999说明说明存储时间基数的二进制位不是00,所以处理时//间基数的存储位L 1;+I ;T #T_base;AN OV;SAVE ;CLR ;A BR;= #TEMP1;NETWORKTITLE =跳转到LOP1//跳转到LOP1 判断Input_D /10是否大于等于999,如果为否,则继续执行之前的步骤O #TEMP1;ON #TEMP1;JC LOP1;NETWORKTITLE =BCD1: L #Input_D;DTB ;T #Input_BCD;NOP 0;NETWORKTITLE =时间基数之处理A( ;A( ;L #T_base;T #T_base_temp;SET ;SAVE ;CLR ;A BR;) ;JNB _002;L W#16#C;L #T_base_temp;SLD ;T #T_base_temp;SET ;SAVE ;CLR ;_002: A BR;) ;JNB _003;L #T_base_temp;L #Input_BCD;OD ;T #Input_S5T; _003: NOP 0; NETWORKTITLE =CLRB: AN #LT_0;SAVE ; NETWORKTITLE =L #Input_S5T;T #RET_VAL;NOP 0; NETWORKTITLE =END_FUNCTION。
时间类型转换

客户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是最简单方便的。
方法如下L# 是双整的意思:因为是双整数运算指令,常数必须是L#表示的双整数。
没看懂L#1000,为什么要乘?时基是ms吧。
所以ms转换为s因为time是毫秒级别的所以要乘,呵呵DINT -> MOVE指令-> Time -> 库函数FC40 -> S5Time。
-> MOVE指令-> Time。
如图示:3. 时间S5Time到整数INT的转换方法:S5Time -> 库函数FC33 -> Time -> MOVE指令-> DINT -> 取其高字部分,用MOVE指令-> INT。
Time -> MOVE指令-> DINT -INT -> 取其高字部分,用MOVE指令-> INT。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。
注意数据类型。