
上次写了篇关于博途序列化指令的文章,希望对大家理解此指令有些帮助。本篇文章来探讨下在WINCC中如何使用序列化来实现一些功能。如通过序列化来保存WINCC中数据。 1.找轮子 WINCC支持ANSI C和Vbscript脚本语言,上网搜了下,看是否有现成的API可供使用(正常思维首先想到的不会是“重造轮子”)。找到了一个叫tpl的开源项目(仓库链接:https://github.com/troydhanson/tpl),感觉知名度还不错。 2.tpl 网站只有源代码下载,两个源文件两个头文件,可以直接添加到自己项目中使用。 但在WINCC C脚本中使用需要生成dll(我用源代码生成了一个,需要的可在公众号(scadaclub)回复消息“tpldll”下载)。 数据写入文件: #include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){#pragma code("tpl.dll")#include "tpl.h"#pragma code()tpl_node *tn;int id=0;char *name, *names[] = { "joe", "bob", "cary" };tn = tpl_map("A(is)", &id, &name);for(name=names[0]; id < 3; name=names[++id]) { tpl_pack(tn,1); }tpl_dump(tn, TPL_FILE, "d:\\users.tpl");tpl_free(tn);} 从文件读取数据: #include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){#pragma code("tpl.dll")#include "tpl.h"#pragma code()tpl_node *tn;int id;char *name;tn = tpl_map("A(is)", &id, &name);tpl_load(tn, TPL_FILE, "d:\\users.tpl");while ( tpl_unpack(tn,1) > 0 ) { printf("id %d, user %s\n", id, name); free(name); }tpl_free(tn);} 若觉得文章对你有帮助,随手点在看、转发分享,也是支持和鼓励。 扫描下面二维码、关注后,在底部菜单中可查看更多内容! 长按识别图中二维码关注 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |