-
大小: 56.38MB文件類型: .zip金幣: 2下載: 2 次發布日期: 2023-06-05
- 語言: C/C++
- 標簽: QT??PLC??Mitsubishi??Keyence??EtherNet/IP??
資源簡介
使用QT C++,VS基本也能看懂,很多代碼按照項目寫的比較死,基本思路沒問題,需要自己添加
里面包含了三菱MC協議,基恩士的etherNet/IP,基恩士的MC沒寫
壓縮包里也有三菱、基恩士的文檔,挺全的
代碼片段和文件信息
#include?“ytplc.h“
#include?
#include?
#pragma?comment(lib“ws2_32.lib“)
YtPlc*?g_plc?=?nullptr;
YtPlc::YtPlc()
{
????socket_?=?0;
}
YtPlc::~YtPlc()
{
}
void?YtPlc::Startup()
{
????WSADATA??Ws;
????WSAStartup(MAKEWORD(2?2)?&Ws);
}
void?YtPlc::Cleanup()
{
????WSACleanup();
}
bool?YtPlc::Open(const?char?*addr?const?int?port?const?int?timeout_ms)
{
????if?(socket_?>?0)
????????return?true;
????if?(INVALID_SOCKET?==?(socket_?=?socket(AF_INET?SOCK_DGRAM?IPPROTO_UDP)))
????{
????????return?false;
????}
????//?set?block?timeout
????setsockopt(socket_?SOL_SOCKET?SO_RCVTIMEO?(const?char*)&timeout_ms?sizeof(int));
????setsockopt(socket_?SOL_SOCKET?SO_RCVTIMEO?(const?char*)&timeout_ms?sizeof(int));
????linger?linger_set;
????linger_set.l_onoff?=?0?linger_set.l_linger?=?0;
????setsockopt(socket_?SOL_SOCKET?SO_LINGER?(const?char*)&linger_set?sizeof(linger));
????sockaddr_in?socker_addr;
????memset(&socker_addr?0?sizeof(socker_addr));
????socker_addr.sin_family?=?AF_INET;
????socker_addr.sin_addr.s_addr?=?inet_addr(addr);
????socker_addr.sin_port?=?htons(port);
????if?(SOCKET_ERROR?==?connect(socket_?(sockaddr*)&socker_addr?sizeof(socker_addr)))
????{
????????socket_?=?(int)INVALID_SOCKET;
????????return?false;
????}
????return?true;
}
void?YtPlc::Close()
{
????if?(INVALID_SOCKET?!=?socket_)
????????closesocket(socket_);
????socket_?=?(int)INVALID_SOCKET;
}
bool?YtPlc::IsOpen()
{
????return?(socket_?!=?INVALID_SOCKET);
}
bool?YtPlc::Transfer(const?char?*send_data?const?int?send_size?char?*recv_data?int?&recv_size)
{
????//??parameter?clear
????recv_size?=?0;
????if?(INVALID_SOCKET?==?socket_)
????????return?false;
????const?int?kBlockSize?=?512;
????char?data[kBlockSize]{?0?};
????//??parameter?check
????if?(NULL?==?send_data?||?0?==?send_size)
????????return?false;
????//?if?iSendSize?error?return
????if?(send_size?!=?send(socket_?send_data?send_size?0))
????????return?false;
????int?iCurRecvSize?=?0;
????while?(iCurRecvSize?>=?0)
????{
????????//?receive?block?size?each?time
????????iCurRecvSize?=?recv(socket_?data?kBlockSize?0);
????????if?(iCurRecvSize?<=?0)
????????????break;
????????for?(int?i?=?0;?i?!=?iCurRecvSize;?++i)
????????{
????????????recv_data[recv_size?+?i]?=?data[i];
????????}
????????recv_size?+=?iCurRecvSize;
????????if?(iCurRecvSize?!=?kBlockSize)
????????????break;
????}
????return?(recv_size?>?0);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-07-12?13:26??PLC_Class\
?????文件????29876348??2019-07-09?16:20??PLC_Class\KV指令參考手冊.pdf
?????文件????19123551??2019-05-22?21:38??PLC_Class\KvsEtherNetIP.pdf
?????文件?????1948415??2019-05-22?21:38??PLC_Class\KvsEtherNetIPErr.pdf
?????文件????????2556??2019-07-11?18:00??PLC_Class\ytplc.cpp
?????文件????????2274??2019-07-12?13:23??PLC_Class\ytplc.h
?????文件????????5891??2019-07-11?18:00??PLC_Class\ytplc_keyence_eip.cpp
?????文件????????1813??2019-07-12?13:22??PLC_Class\ytplc_keyence_eip.h
?????文件????????7515??2019-07-11?18:00??PLC_Class\ytplc_mitsubishi_mc.cpp
?????文件????????1573??2019-07-11?18:00??PLC_Class\ytplc_mitsubishi_mc.h
?????文件?????9921591??2018-09-17?16:18??PLC_Class\三菱Q_L系列通信協議參考.pdf
- 上一篇:Visual C++信息系統開發精選 光盤
- 下一篇:MFC使用onvif協議
評論
共有 條評論