本文目录一览:
15只瓶子,四只老鼠算法题分析
iOS开发_小迷糊 的文章《IOS 中级开发,鹅厂面试全记录》里面,看到有个很有意思的算法题
原题如下
有15个瓶子,其中最多有一瓶有毒,现在有四只老鼠,喝了有毒的水之后,第二天就会死。如何在第二天就可以判断出哪个瓶子有毒
思路如下:
15个瓶子--15个输入
4只老鼠--二进制最多16种输出
输入转成2进制按次序 喂给老鼠
再从死掉的输出结果 得出哪瓶
----------具体看下表
0 0 0 1
0 0 2 0
0 0 3 3
0 4 0 0
0 5 0 5
0 6 6 0
0 7 7 7
8 0 0 0
9 0 0 9
10 0 10 0
11 0 11 11
12 12 0 0
13 13 0 13
14 14 14 0
15 15 15 15
-------
1 2 3 4(老鼠编号)
第二天 老鼠死掉编号结果就是对应的有毒的瓶子号码
PL3366C-ASEMI电源管理IC能用在什么地方?
PL3366C是一款原边控制的恒流/恒压调节器,适用于反激式开关电源。高度集成了功率开关,实现精确的电流和电压调节,同时通过去除光耦和次级控制电路,简化充电器/适配器等传统恒流/恒压设计。
PL3366C参数描述:
型号:PL3366C
VDD电压(VDD):-0.3到VDDclamp V
CS输入(CS):-0.3到5V
FB输入(FB):-0.3到5V
最大工作结温(Tjmax):150℃
存储温度(Tsto):-55到150℃
焊接温度(Tlea):260℃
启动电流(Idd_st):5uA
静态电流(Idd_static):0.6mA
VDD退出欠压阈值(UVLO_OFF):15V
VDD进入欠压阈值(UVLO_ON):4.5V
VDD过压保护(VDD_OVP):27V
PL3366C复合模式的应用使芯片实现了低静态功耗、低音频噪声、高效率。当芯片满载时,芯片工作在PFM模式,随着负载的降低,芯片会逐渐进入绿色模式,提高整个系统的效率。
PL3366C还具有多重保护功能:逐周期峰值电流检测、VDD欠压/过压保护、输出过压保护、输出短路保护和过温保护等。
应用说明:
PL3366C为小功率充电器/适配器应用提供了非常有效的解决方案,其新颖的恒流/恒压控制使系统不需要二次反馈电路,并且可以实现高精度的恒流/恒压输出,从而满足更严格的能源损耗要求。
iec_timer数据类型怎么用博图打出来
用vhdl实现4位加减法计数器
博途IEC TIME数据类型_用最简单的讲解让你明白西门子博途编程基本指令集之计数器的使用...

