[关闭]
@cyysu 2018-04-21T05:23:32.000000Z 字数 1370 阅读 977

Native模式创建一个功能/功能块

  • 时间:2018年4月21日09:40:13
  • 作者:Kali
  • 邮箱:cyysu.github.io@gmail.com/2869905223@qq.com/微信lwyx1413
  • 版本:6.0
  • 描述:Native模式创建一个功能/功能块

ECLR+Multiprog开发


创建步骤

继续在我们第一次创建的工程里面添加一个Native代码,如下

  1. // Native模式添加一个功能
  2. [FUNCTION("INT")]
  3. [Native]
  4. public class myAddNative
  5. {
  6. public static System.Int16 __Process(
  7. [VAR_INPUT("INT")] System.Int16 IN_1,
  8. [VAR_INPUT("INT")] System.Int16 IN_2)
  9. {
  10. return 0xa5;
  11. }
  12. }

工程设置里面添加下面脚本

  1. echo #### execute the native library builder
  2. copy "$(SolutionDir)\lib\mscorlib.dll" "$(TargetDir)"
  3. echo #generate .cpp cli.cpp and .h
  4. "$(SolutionDir)\tools\LibBuilder" "$(TargetDir)\$(TargetFileName)"
  5. echo copy and rename .cpp
  6. copy "$(TargetDir)\$(TargetName)-template.cpp" "$(TargetDir)\$(TargetName).cpp" /Y
  7. echo copy and rename .h
  8. copy "$(TargetDir)\$(TargetName)-template.h" "$(TargetDir)\$(TargetName).h" /Y

编译输出的结果如下

生成目录中的文件

现在我们用我们第一次创建的Multiprog工程,添加这个功能

编译可以正常编译过去,但是下装的时候出现了这个问题,表示eCLR下面并没有我们这个库,也就是我们的库还没有在eCLR中进行注册,同时这个实验也表明了在Native模式下代码实现的部分是要和eCLR绑定在一起的。

下面我们开始在eCLR中实现这一部分代码,由于测评文件是从网上下载的,与目前安装的版本不一致,需要安装SP1补丁,下载参考如下文章
https://blog.csdn.net/yasi_xi/article/details/41514521
下载下来的文件如下:

安装完成之后的版本变成如下就正确了。

然后清理项目,重新编译生成,生成的信息如下:

下面将C#生成的接口文件拷贝到我们的eCLR中,如下

实现的步骤如下:1.添加头文件 2.增加注册函数

添加C++逻辑代码

运行情况如下

那么怎么证明这个确实是调用的我们写的C++的代码呢?下面我们来调试一下eCLR就可以发现了。这里需要注意的是要将Multiprog中的调试开关关掉,否则会读取不到PLC

到此我们的Native模式创建功能这一部分就完事了。

结束语

以上内容有笔者自己编写,也有摘自互联网。摘自互联网部分笔者都会仔细阅读,确保符合笔者当时测试情况进行编写,当然在学习的过程中不可避免的有理解不到位的地方,还请读友批评指正。

打赏

                    支付宝                                                         微信

微信与支付宝支付

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注