回复:WINCC 用C脚本实现时间加法的编程

已锁定

chengzi666

  • 帖子

    44
  • 精华

    0
  • 被关注

    6

论坛等级:侠客

注册时间:2021-03-09

黄金 黄金 如何晋级?

发布于 2025-03-02 09:49:51

2楼

这个可以自己写函数处理时间字符串

我做个案例如下

第一步:定义变量


第二步:定义全局脚本

1、添加全局脚本IsLeapYear来判断闰年


2、添加全局脚本MinuteAdd来处理时间字符串里分钟的加减


第三步:测试结果

1、画面如下,按钮写测试脚本如下


2、测试时间加减



脚本代码

====================IsLeapYear===================

BOOL IsLeapYear(int year) {

    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

}


====================MinuteAdd===================

#include "apdefap.h"

void MinuteAdd(const char *timeInput, int add, char *timeOutput) {

int year, month, day, hour, minute, second, leap;

const int days_in_month[2][12] = {

{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},  // 平年

{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}   // 闰年

};

sscanf(timeInput, "%d/%d/%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second);

minute += add;

while (minute >= 60) {

minute -= 60;

hour++;

if (hour >= 24) {

hour = 0;

day++;

leap = IsLeapYear(year);

if (day > days_in_month[leap][month - 1]) {

day = 1;

month++;

if (month > 12) {

month = 1;

year++;

}

}

}

}

while (minute < 0) {

minute += 60;

hour--;

if (hour < 0) {

hour = 23;

day--;

if (day < 1) {

month--;

if (month < 1) {

month = 12;

year--;

}

leap = IsLeapYear(year);

day = days_in_month[leap][month - 1];

}

}

}

sprintf(timeOutput, "%d/%d/%d %d:%d:%d", year, month, day, hour, minute, second);

}


====================按钮===================

#include "apdefap.h"

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

char timeOutput[20];

MinuteAdd(GetTagChar("TimeString"), GetTagSWord("TimeAdd"), timeOutput);

SetTagChar("TimeResult", timeOutput);

}


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32566条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。