MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换

这篇具有很好参考价值的文章主要介绍了MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

         1、前两篇文章通过对Snap7和S7-1200/S7-1500PLC的通信进行了详细的介绍。Snap7的优点开源性强、使用方便易于上手,跨平台和可移植性性强。但是Snap7也有个缺点就是只能访问PLC的DB、MB、I、Q区进行数据读写,不能对V区进行读写,有人说可以读写V区,但是目前我还没有得到可靠的验证。

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

        2、ModbusTCP/ModbusRTU协议,通过开源的Libmodbus库和西门子S7-1200/S7-1500PLC通信进行数据交换。Libmodbus可以对PLC的DB、VB、MB、I、Q区进行读写操作,效率较高、开放性好,缺点就是如果用户要按位操作V区就存在安全隐患。操作流程为:先读取V区,因为Modbus协议得读写操作都是以字为单位,比较V区数据,把要改变得位数据置位或复位后再写入到PLC中,一个流程要对PLC进行2次操作,一次读操作,一次写操作。安全隐患主要存在读过程,如果读取后PLC内数据得某个位发生了变化,再去进行PLC数据得写操作过程就会存在安全隐患。
SOCKET
        3、Socket通信,Socket通信得有点也是开放性较好,速度较快,缺点十Socket通信得数据是以CHAR类型ASCII码得形式进行,所以对数据需要转换为ASII。
MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言
        有关Socket的详细介绍可以参考以下文章。

https://blog.csdn.net/lzc881012/article/details/127737864?spm=1001.2014.3001.5502https://blog.csdn.net/lzc881012/article/details/127737864?spm=1001.2014.3001.5502

合信MT226ES程序

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

PLC的实数转ASCII码指令说明及使用

http://www.a766.com/plc/112387.htmlhttp://www.a766.com/plc/112387.html

        具体的使用和介绍可参考如上连接或到西门子官网进行学习,合信PLC指令和西门子PLC指令完全一致,不分机型也可以直接用Step7microWin进行编程。

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

SOCKET上位C++软件

        上位C++软件采用之前的例程中的Socket客户端进行测试和介绍,原文章连接如下:

https://blog.csdn.net/lzc881012/article/details/127775714?spm=1001.2014.3001.5502https://blog.csdn.net/lzc881012/article/details/127775714?spm=1001.2014.3001.5502MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

        设置好IP参数和端口后进行连接PLC服务器,连接后PLC侧如下图所示。会显示当前连接的客户端的IP地址。

        MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

        数据读写操作,此例程只写了PLC侧发送数据ASCII码格式转换,读取ASCII码格式转换没有写,以后有时间再慢慢测试。

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换,c++,mfc,windows,visual studio,开发语言

        经过简单的测试可得出结论就是上位软件通过SOCKET对PLC进行数据读写比较麻烦,需要编写大量的数据转换指令。并且PLC侧的ASCII转换指令比较浪费内存。因此实用性较差。以下为socket接收数据程序。
BOOL CMFCApplicationSocketClientDemoDlg::ConnectServerSocket(CMFCApplicationSocketClientDemoDlg* pClient)
{
	CSoceketInitConfig ClientSockInit(2,2);

	m_pClientSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (m_pClientSock==NULL)
	{
		MessageBox(_T("ClientSocket创建失败!"),_T("信息提示:"),MB_OKCANCEL|MB_ICONERROR);
		return FALSE;
	}
	sockaddr_in ServerAddr_in;
	ServerAddr_in.sin_family = AF_INET;

	int m_SerPort = GetDlgItemInt(IDC_EDITSERVERPORT);
	CString StrSerIp;
	GetDlgItemText(IDC_IPADDRESS_SERVER,StrSerIp);
	
	if (StrSerIp==_T("0.0.0.0")||m_SerPort > 65535 || m_SerPort < 1024|| m_SerPort==0)
	{
		MessageBox(_T("请输入正确端口(1024-65535)或IP地址,重新连接!"), _T("信息提示:"), MB_OK | MB_ICONINFORMATION);
		SetRevTextMsg(_T("请输入正确端口IP地址,重新连接"));
		return FALSE;
	}
	char* pStrIP = CstringToWideCharArry(StrSerIp);

	ServerAddr_in.sin_port = htons(m_SerPort);
	ServerAddr_in.sin_addr.S_un.S_addr = inet_addr(pStrIP);
	if (SOCKET_ERROR==connect(m_pClientSock, (sockaddr*)&ServerAddr_in, sizeof(ServerAddr_in)))
	{
		MessageBox(_T("服务器连接失败,请检查你填写的IP和端口是否错误!"), _T("信息提示:"), MB_OK | MB_ICONWARNING);
		SetRevTextMsg(_T("服务器连接失败,请检查你填写的IP和端口是否错误!"));
		return FALSE;
	}
	pClient->SetRevTextMsg(_T("连接服务器成功"));
	pClient->m_CutDownConnect.EnableWindow( TRUE);
	pClient->m_ConnectServer.EnableWindow(FALSE);
	m_ServerConnectSucced = TRUE;

	CString RevMsg;
	while (true)
	{
		if (socket_Select(m_pClientSock,100,TRUE))
		{
			char recvBuff[MaxBufSize] = { 0 };
			int iRead = recv(m_pClientSock, recvBuff, sizeof(recvBuff), 0);
			if (iRead > 0)
			{
				RevMsg = CharArryToCstring(recvBuff);
				pClient->SetRevTextMsg(StrSerIp + _T(">>") + RevMsg);
				for (int i = 0; i < iRead; i++)
				{
					printf("recvBuff[%d]=%d\n",i, int(recvBuff[i]));
				}
				
			}
			else
			{
				pClient->SetRevTextMsg(_T("已断线,请重新连接"));
				pClient->m_CutDownConnect.EnableWindow(FALSE);
				pClient->m_ConnectServer.EnableWindow(TRUE);
				m_ServerConnectSucced = FALSE;
				return TRUE;
			}
		}
		
	}
	return TRUE;
}

        通信线程文章来源地址https://www.toymoban.com/news/detail-789637.html

