龙空技术网

基于Windows的SOEM上位机编程步骤

争取个有趣的灵魂 159

前言:

现时同学们对“winpcap怎么安装”大体比较珍视,朋友们都想要知道一些“winpcap怎么安装”的相关知识。那么小编也在网摘上搜集了一些对于“winpcap怎么安装””的相关知识,希望姐妹们能喜欢,你们一起来了解一下吧!

一、检测SOEM运行环境1、准备事项从 下载SOEM 1.3.1 源代码下载wincap 并安装VS2015(个人使用VS2015,其他类似)2、编译SOEM库2.1 打开VS2015 x64 x86兼容工具命令提示符2.2 命令行转到SOEM-1.3.1目录下

cd E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1
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目录

上述指令生成lib文件

过程指令如下:

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" x86E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>REM @echo offE:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>rem give path as argE:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>if "D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE" == "" goto exit_err_argE:\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_argE:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>rem call cvarsall to load the envE:\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 fileE:\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 libraryE:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>if EXIST obj goto skip_objE:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>MKDIR objE:\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.cE:\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_libE:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>MKDIR lib\win32E:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>lib.exe @make\lib_libsoem.rsp /nologo /errorReport:promptE:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>echo make donemake doneE:\EtherCAT\上位机\SOEM-1.3.1\SOEM-1.3.1>goto :eofE:\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.ce:\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 doneE:\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下创建上位机工程

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

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

2、创建C++ 库工程

项目大概基本布局如图:

3、部署C++运行环境3.1 拷贝SOEM-1.3.1到项目文件中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;
3.3 添加附加库目录
SOEM-1.3.1\lib\win32SOEM-1.3.1\oshw\win32\wpcap\Lib
3.4 添加附加依赖项
libsoem.libPacket.libwpcap.lib
注意事项

事项1:

LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用

/NODEFAULTLIB:library

解决方案1:

【连接器】->【输入】->【忽略指定库】,输入:msvcrt.lib

解决方案2:

【连接器】->【命令行】,输入:/NODEFAULTLIB:msvcrt.lib

事项2:

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode

格式以防止数据丢失

解决方案:

点击报警,进入触发报警的文件,点击菜单栏中“文件->高级保存选项”,选择“Unicode 1200”即可。

事项3:

调试C#时,无法在C++中打断点

解决方案:

属性->调试 中启用“本机代码调试”

事项4:

C4996 'strcpy': This function or variable may be unsafe.

在使用vs编写c++程序时使用strcpy函数会报错

解决方案:

“属性”->“c/c++”->“预处理器”,在“预处理定义”中加入下面语句:_CRT_SECURE_NO_WARNINGS

标签: #winpcap怎么安装