前两天一直在搞open62541,因为milo库的server sdk没有办法根据xml生成结点文件,于是准备用open62541来搭建服务器,milo结合Spring Boot来构件客户端。
网络上大多是建立一个open62541.h的头文件,还有就是open62541.c的执行文件,但是新版好像并不是这样的。
然后很多教程都是讲的linux,但是初学者用linux的还是比较少,所我写了这一篇帮助大家配置。
但是open62541的构件相当的麻烦,我试了一下午都没搞明白,今天上午算是终于有点懂了。接下来,我一步一步来讲。
为什么用open62541?
和商业库一样,可以根据uamodeler生成的xml文件直接生成相应的代码,步骤简单。 有完备的tutorial,适合新手,一步一步上手。了解了理由,我们就需要来实操,首先是最难的一步,也就是安装
1.首先是下载
我们进入open62541的github官网open62541,选择release版本。
这里我用的是win64的版本。
下好解压完成后得到如下文件,这个myserver.c是一会儿要建立的文件
在VS2019中新建一个C++的 空工程。
打开工程,并打开工程所在的文件夹 E:\Code_Library\TeachingOPC\TeachingOPC,注意是sln里面的那个文件夹。复制我们下载的release文件夹中的这几个文件到工程文件夹中。
位置如下
一个是open62541的x64库文件,一个是open62541的头文件
在VS中打开工程,然后对所有文件选择 包括在项目中
这是包括完后
然后最玄学的地方来了,我到现在还是没搞明白为什么的东西。这个时候我们需要VS2015,对又要打开2015
然后在附加包含目录里面加上这一句,$(ProjectDir),然后就可以了。
关于这点我也有疑问,这个操作我再VS2019上做就不行,然后在2015上做就可以,我猜测可能是因为原来的文件是用的2015编译的,但是这样操作后2019上面也可以使用,就很奇怪。
接下来我们新建一个c或者cpp文件,输入以下代码,这个是源码:
#include
#include
#include
#include
#include
static volatile UA_Boolean running = true;
static void stopHandler(int sig) {
UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "received ctrl-c");
running = false;
}
int main(void) {
signal(SIGINT, stopHandler);
signal(SIGTERM, stopHandler);
UA_Server *server = UA_Server_new();
UA_ServerConfig_setDefault(UA_Server_getConfig(server));
UA_StatusCode retval = UA_Server_run(server, &running);
UA_Server_delete(server);
return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
}
运行成功
PS:
如果Console里面出现异常报错的话,可能是端口被占用了,参见解决端口占用 如果提示少了个dll文件的话,去网上搜这个文件,有教程怎么下,具体什么名字我忘了,很好解决的问题这个就是windows端,建立opc server的方法