西门子s7-200SMART怎么用SET_RTC设置时钟

西门子s7-200SMART怎么用SET_RTC设置时钟,第1张

如何使用有2种方法: 1、通过程序里的指令 *** 作,read_RTC、set_RTC等,你可以在s7-200编程手册里查询下具体使用方法。 2、菜单 *** 作设置修改,连接PLC后可以看见里面具体的 *** 作项,很简单的。

1 例如当时间达到09年6月3日20点31分20秒的时候,CPU转到停止,前提是CPU有硬件时钟,并且正确设置了时间。

LD SM0.5

EU

TODR VB0 //读取时间

LDB>= VB0, 16#09//读取的时间是BCD码,这样用省去格式转换

AB>= VB1, 16#06

AB>= VB2, 16#03

AB>= VB3, 16#20

AB>= VB4, 16#31

AB>= VB5, 16#20

STOP

2 如果定时开启关闭外部设备,那PLC可以轻松完成。

例如每天早上6点到晚上8点开机

LD SM0.5

EU

TODR VB0

LDB>= VB3, 16#06

AB= Q0.0

3 PLC运行一段时间停止

LD SM0.4

EU

INCD MD0 //每分钟累加一次,

LDD= MD0, 4320 //3天后CPU停止,4320=3天*24小时*60分钟

STOP //在系统块里将MD0设置为断电保持,那么计时不受停电影响,停电自动保存计时时间。

关键是如何读系统时钟:

S7-200的硬件实时时钟可以提供年、月、时、分、秒的日期/时间数据。

CPU221、CPU222没有内置的实时时钟,需要外插“时钟/电池卡”才能获得此功能。CPU224、CPU226和CPU226 XM都有内置的实时时钟。

为了提高运算效率,应当避免每个程序周期都读取实时时钟。实际上可读取的最小时间单位是1秒,可每秒读取一次(使用SM0.5上升沿触发读取指令)。

使用程序读取的实时时钟数据为BCD格式,可在状态图中使用十六进制格式查看。

CPU靠内置超级电容(+外插电池卡)在失去供电后为实时时钟提供电源缓冲;缓冲电源放电完毕后,再次上电后时钟将停止在缺省值,并不开始走动。

要设置日期、时间值,使之开始走动,可以:

用编程软件(Micro/WIN)的菜单命令PLC >Time of Day Clock...,通过与CPU的在线连接设置,完成后时钟开始走动

编用户程序使用Set_RTC(设置时钟)指令设置

Micro/WIN可以通过任何编程连接实现实时时钟的设置。

使用 S7-200 的 READ_RTC(读取实时时钟)和 SET_RTC(设置实时时钟)指令时, 读取和设置的数据格式都是 BCD 码的。如果觉得不便计算、处理,可使用 Clock Integer 指令库。

void RCC_Configuration(void)

{

ErrorStatus HSEStartUpStatus

//使能外部晶振

RCC_HSEConfig(RCC_HSE_ON)

//等待外部晶振稳定

HSEStartUpStatus = RCC_WaitForHSEStartUp()

//如果外部晶振启动成功,则进行下一步 *** 作

if(HSEStartUpStatus==SUCCESS)

{

//开启FLASH预取指功能

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable)

//FLASH时序控制

//推荐值:SYSCLK = 0~24MHz Latency=0

//SYSCLK = 24~48MHz Latency=1

//SYSCLK = 48~72MHz Latency=2

FLASH_SetLatency(FLASH_Latency_2)

//设置HCLK(AHB时钟)=SYSCLK

RCC_HCLKConfig(RCC_SYSCLK_Div1)

//PCLK2(APB2) = HCLK

RCC_PCLK2Config(RCC_HCLK_Div1)

//PCLK1(APB1) = HCLK/2

RCC_PCLK1Config(RCC_HCLK_Div2)

//PLL设置 SYSCLK/1 * 9 = 8*1*9 = 72MHz

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9)

//启动PLL

RCC_PLLCmd(ENABLE)

//等待PLL稳定

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

//系统时钟SYSCLK来自PLL输出

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK)

//切换时钟后等待系统时钟稳定

while(RCC_GetSYSCLKSource()!=0x08)

{

}

}

else

{

/* If HSE fails to start-up, the application will have wrong clock configuration.

User can add here some code to deal with this error */

/* Go to infinite loop */

while (1)

{

}

}

//下面是给各模块开启时钟

//启动GPIO

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC |

RCC_APB2Periph_GPIOD,

ENABLE)

//启动AFIO

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE)

}

void RTC_Configuration(void)

{

//启用PWR和BKP的时钟(from APB1)

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE)

//后备域解锁

PWR_BackupAccessCmd(ENABLE)

//备份寄存器模块复位

BKP_DeInit()

//外部32.768K

RCC_LSEConfig(RCC_LSE_ON)

//等待稳定

while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET)

//RTC时钟源配置成LSE(外部32.768K)

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE)

//RTC开启

RCC_RTCCLKCmd(ENABLE)

//开启后需要等待APB1时钟与RTC时钟同步,才能读写寄存器

RTC_WaitForSynchro()

//读写寄存器前,要确定上一个 *** 作已经结束

RTC_WaitForLastTask()

//设置RTC分频器,使RTC时钟为1Hz

//RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)

RTC_SetPrescaler(32763)

//加快一点,设置为32767一天慢20秒 设置为32764一天慢1秒

//等待寄存器写入完成

RTC_WaitForLastTask()

//使能秒中断

RTC_ITConfig(RTC_IT_SEC,ENABLE)

//等待写入完成

RTC_WaitForLastTask()

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12053029.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存