快捷搜索:  汽车  科技

上位机开发很简单(基于Windows的SOEM上位机编程步骤)

上位机开发很简单(基于Windows的SOEM上位机编程步骤)目标是在C 中生成动态链接库(.dll)后可以被C#调用。 1、创建C# winform工程,用于调用C 的dll如果不熟悉,建议看C 创建步骤,现在C 控制台上完成调试。simple_test.exe 运行测试文件make_test_win32_all.bat "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" x86 过程编译代码E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>make_test_win32_all.bat "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" x86 用于 x86 的 Microsoft (R) C/C 优化编译器 19

一、检测SOEM运行环境1、准备事项
  • 从 http://openethercatsociety.github.io/ 下载SOEM 1.3.1 源代码
  • 下载wincap https://www.winpcap.org/archive/4.1beta3-WinPcap.exe 并安装
  • VS2015(个人使用VS2015,其他类似)
2、编译SOEM库2.1 打开VS2015 x64 x86兼容工具命令提示符

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(1)

2.2 命令行转到SOEM-1.3.1目录下

cd E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(2)

2.3 编译生成lib库

make_libsoem_lib.bat "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" x86

其中“D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" 为VS目录

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(3)

上述指令生成lib文件

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(4)

过程指令如下:

E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>make_libsoem_lib.bat "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" x86 E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>REM @echo off E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>rem give path as arg E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>if "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" == "" goto exit_err_arg E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>if NOT EXIST "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" goto exit_err_arg E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>rem call cvarsall to load the env E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>call "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\vcvarsall.bat" x86 '"D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\vcvarsall.bat"' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>rem cd to folder containing .bat file E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>cd /d "make_libsoem_lib.bat\.." E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>rem compile and build library E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>if EXIST obj goto skip_obj E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>MKDIR obj E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>cl.exe @make\cl_libsoem.rsp /errorReport:prompt 用于 x86 的 Microsoft (R) C/C 优化编译器 19.00.24210 版 版权所有(C) Microsoft Corporation。保留所有权利。 cl /c /Zi /W3 /WX- /Od /Oy- /D "_CRT_SECURE_NO_WARNINGS" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Gm /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"obj\\" /Fd"obj\vc100.pdb" /Gd /TC /analyze- /Odi /I "oshw\win32\wpcap\include" /I "osal" /I "osal\win32" /I "oshw\win32" /I "soem" oshw\win32\nicdrv.c oshw\win32\oshw.c soem\ethercatbase.c soem\ethercatcoe.c soem\ethercatconfig.c soem\ethercatdc.c soem\ethercatfoe.c soem\ethercatmain.c soem\ethercatprint.c soem\ethercatsoe.c osal\win32\osal.c ...... nicdrv.c E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1\soem\ethercattype.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1\osal\win32\osal_defs.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的 字符。请将该文件保存为 Unicode 格式以防止数据丢失 e:\ethercat\上位机\soem-1.3.1\soem-1.3.1\oshw\win32\nicdrv.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1\osal\win32\osal_win32.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 正在生成代码... E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>if EXIST lib\win32 goto skip_lib E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>MKDIR lib\win32 E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>lib.exe @make\lib_libsoem.rsp /nologo /errorReport:prompt E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>echo make done make done E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>goto :eof E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1> 3、生成测试文件3.1 编译生成测试文件(非必须,但可用于测试)

部分测试文件无法在Windows下生成

make_test_win32_all.bat "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" x86

过程编译代码

E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>make_test_win32_all.bat "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" x86 用于 x86 的 Microsoft (R) C/C 优化编译器 19.00.24210 版 版权所有(C) Microsoft Corporation。保留所有权利。 cl /c /Zi /W3 /WX- /Od /Oy- /D "_CRT_SECURE_NO_WARNINGS" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Gm /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"obj\\" /Fd"obj\vc100.pdb" /Gd /TC /analyze- /Odi /I "oshw\win32\wpcap\include" /I "osal" /I "osal\win32" /I "oshw\win32" /I "soem" oshw\win32\nicdrv.c oshw\win32\oshw.c soem\ethercatbase.c soem\ethercatcoe.c soem\ethercatconfig.c soem\ethercatdc.c soem\ethercatfoe.c soem\ethercatmain.c soem\ethercatprint.c soem\ethercatsoe.c osal\win32\osal.c ...... eepromtool.c e:\ethercat\上位机\soem-1.3.1\soem-1.3.1\soem\ethercattype.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 e:\ethercat\上位机\soem-1.3.1\soem-1.3.1\osal\win32\osal_defs.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 e:\ethercat\上位机\soem-1.3.1\soem-1.3.1\oshw\win32\nicdrv.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 e:\ethercat\上位机\soem-1.3.1\soem-1.3.1\soem\ethercatbase.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 e:\ethercat\上位机\soem-1.3.1\soem-1.3.1\soem\ethercatmain.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 e:\ethercat\上位机\soem-1.3.1\soem-1.3.1\soem\ethercatcoe.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 make done E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1> 3.2 使用simple_test测试

转到simple_test目录下

cd E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1\test\win32\simple_test

获取设备驱动

simple_test.exe

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(5)

运行测试文件

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(6)

二、在Windows下创建上位机工程

目标是在C 中生成动态链接库(.dll)后可以被C#调用。 1、创建C# winform工程,用于调用C 的dll

如果不熟悉,建议看C 创建步骤,现在C 控制台上完成调试。

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(7)

2、创建C 库工程

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(8)

项目大概基本布局如图:

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(9)

3、部署C 运行环境3.1 拷贝SOEM-1.3.1到项目文件中

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(10)

3.2 添加附加包含目录

SOEM-1.3.1\osal; SOEM-1.3.1\osal\win32; SOEM-1.3.1\oshw\win32\wpcap\Include\pcap; SOEM-1.3.1\oshw\win32\wpcap\Include; SOEM-1.3.1\oshw\win32; SOEM-1.3.1\soem;

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(11)

3.3 添加附加库目录

SOEM-1.3.1\lib\win32 SOEM-1.3.1\oshw\win32\wpcap\Lib

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(12)

3.4 添加附加依赖项

libsoem.lib Packet.lib wpcap.lib

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(13)

注意事项

事项1:
LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用
/NODEFAULTLIB:library
解决方案1:
【连接器】->【输入】->【忽略指定库】,输入:msvcrt.lib
解决方案2:
【连接器】->【命令行】,输入:/NODEFAULTLIB:msvcrt.lib

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(14)


事项2:
warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode
格式以防止数据丢失
解决方案:
点击报警,进入触发报警的文件,点击菜单栏中“文件->高级保存选项”,选择“Unicode 1200”即可。

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(15)

事项3:
调试C#时,无法在C 中打断点

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(16)


解决方案:
属性->调试 中启用“本机代码调试”

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(17)

上位机开发很简单(基于Windows的SOEM上位机编程步骤)(18)

事项4:
C4996 'strcpy': This function or variable may be unsafe.
在使用vs编写c 程序时使用strcpy函数会报错
解决方案:
“属性”->“c/c ”->“预处理器” 在“预处理定义”中加入下面语句:_CRT_SECURE_NO_WARNINGS

猜您喜欢: