91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

使用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

評論

共有 條評論