从32位到64位编程,我们能想到哪些变化

64位系统下的编程变化
本文探讨了在64位系统中编程所面临的变化,包括指针长度增加至8字节带来的更广阔寻址空间、虚拟内存扩大至4TB、分页内存池容量大幅提升、数据类型的变化以及对编译器的影响等。

 作为一个标准的程序员,我们可以设想一下在64位系统下,我们生活中将近二分之一的时间中会发现哪些变化。(当然不包括让玩游戏变得更加顺畅)

1 指针拥有8个字节,不再是那个和intl类型长短一样了。

它将带来的好处就是,系统具有更为广阔的寻址空间。寻址范围从4GB变成了4EB。

2虚拟内存不再是2GB(3GB),为什么不是4GB,因为另外的那2GB是内核用来做映射需要占用的。具体原因参看其他的文章。

那么虚拟内存到底编程多大了?4EB/2 2EB。实际不是这样的,它被限定为4TB不过这个大小已经可以让我们爽几年。

3分页变化

 可分页和不可分页内存池大小由470MB,256MB变为了128GB。暂时不会再出现分页不足的问题。

 每个页表从4k变为了8k。这点是需要小心的,每个页表的大小应该是没有变化。应该是由1024 x 4 bytes变为了1024x8bytes。

4变量大小

 在64位系统中long类型有可能不在委屈的使用4自己,而拥有了8字节。这里只能说是可能,因为根据编译器的不同具体的每种类型占多少空间还不能确定。

 在64位编译器中会出现4中不同的数据模型

Data modelshortintlonglong longpointers
LLP641632326464
LP641632646464
ILP641664646464
SILP646464646464

大部分的编译器将会使用LP64。而微软的编译器貌似会继续使用LLP64。也就是说从VC++系列一直代码将更加容易。

5CTime对象,这个对象在32位系统中不是让很非常满意,因为它使用long类型记录时间,导致时间范围只能是

0-4 2 9 4 9 6 7 2 9 5
1970年1月1日-2 0 3 7年

6内存对齐

Itanium架构的系统将把内存对齐的问题推给开发人员。开发人员的错误使用会使得性能变慢,乃至系统崩溃。

7性能提高

这个是显而易见的。到底会如何提高,以后会专题介绍。

8系统内核操作

可能现在的HOOK操作不能够在64位系统中正确的运行。

9汇编

这个变化可能是最大的,所有的偏移量计算可能都需要重新计算。

 

我暂时就想到这些变化,各位可以继续补充。

 

