回复:求助大家帮我看看这个C脚本程序

Joyxu

  • 帖子

    6
  • 精华

    0
  • 被关注

    0

论坛等级:新手

注册时间:2017-10-28

普通 普通 如何晋级?

发布于 2017-12-01 11:33:32

4楼

#include "apdefap.h"


int gscAction( void )

{


#pragma option(mbcs)//设置WINCC的C脚本编译器支持多字节字符集

#pragma code ("kernel32.dll")

VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);//获取当地的当前系统日期和时间

SYSTEMTIME sysTime;//系统时间

#pragma code ()



static int i = 1;//行数,i只定义等于1一次,i留存在程序中(赋值语句i=1)

int oneTime = 100;// 一次写入50行

int end;


char Name[100] = " ";//年月日时分秒长度  []数组

char  DATEC[100] = " ";//日期长度

double tag[50];  //略

char tagName[18];//变量名的长度  数据变量名长度

int ii;//与列相关的中间变量  

int totalTag = 200;//一个周期的行数


int val;//每行变量的名称比如 SJ_001  数据变量名

int totalRow = 999999;//写入行的总数

int colCount = 9;//列数

double value;//采集变量 值  数据变量数值(mm)

int flag = 0;//写入控制

char backup[100];//备份文件位置(路径\名称)

FILE *fpUser;//文件指针用户

FILE *fpBackup;//文件指针备份


int start = 301;//首次从此写数据

int xiaoshi;//小时变量

int fen;//分变量

int miao;//秒变量

int mills;//毫秒变量


char name[50];//用户文件位置(路径\名称)


int brk = 0;

int b;//重启变量

char head[] = "年月日,时分秒,毫秒,速度1,位置1,入口压力,出口压力,参考牵引力,比例阀信号,蓄能压力,速度2,位置2";

int round = 0;

label://goto至此位置

i = 1;//行数重启置i=1从PLC数据行数重写)

GetLocalTime(&sysTime);//取系统时间


sprintf(DATEC,"%4d%02d%02d%02d%02d%02d",sysTime.wYear,sysTime.wMonth,sysTime.wDay, sysTime.wHour,sysTime.wMinute, sysTime.wSecond);//赋值

;

sprintf(name, "d:\\USER\\%4d%02d%02d%02d%02d%02d.csv",sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour,sysTime.wMinute, sysTime.wSecond);

sprintf(backup, "d:\\SYS_SJ\\%4d%02d%02d%02d%02d%02d.csv",sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour,sysTime.wMinute, sysTime.wSecond);

mills = 0;//0ms开始

miao = sysTime.wSecond;//s取出

fen = sysTime.wMinute;//m取出

xiaoshi = sysTime.wHour;//小时取出


mills= rand() % 999;//ms/999余数


printf("begin");


while(1)

{              

if(i >= totalRow) break;

                               while(flag == 0){flag = GetTagBit("flag" );}//写入控制点

brk = GetTagBit("break" );

if(brk == 1) break;


fpUser = fopen(name, "a+");//直接追加写入,没有这个文件就创建(a.csv)用户

fpBackup = fopen(backup, "a+");//直接追加写入,没有这个文件就创建(a.csv)备份


                               flag = 0;//c控制变量置零

                                 SetTagBit("flag", 0);//将外部控制写入变量置零

b = GetTagBit("b");//取b值

if(b == 1) {

b = 0;

SetTagBit("b", 0);//把b置为0

goto label;//跳出循环至label

}



end = i + oneTime;//下一个DB块首行数

++round;

if(i == start) {

// fprintf(fpTmp, "\n");

fprintf(fpUser, head);//往文件里写表头项目名称用户

fprintf(fpBackup, head);//往文件里写表头项目名称备份 

fprintf(fpUser, "\n");//回车一行 用户

fprintf(fpBackup, "\n");//回车一行 备份

SetTagChar("user1", name);//打开表格路径字符串变量

// start = 1;//第一次200行以后,下一次从头写

}




while(i < end && i < totalRow) {//小于每行100与小于90000同时满足

if(i == start) {

GetLocalTime(&sysTime);

mills = 0;//0ms开始

miao = sysTime.wSecond;//s取出

fen = sysTime.wMinute;//m取出

xiaoshi = sysTime.wHour;//小时取出

printf("\n%02:%02d:%02d\n", xiaoshi, fen, miao);

}

if(i >= start)//首次大于200 后大于1

 {


fprintf(fpUser, "%4d-%02d-%02d,%02d:%02d:%02d,%3d,",sysTime.wYear,sysTime.wMonth,sysTime.wDay,xiaoshi, fen, miao, mills);//往用户表写时间

fprintf(fpBackup, "%4d-%02d-%02d,%02d:%02d:%02d,%3d,",sysTime.wYear,sysTime.wMonth,sysTime.wDay,xiaoshi, fen, miao, mills);//往备分表写时间

}


for(ii = 0; ii < colCount; ++ii) {//循环写入一行每个列

val = ii * totalTag + (i - 1)% totalTag + 1;//SJ_00x数据名称的位置关系

sprintf(tagName, "SJ_%04d", val);//拼字符串

value = GetTagDouble(tagName);//取写入的数据

if(i >= start)//首次大于200 后大于1 

{


fprintf(fpUser, "%f,", value);//往用户表写入所取数据

fprintf(fpBackup, "%f,", value);//往备份表写入所取数据

}

}

if(i >= start) //首次大于200 后大于1

{


fprintf(fpUser, "\n");//每行后回车

fprintf(fpBackup, "\n");//每行后回车

}

SetTagDouble("row", i);//往外导出行数

mills=mills +30;//ms递增30ms

if (mills>999)//ms 大于999

{

mills=mills-1000;//ms-1000

miao=miao+1;//s加1

}

if (miao>59)//s大于59

{

miao=miao-60;//s-60

fen=fen+1;//m加1

}

if (fen>59)//m大于59

{

fen=fen-60;//m-60

xiaoshi=xiaoshi+1;}//h加1

++i;//换行


}


fclose(fpUser);//把缓冲区数据写入文件里后关闭

fclose(fpBackup);//把缓冲区数据写入文件里后关闭


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32575条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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