DWORD WINAPI ConnectServerThread(LPCVOID lParam)
{
	CMFCApplicationSocketClientDemoDlg* pClient = (CMFCApplicationSocketClientDemoDlg*)lParam;
	if (pClient->ConnectServerSocket(pClient))
	{

	}
	return 0;
}

到了这里,关于MFC Socket和合信CTMC M266ES 运动控制型PLC通信进行数据交换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 博途1200/1500PLC V90 PN通信控制 (FB284功能块)

    先简单说下如何获取FB284,一般有2种方法,Startdrive软件可以操作大部分西门子的驱动器,建议安装调试方便,缺点就是软件太大。   Drive_Lib_V62_S7_1200_1500下载地址如下 https://download.csdn.net/download/m0_46143730/86541852 https://download.csdn.net/download/m0_46143730/86541852 1、添加全局库 其它工

    2024年02月10日
    浏览(93)
  • 工业自动化控制通信协议Profinet系列-3、CoDeSys软PLC方案介绍

    之前在树莓派desktop上已经成功编译运行测试程序,但是还需要主站去和其交互才能看到比较完整的profinet交互过程,因此这里我们需要搭建运行profinet主站,并和之前的从站程序交互运行,这里一番查找后最终确认先使用软PLC方案来搭建主站验证,等到实际场景可以买PLC硬件

    2024年02月07日
    浏览(42)
  • 工业控制系统:HSLCommunication可以与PLC进行通信详解:C# HSLCommunication可以与 modbus tcp通信demo

    当使用C#编程语言时,HSLCommunication库是一种常用的工具,用于实现与Modbus TCP通信。在本文中,我将为您提供详细的步骤和示例代码,以帮助您开始使用HSLCommunication库与Modbus TCP通信。 步骤1:安装HSLCommunication库 首先,您需要在您的C#项目中安装HSLCommunication库。您可以通过Nu

    2024年01月22日
    浏览(59)
  • 【】三菱FX3U-48MT/ES PLC 控制台达ASDA-B2伺服驱动器

    (对此篇文章有任何疑问,欢迎一起交流) 1. 控制前提条件与控制原理 1 .1   三菱 F X3U-48MT/ES 控制伺服驱动器的前提条件 1.1.1 三菱FX3U-48MT/ES可以进行程序的上传、下载。 1.1.2 理解伺服电机与减速器、脉冲量、以及电子轮比之间的关系。 1.1.3 PLC与伺服驱动器接线正确,伺服

    2024年02月12日
    浏览(47)
  • socket套接字通信 TCP传输控制协议/IP网络协议 5.18

    B/S :浏览器和服务器 C/S :客户机和服务器 网络的层次结构和每层所使用协议的集合 网络采用分层管理的方法,将网络的功能划分为不同的模块 OSI模型: 共7种: 数据的封装与传递过程: 网络传输数据大小user data: 6~1460 网络传输中容易发生拆包和粘包,所以接收和发送的字节

    2024年02月05日
    浏览(79)
  • 博途PLC1200/1500PLC ModbusTcp通信梯形图篇(轮询)

    关于MODBUS Tcp通信的基础概念,各种通信方案的详细讲解,可以参看下面这篇博客: S7-200SMART PLC Modbus TCP通信(多服务器多从站轮询)_RXXW_Dor的博客-CSDN博客 MBUS_CLIENT作为MODBUS TCP客户端通过S7-200 SMART CPU上的以太网端口进行通信。MBUS_CLIENT可建立客户端-服务器连接、发送MODBUS功

    2024年02月06日
    浏览(123)
  • 上位机开发之三菱PLC通信

    三菱MC协议是开发三菱系列PLC必须掌握的一种通信协议,其目的是让外部设备,可以通过串行通信模块C24或以太网接口模块E71,实现对可编程控制器CPU的数据访问。 MC协议是Melsec协议的简称。 外部设备通过C24/E71访问可编程控制器CPU时,可以选择不同的通信帧及数据格式来实现

    2023年04月08日
    浏览(45)
  • 西门子PLC1200自由口通信

    文章目录 前言 自由口通信 二、使用步骤 组态 编程 总结 项目里需要使用PLC和某公司液体泵通信,液体泵采用RS485,支持OEM协议和DT协议,因此PLC采用自由口通信 提示:以下是本篇文章正文内容,下面案例可供参考 扩展了CB1241通信板,RS485连线如下图所示 TRB为+,TRA为-,M为接

    2024年02月07日
    浏览(57)
  • 17 MFC进程通信

    设置界面 发送 从剪切版里面接收数据 命名管道(Named Pipe)和匿名管道(Anonymous Pipe)都是用于进程间通信的机制,但它们有一些区别。 命名管道(Named Pipe): 匿名管道(Anonymous Pipe): 父进程 子进程 子进程的*.exe放到父进程中 父进程启动子进程 父进程写入数据子进程读

    2024年02月13日
    浏览(41)
  • 【MFC】实现简单UDP通信

    创建一个基于对话框的MFC项目(名称为UDP),高级功能选中Windows套接字 这个时候在CUDP类的InitInstance()方法中就会出现这样的代码用来初始化套接字 如果没有选中,手动添加也是可以的。 控件ID 关联变量名 类型 作用 IDC_EDIT1 m_edit CEdit 显示接收到的信息 IDC_EDIT2 m_msg CString 保存

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包