S7-1200的计数器为IEC计数器,用户程序中可以使用的计数器数量仅受CPU的存储器容量限制。
这里所说的是软件计数器,最大计数速率受所在OB的执行速率限制。指令所在OB的执行频率必须足够高,以检测输入脉冲的所有变化,如果需要更快的计数操作,请参考高速计数器(HSC)。
注:S7-1200的IEC计数没有计数器号(即没有C0、C1这种带计数器号的计数器)。
S7-1200的计数器包含3种计数器,指令位置参见图1:
1.计数器(CTU)
2.减计数器(CTD)
3.加减计数器(CTUD)
图1 指令位置
对于每种计数器,计数值可以是任何整数数据类型,并且需要使用每种整数对应的数据类型的DB结构(见表1)或背景数据块来存储计数器数据。计数器引脚参考表2,计数器使用及时序图参考表3(本文均以INT计数器为例)。
表1 计数器类型及范围
表2 计数器引脚汇总
表3计数器使用及时序图
表3计数器使用及时序图
表3计数器使用及时序图
S7-1200 计数器创建
S7-1200计数器创建有以下几种方法:
1. 指令直接拖入块中,自动生成计数器的背景数据块,该块位于“系统块程序资源”中,参见图2。需要在指令中修改计数值类型。
图2 自动生成计数器的背景数据块
2. 指令直接拖入FB块中,生成多重背景,参见图3。多重背景的数据类型在TIA博途V14之前是IEC_COUNTER类型,从TIA博途V14开始是CTU_INT、CTD_INT、CTUD_INT等类型(取决于指令)。
图3 多重背景
3. 指令直接拖入FB、FC块中,生成参数实例,从TIA博途V14开始,参见图4。
图4 参数实例
4. 在DB块、FB的静态变量、FC和FB的INOUT变量中新建IEC_COUNTER、CTU_INT、CTD_INT、CTUD_INT类型变量,在程序中将计数器指令拖入块中时,在弹出的“调用选项”页面点击“取消”按钮,之后将该建好的变量填入指定位置。
(1) DB块中新建IEC_COUNTER等类型变量(LAD/FBD),如果是IEC_COUNTER等类型变量的数组,S7-1200从V2.0版本开始支持,参见图5、6。
图5 DB块中的定义
图6 计数器使用
(2) FB的静态变量中新建IEC_COUNTER等类型变量(LAD/FBD),如果是IEC_COUNTER等类型变量的数组,S7-1200从V2.0版本开始支持,参见图7。
图7 静态变量中定义
(3) FC和FB的INOUT变量中新建IEC_COUNTER等类型变量(LAD/FBD),如果是IEC_COUNTER等类型变量的数组,S7-1200从V2.0版本开始支持,从TIA博途V14开始支持IEC_COUNTER等类型变量的变长数组(ARRAY[#]),参见图8。
图8 INOUT中定义
4) 以上三种方法的SCL版本,参见图9
图9 SCL中使用
从以上四个示例可以看出,IEC_COUNTER、CTU_INT、CTD_INT、CTUD_INT四种数据类型没有本质的区别,可以互换使用,为使得程序明确,建议只使用计数器对应名字的数据类型。
5. 在插入DB时,选择IEC_COUNTER类型的数据块,将该数据块填在指令上方。此种方法生成的数据块等同于第一种的背景数据块,位于“系统块程序资源”中,从TIA博途V11开始,参见图10.
图10 新建IEC_COUNTER类型DB
S7-1200 计数器常见问题
1. 为什么计数器不计数?
答:可能原因如下:
(1)计数器的输入位(CU、CD)需要有电平信号的跳变,计数器才会计数。如果保持不变的信号作为输入位是不会开始计数的。
(2)计数器的背景数据块重复使用。
2. 如何编程自复位计数器并产生脉冲?
答:正确答案见图11,错误答案见图12、13。
图11 正确程序
图12 错误程序1
图13 错误程序2
正确原因:当计数值达到10,"DB77".Static_15(False)作为计数器R的输入,并没有复位,Q输出"DB77".Static_15为True,在下一周期时执行复位指令,使得计数值清零,之后Q输出"DB77".Static_15为False,实现自复位计数器并产生脉冲。
错误1原因:当计数值达到10,首先置位"数据块_2".QU,紧接着"数据块_2".QU作为计数器R的输入,使得计数值清零,同时复位"数据块_2".QU,在下一网络段"DB77".Static_15依然是False,无法实现脉冲。
错误2原因:当计数值达到10,"数据块_2".CV=10,紧接着"数据块_2".CV与"数据块_2".PV的比较结果(True)作为计数器R的输入,使得计数值清零,同时复位"数据块_2".QU,在下一网络段"DB77".Static_15依然是False,无法实现脉冲。
从例子可知,计数器的执行是先处理输入,再处理输出,在指令块执行过程中,内部变量(例如QU、CV)可能出现多次变化。
用法与我前面文章写道的定时器的用法基本一致,可以参照看看。S7-1200指令讲解之定时器指令S7-1200调用定时器和计数器指令时如何减少背景数据块的使用