一、檢測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相容工具指令提示符
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" 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下建立上位機工程
目标是在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\win32
SOEM-1.3.1\oshw\win32\wpcap\Lib
3.4 添加附加依賴項
libsoem.lib
Packet.lib
wpcap.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