-
大小: 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协议
相关资源
- STM32连接EC20使用内置MQTT协议接入阿里
- Qt 瑞士军刀开发工具
- qt处理图形
- c++ 画图(14Qt-XPS)
- QT CAN例程
- 使用Qt实现Excel读取工具
- Qt 通讯软件模块的开发
- Qt TCP聊天室demo
- Qt曲线
- qt样式表武林秘籍(73页)
- stm32 MQTT
- plc 电气图纸1.dwg
- STM32三菱PLC源码原理图
- QT信号槽开发
- Wemos D1 mini阿里云MQTT例程
- QT 计算文件夹内所有代码行数
- qt写的记事本
- QT自定义皮肤例子56387
- qt上位机采集51单片机温湿度数据
- MQTT协议
- 五子棋C++(Qt版).zip
- Qt飞机大战小游戏源代码
- 基于qt的c++编写的贪吃蛇游戏
- 嵌入式Qt实战教程.
- 串口助手+CRC校验(可用于PLC中ModBus通
- QT5.9_c++开发指南——随书[源码]
- 基于Qt的智能停车场.rar
- ABB-PLC-ST语言编程手册
- QT实现视音频实时传输qml+C++
- QT开发多文档框架
评论
共有 条评论