<think>好的,我现在需要回答用户关于西门子PLC编程实现闪烁的方法。首先,我得回忆一下自己学过的PLC知识,尤其是西门子的部分。用户可能希望了解不同的实现方式,所以我得尽量列举几种常见的方法,并解释清楚它们的原理和步骤。 首先想到的是定时器组合法,这是最基础的方法。用两个定时器互相触发,比如Timer1控制灯亮的时间,Timer1到时后启动Timer2控制灭的时间,然后Timer2再触发Timer1,循环下去。不过要注意定时器的类型,西门子有TON、TOF等,可能需要使用TON(通电延时)。可能需要举例说明,比如用T1和T2交替,Q点输出用T1的常开或者T2的常闭之类的组合。 接下来是时钟存储器的方法,西门子PLC有这个功能,可以设置特定的存储,比如M0.5是1Hz的闪烁信号。用户只需要在硬件配置里启用时钟存储器,然后分配地址,之后直接使用该即可。这种方法简单,但频率固定,可能不够灵活,如果需要不同的频率,可能需要多个存储器或者结合其他方法。 第三种方法可能用系统功能块,比如SFB或者FC,比如使用脉冲发生器或自带的系统块来生成脉冲。例如,在S7-1200或S7-1500中,可能有现成的指令块,如TON生成脉冲,或者使用CTU(计数器)结合定时器来产生不同的闪烁频率。另外,用户可能需要自己编写功能块来封装闪烁逻辑,方便重复使用。 还有一种方法可能涉及到使用计数器,比如设定一个定时器每次触发计数器加一,然后根据计数器的当前值来决定输出是否闪烁。比如,计数器偶数时亮,奇数时灭,或者类似的方法。不过这可能相对复杂,不如定时器组合直接。 另外,用户可能想知道结构化文本(SCL)的实现方法,比如用IF语句和定时器变量来实现。比如,用TON定时器,当时间到达时切换输出状态,并复定时器重新开始。这可能更灵活,适合复杂逻辑。 还要考虑不同系列的PLC,比如S7-300/400和S7-1200/1500之间的差异。例如,在TIA Portal中,时钟存储器的设置置可能不同,或者某些指令的使用方式有变化。需要指出这些可能需要注意的地方。 可能还需要提到一些实际应用中的注意事项,比如避免使用过多的定时器导致资源耗尽,或者闪烁频率的精度问题。例如,定时器的时间基准可能影响闪烁的实际频率,特别是在需要精确控制时,可能需要考虑扫描周期的影响。 然后,我需要组织这些方法,按常见程度或复杂度排序,先介绍简单的方法,如时钟存储器,然后定时器组合,再系统功能块和结构化文本。每个方法给出步骤和示例,比如梯形图的逻辑图,或者SCL代码片段。同时,比较各方法的优缺点,比如时钟存储器方便但固定频率,定时器组合灵活但需要更多资源。 还要检查是否有遗漏的方法,比如使用中断组织块(OB)来定时触发,但这种方法可能不太常见,或者资源消耗大,可能不适合一般的闪烁需求。或者使用PWM脉冲输出,不过这可能更多用于运动控制,而不是简单的指示灯闪烁。 总结下来,可能的方法有:定时器组合、时钟存储器、系统功能块/指令、结构化文本编程、计数器方法。需要确定哪些是用户最常用的,并详细说明。 最后,确保语言清晰,用中文口语化表达,避免专业术语过于晦涩,但也要准确。可能需要给出具体的例子,比如在梯形图中如何连接定时器,或者在硬件配置里如何设置时钟存储器。</think>在西门子PLC编程中,实现信号闪烁(如指示灯闪烁)的常见方法有以下几种,适用于不同场景和需求: --- ### **1. 定时器组合法(最基础)** - **原理**:通过两个定时器(如TON,即通电延时定时器)交替触发,形成周期性的开关信号。 - **实现步骤**: 1. **定时器T1**:设定“亮”的持续时间(如2秒)。 2. **定时器T2**:设定“灭”的持续时间(如1秒)。 3. **逻辑连接**: - T1的常开触点触发T2,T2的常闭触点复T1,形成循环。 - 输出信号(如Q0.0)= T1的常开触点。 - **梯形图示例**: ``` Network 1: T1(IN=NOT T2.Q, PT=2s) T2(IN=T1.Q, PT=1s) Q0.0 = T1.Q ``` - **优点**:灵活调整频率,逻辑直观。 - **缺点**:需占用两个定时器资源。 --- ### **2. 时钟存储器(Clock Memory)** - **原理**:直接使用PLC系统预定义的时钟脉冲(如1Hz、2Hz等),无需编程。 - **实现步骤**: 1. **硬件配置**:在PLC属性中启用“时钟存储器”功能(如设置MB0)。 2. **地址分配**:系统自动分配不同频率的(例如:M0.5为1Hz脉冲,M0.4为2Hz)。 3. **直接调用**:将输出(如Q0.0)与对应时钟绑定(`Q0.0 = M0.5`)。 - **优点**:简单快捷,节省程序资源。 - **缺点**:频率固定(常见为0.5Hz~10Hz),无法自定义。 --- ### **3. 系统功能块/指令(如S7-1200/1500的TP脉冲定时器)** - **原理**:利用现成指令(如`TP`脉冲发生器)生成固定时长的脉冲。 - **实现步骤**(以TIA Portal为例): 1. 调用`TP`指令,设置脉冲时间(如PT=1s)。 2. 触发`TP`的IN端(如常闭触点保持激活),输出Q与`TP`的Q端连接。 - **示例**: ``` TP(IN:=TRUE, PT:=1s, Q=>Q0.0, ET=>); ``` - **优点**:代码简洁,适合单次脉冲或周期性信号。 - **缺点**:需结合其他逻辑实现启停控制。 --- ### **4. 结构化文本(SCL)编程** - **原理**:通过代码控制输出状态切换,结合定时器实现精准控制。 - **示例代码**: ```scss IF NOT #Enable THEN #Output := FALSE; #Timer.RESET(); ELSE #Timer(IN := NOT #Timer.Q, PT := T#1S); #Output := #Timer.Q; END_IF; ``` - **优点**:灵活性高,适合复杂逻辑或自定义占空比。 - **缺点**:需要熟悉SCL语法。 --- ### **5. 计数器法(特殊场景)** - **原理**:利用计数器累加定时器脉冲,根据计数值切换输出状态。 - **示例**: - 定时器每1秒触发一次,计数器累加。 - 当计数器为偶数时输出ON,奇数时OFF。 - **适用场景**:需要非对称闪烁或复杂模式时。 --- ### **选择建议** - **简单需求**:优先使用**时钟存储器**(无需编程)。 - **自定义频率**:选择**定时器组合**或**TP指令**。 - **复杂逻辑**:使用**SCL编程**或功能块封装。 如有具体PLC型号(如S7-200/S7-1200),可进一步提供针对性代码示例!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值