c#与三菱PLC通讯读写实例


-
c#与三菱FX2N系列PLC进行COM口通讯进行配置,实现数据读写
-
2019-03-10
-
2018-12-05
-
2018-08-28
-
2018-08-25
-
2018-04-08
-
2017-08-29
-
2017-07-22
-
2017-05-01
-
2017-04-08
-
2017-04-05
3.53MB
C#与三菱PLC通讯源码 串口通讯
2019-02-14本程序通过编程口与三菱FX系列PLC进行通讯(FX-3GA-40MT测试没有问题),以读取PLC内各软元件数据……程序只做了部分软元件的处理,若要处理所有软元件可以此为基础进行相应的二次开发。本软件开
关于C#与三菱FX-3U通讯的问题_course
2014-07-24最近需要做一个三菱FX-3U监控程序,现在决定用mx component做串口通讯, 在PLC上装上了232-BD模块,用自带的axActFXCPU读写FX2n完全没问题,但是到了FX3U上就不行了.
哪位有C#与三菱PLC通讯的源码,最好有实例_course
2011-11-01最近小弟想用C#编写上位机与三菱PLC通讯,并对PLC内的软元件地址监控 不知哪位大侠,有这方面的实例,借小弟观摩下!
160KB
C#与三菱PLC通讯
2018-11-15该文件为个人开发的C#上位机软件,通过三菱的AcUtlType控件与三菱PLC进行通讯,对单个或多个16位、32位数据寄存器进行读写,对单个或多个中间继电器进行读写。
207KB
C#通过串口与三菱PLC通讯
2018-05-21C#通过串口与三菱PLC通讯源代码,供大家参考学习,互相帮助
C# 三菱PLC FX5U 通信DEMO下载_course
2020-08-06好不好用,自己看 相关下载链接://download.csdn.net/download/weixin_44713908/12686213?utm_source=bbsseo
83KB
C#与三菱PLC交互例程
2018-10-20使用前提 1、需要单独下载并安装GMX Component_4.16S.iso 组件 2、然后做配置对应的接口数据
c#和三菱plc(Q系列)通过tcp通讯问题_course
2019-08-24各位大神, C#和三菱PLC直接通讯(不用Kepware)。 我看了网上介绍,比如调用MXComponent组件 还有内置以太网接口CPU和以太网通讯模块 内置以太网支持MC协议和套接字 。 想问下:
1.54MB
三菱PLC与C#等通讯实例
2018-10-10从三菱PLC软件中提取的PLC与C# VB VC等高级语言的通讯实例,送给有用的人吧.
C#和三菱PLC socket网络通信_course
2014-04-26以下代码是用C++和PLC通信,但是我看不懂C++,能帮我把这段代码用C#的形式写出来吗? 或者有能直接和PLC网络通信的C#源码,感谢各位高手,谢谢,非常感谢~~~ ------------------------------------------------------------------------ #include "stdafx.h" #include "SensorMounter.h" #include "SocketThread.h" IMPLEMENT_DYNCREATE(CSocketThread, CWinThread) CSocketThread::CSocketThread() : m_sIPAddress(_T("")) { m_nSocketPort = 0; m_bConnected = FALSE; m_nWtmE1 = 0; } CSocketThread::~CSocketThread() { } BOOL CSocketThread::InitInstance() return TRUE; } int CSocketThread::ExitInstance() { return CWinThread::ExitInstance(); } BEGIN_MESSAGE_MAP(CSocketThread, CWinThread) ON_THREAD_MESSAGE(WMU_SOCKET_CONNECT, OnSConnect) ON_THREAD_MESSAGE(WMU_SOCKET_SEND, OnSSend) ON_THREAD_MESSAGE(WMU_SOCKET_RECV, OnSRecv) ON_THREAD_MESSAGE(WMU_SOCKET_CLOSE, OnSClose) ON_THREAD_MESSAGE(WMU_SOCKET_QUIT, OnSQuit) END_MESSAGE_MAP() void CSocketThread::OnSConnect(UINT wParam, LONG lParam) { TRACE("CSocketThread::OnSConnect: start\n"); BOOL bRC = SocketConnect(); _ST_SEND *pSend = (_ST_SEND *)wParam; if (!pSend) return; pSend->nDoneSize = (bRC ? 0 : -1); if (pSend->hwndDone) ::SendMessage(pSend->hwndDone, WMU_SOCKET_DONE, (WPARAM)pSend, (LPARAM)pSend->nDoneSize); if (pSend->hEvDone) SetEvent(pSend->hEvDone); } void CSocketThread::OnSSend(UINT wParam, LONG lParam) { TRACE("CSocketThread::OnSSend: start\n"); _ST_SEND *pSend = (_ST_SEND *)wParam; if (!pSend) return; if (!m_bConnected) { pSend->nDoneSize = -1; if (pSend->hwndDone) ::SendMessage(pSend->hwndDone, WMU_SOCKET_DONE, (WPARAM)pSend, (LPARAM)(-1)); if (pSend->hEvDone) SetEvent(pSend->hEvDone); return; } pSend->nDoneSize = 0; switch (pSend->nDataType) { case _ST_DATA: pSend->nDoneSize = SocketSendData(pSend->nAddr, *((WORD *)pSend->pData), pSend->bDebugDisp); break; case _ST_MULTIBYTE: pSend->nDoneSize = SocketSendMultiByte(pSend->nSize, pSend->nAddr, pSend->pData, pSend->bDebugDisp); break; case _ST_MULTIWORD: pSend->nDoneSize = SocketSendMultiWord(pSend->nSize, pSend->nAddr, (WORD *)pSend->pData, pSend->bDebugDisp); break; case _ST_MULTIBYTE_BIN: pSend->nDoneSize = SocketBinSendMultiByte(pSend->nSize, pSend->nAddr, pSend->pData, pSend->bDebugDisp); break; case _ST_MULTIWORD_BIN: pSend->nDoneSize = SocketBinSendMultiWord(pSend->nSize, pSend->nAddr, (WORD *)pSend->pData, pSend->bDebugDisp); break; default: break; } if (pSend->hwndDone) ::SendMessage(pSend->hwndDone, WMU_SOCKET_DONE, (WPARAM)pSend, (LPARAM)(pSend->nDoneSize)); if (pSend->hEvDone) SetEvent(pSend->hEvDone); } void CSocketThread::OnSRecv(UINT wParam, LONG lParam) { _ST_SEND *pSend = (_ST_SEND *)wParam; if (!pSend) return; if (!m_bConnected) { pSend->nDoneSize = -1; if (pSend->hwndDone) ::SendMessage(pSend->hwndDone, WMU_SOCKET_DONE, (WPARAM)pSend, (LPARAM)(-1)); if (pSend->hEvDone) SetEvent(pSend->hEvDone); return; } BOOL bRC; switch (pSend->nDataType) { case _ST_DATA: bRC = SocketReceiveData(pSend->nAddr, (WORD *)pSend->pData, pSend->bDebugDisp); pSend->nDoneSize = (bRC ? sizeof(WORD) : 0); break; case _ST_MULTIBYTE: break; case _ST_MULTIWORD: bRC = SocketReceiveMultiWord(pSend->nSize, pSend->nAddr, (WORD *)pSend->pData, pSend->bDebugDisp); pSend->nDoneSize = (bRC ? pSend->nSize : 0); break; case _ST_MULTIWORD_BIN: bRC = SocketBinReceiveMultiWord(pSend->nSize, pSend->nAddr, (WORD *)pSend->pData, pSend->bDebugDisp); pSend->nDoneSize = (bRC ? pSend->nSize : 0); break; default: break; } if (pSend->hwndDone) ::SendMessage(pSend->hwndDone, WMU_SOCKET_DONE, (WPARAM)pSend, (LPARAM)(pSend->nDoneSize)); if (pSend->hEvDone) SetEvent(pSend->hEvDone); } void CSocketThread::OnSClose(UINT wParam, LONG lParam) { TRACE("CSocketThread::OnSClose: start\n"); SocketDisconnect(); } void CSocketThread::OnSQuit(UINT wParam, LONG lParam) { TRACE("CSocketThread::OnSQuit: start"); // AfxEndThread(0); ::PostQuitMessage(0); } BOOL CSocketThread::SocketConnect() { BOOL bRet; bRet = m_SW.Socket(m_nSocketPort); if (!bRet) { CString msg; msg.Format("[NG] port:%d code = %d:%d", m_nSocketPort, m_SW.m_nErrorCode, m_SW.m_nLastError); MessageBox(NULL, (LPCTSTR)msg, _T("CSocketThread::SocketConnect: Connect"), MB_ICONERROR); return (m_bConnected = FALSE); } bRet = m_SW.Connect((LPCTSTR)m_sIPAddress); if (!bRet) { CString msg; msg.Format("[NG] Host Connect Error \n HostName:%s code = %d:%d", (LPCTSTR)m_sIPAddress, m_SW.m_nErrorCode, m_SW.m_nLastError); MessageBox(NULL, (LPCTSTR)msg, _T("CSocketThread::SocketConnect: Connect"), MB_ICONERROR); return (m_bConnected = FALSE); } return (m_bConnected = TRUE); } BOOL CSocketThread::SocketBinSendMultiByte(int nDataNum, UINT nAddress, BYTE ucData[], BOOL bDebugDisp) { BYTE pSendBuf[37] = { 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0xCC, 0xCC, 0x10, 0x00, 0x01, 0x14, 0x01, 0x00, 0xCC, 0xCC, 0xCC, 0x90, 0xCC, 0xCC, 0xD1, 0xD1, 0xD1, 0xD1, 0xD2, 0xD2, 0xD2, 0xD2, 0xD3, 0xD3, 0xD3, 0xD3, 0xD4, 0xD4, 0xD4, 0xD4 }; WORD wDataLength = 12 + nDataNum*4; DWORD dwDeviceAddr = nAddress + (0x90<<24); WORD wDeviceNum = nDataNum*8; memcpy( &pSendBuf[7], &wDataLength, 2); memcpy( &pSendBuf[15], &dwDeviceAddr, 4); memcpy( &pSendBuf[19], &wDeviceNum, 2); BYTE pBuf[4]; for (int i=0; i<nDataNum; i++) { for (int j=0; j<4; j++) { pBuf[j] = 0x00; if( (ucData[i]&(0x01<<j*2)) ) pBuf[j] |= 0x10; if( (ucData[i]&(0x01<<(j*2+1))) ) pBuf[j] |= 0x01; } memcpy( &pSendBuf[21+i*4], &pBuf, 4); } int nSend = m_SW.SendBin( pSendBuf, 21+nDataNum*4 ); if (nSend < 0) { SocketDispErrorCode(_T("SendMultiByte(send)")); return FALSE; } if(m_nWtmE1 > 0) Sleep(m_nWtmE1); BYTE pReceiveBuf[11]; long nReceive = m_SW.ReadBin( pReceiveBuf, 11); if ( nReceive < 1 ) { SocketDispErrorCode(_T("SendMultiByte(receive)")); return FALSE; } if ( pReceiveBuf[0]==0xD0 && pReceiveBuf[1]==0x00 && pReceiveBuf[2]==0x00 && pReceiveBuf[3]==0xFF && pReceiveBuf[4]==0xFF && pReceiveBuf[5]==0x03 && pReceiveBuf[9]==0x00 && pReceiveBuf[10]==0x00 ) { if(pReceiveBuf[7]==2) return TRUE; else if(pReceiveBuf[7]==0) return FALSE; } nReceive = m_SW.ReadBin( pReceiveBuf, pReceiveBuf[7]-2); if ( nReceive < 1 ) { SocketDispErrorCode(_T("SendMultiByte(receive)")); return FALSE; } return TRUE; } BOOL CSocketThread::SocketBinSendMultiWord(int nDataNum, UINT nAddress, WORD wData[], BOOL bDebugDisp) { BYTE pSendBuf[33] = { 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0xCC, 0xCC, 0x10, 0x00, 0x01, 0x14, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xA8, 0xCC, 0xCC, 0xD1, 0xD1, 0xD2, 0xD2, 0xD3, 0xD3, 0xD4, 0xD4, 0xD5, 0xD5, 0xD6, 0xD6 }; WORD wDataLength = 12+nDataNum*2; DWORD dwDeviceAddr = nAddress + (0xA8<<24); WORD wDeviceNum = nDataNum; memcpy( &pSendBuf[7], &wDataLength, 2); memcpy( &pSendBuf[15], &dwDeviceAddr, 4); memcpy( &pSendBuf[19], &wDeviceNum, 2); memcpy( &pSendBuf[21], &wData, nDataNum); for (int i=0; i<nDataNum; i++){ pSendBuf[22+i*2] = (wData[i]&0xFF00)>>8; pSendBuf[21+i*2] = wData[i]&0x00FF; } int nSend = m_SW.SendBin( pSendBuf, 21+nDataNum*2 ); if (nSend < 0) { SocketDispErrorCode(_T("SendMultiWord(send)")); return FALSE; } if(m_nWtmE1 > 0) Sleep(m_nWtmE1); BYTE pReceiveBuf[11]; long nReceive = m_SW.ReadBin( pReceiveBuf, 11); if ( nReceive < 1 ) { SocketDispErrorCode(_T("SendMultiWord(receive)")); return FALSE; } if ( pReceiveBuf[0]==0xD0 && pReceiveBuf[1]==0x00 && pReceiveBuf[2]==0x00 && pReceiveBuf[3]==0xFF && pReceiveBuf[4]==0xFF && pReceiveBuf[5]==0x03 && pReceiveBuf[9]==0x00 && pReceiveBuf[10]==0x00 ) { if (pReceiveBuf[7]==2) return TRUE; else if (pReceiveBuf[7]==0) return FALSE; } nReceive = m_SW.ReadBin( pReceiveBuf, pReceiveBuf[7]-2); if ( nReceive < 1 ) { SocketDispErrorCode(_T("SendMultiByte(receive)")); return FALSE; } return TRUE; } BOOL CSocketThread::SocketBinReceiveMultiWord(int nDataNum, UINT nAddress, WORD wData[], BOOL bDeviceCode) { BYTE pSendBuf[21] = { 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0xCC, 0xCC, 0x10, 0x00, 0x01, 0x04, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x90, 0xCC, 0xCC }; WORD wDataLength = 12; DWORD dwDeviceAddr; if (bDeviceCode==FALSE) dwDeviceAddr = nAddress+(0x90<<24); else dwDeviceAddr = nAddress+(0xA8<<24); WORD wDeviceNum = nDataNum; memcpy( &pSendBuf[7], &wDataLength, 2); memcpy( &pSendBuf[15], &dwDeviceAddr, 4); memcpy( &pSendBuf[19], &wDeviceNum, 2); int nSend = m_SW.SendBin( pSendBuf, 21 ); if (nSend < 0) { SocketDispErrorCode(_T("SendMultiWord(send)")); return FALSE; } if(m_nWtmE1 > 0) Sleep(m_nWtmE1); BYTE pReceiveBuf[21]; int nReadLength; for (int i=0; i<21; i++) pReceiveBuf[i] = 0; long nReceive = m_SW.ReadBin( pReceiveBuf, 11); if ( nReceive < 1 ) { SocketDispErrorCode(_T("SendMultiWord(receive)")); return FALSE; } if ( pReceiveBuf[0]==0xD0 && pReceiveBuf[1]==0x00 && pReceiveBuf[2]==0x00 && pReceiveBuf[3]==0xFF && pReceiveBuf[4]==0xFF && pReceiveBuf[5]==0x03 && pReceiveBuf[9]==0x00 && pReceiveBuf[10]==0x00 ) { if(pReceiveBuf[7]==0 || pReceiveBuf[7]==2 ) return FALSE; else nReadLength = pReceiveBuf[7]-2; } else { return FALSE; } for (int i=0; i<21; i++) pReceiveBuf[i] = 0; nReceive = m_SW.ReadBin( pReceiveBuf, nReadLength); if ( nReceive < 1 ) { SocketDispErrorCode(_T("SendMultiByte(receive)")); return FALSE; } else { for(int i=0; i<nDataNum; i++) wData[i] = pReceiveBuf[2*i] + (pReceiveBuf[2*i+1]<<8); return TRUE; } } BOOL CSocketThread::SocketDisconnect(void) { return m_SW.Shutdown(); } void CSocketThread::SocketDispErrorCode(LPCTSTR strFunc) { CString strCode, strMsg; switch (m_SW.m_nErrorCode) { case 101: strCode="IDP_SOCKETS_INIT_FAILED"; break; case 1201: strCode="SW_ERR_NOERROR"; break; case 1202: strCode="SW_ERR_WSASTARTUP"; break; case 1203: strCode="SW_ERR_GETSERV"; break; case 1204: strCode="SW_ERR_GETHOSTNAME"; break; case 1205: strCode="SW_ERR_GETHOSTENT"; break; case 1206: strCode="SW_ERR_SOCK_STREAM"; break; case 1207: strCode="SW_ERR_BIND"; break; case 1208: strCode="SW_ERR_LISTEN"; break; case 1209: strCode="SW_ERR_ACCEPTTHREAD"; break; case 1210: strCode="SW_ERR_BUFFER_OVER"; break; case 1211: strCode="SW_ERR_READ"; break; case 1212: strCode="SW_ERR_SEND"; break; case 1213: strCode="SW_ERR_CONNECT"; break; case 1214: strCode="SW_ERR_ACCEPT"; break; case 1215: strCode="SW_ERR_RESUME_FAIL"; break; case 1216: strCode="SW_CONNECT_CLOSED"; break; } strMsg.Format(" Function : %s \n ErrorCode : %s \n LastError : %d", strFunc, strCode, m_SW.m_nLastError); MessageBox(NULL, (LPCTSTR)strMsg, _T("CSocketThread::SocketDispErrorCode"), MB_ICONERROR); }
C#控制三菱PLC_course
2010-08-04在哪能买到C#控制三菱PLC的源码吗? 要求:1、可以写入、读出寄存器的数值; 2、可以进行元件(Y、M、S、C、T)的置、复位操作; 3、可以读取元件(X、Y、M、S、C、T)的ON/OFF状态;
666KB
C#与三菱PLC通讯.rar
2019-09-28上位机用C#与三菱FX PLC通讯,联机测试的PLC型号为FX2N-40MT
10KB
三菱MC协议通讯代码
2018-05-03MC协议通讯,三菱Q、L系列PLC与VC#上位机交互,经过多个项目检验有效。若有不懂可以加群,大家一起研究研究
4.27MB
PLC通讯实现-C#访问三菱PLC(CPU-R04)-MxComponent4.16S
2019-10-161、包括原PLC通讯代码。 2、新增三菱PLC R系列的通讯支持。 3、新增对MxComponent4.16S的ActUtilType调用支持。
64KB
三菱PLC串口C#通信和类
2018-10-07例程中有三菱PLC通过串口与上位机C#通信,可以直接置位复位PLC中的位,可以直接读取写入PLC中的寄存器
4KB
三菱Q系列PLC通信协议C#实现
2019-01-11三菱Q系列PLC的C#实现, 重点关注ReadMitNWord和WriteMitNWord中读写数据部分。
47KB
c#通过MX component连接三菱PLC源代码
2018-01-05上位机安装MX component后,利用c#调用MX component,以达到和三菱PLC进行通讯的目的
116KB
C#与三菱PLC以太网通信
2019-01-25本工具使用C#语言编写,可以对三菱PLC的数据进行读取和写入。
-
学院
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
-
下载
人大经-济论-坛-R软件数据分析视频教程(初级).doc
人大经-济论-坛-R软件数据分析视频教程(初级).doc
-
下载
PDF旋转工具.zip
PDF旋转工具.zip
-
博客
什么是三大范式?
什么是三大范式?
-
学院
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
博客
C++ primer5 3.35
C++ primer5 3.35
-
博客
147. 对链表进行插入排序
147. 对链表进行插入排序
-
学院
LVS + Keepalived 实现 MySQL 负载均衡与高可用
LVS + Keepalived 实现 MySQL 负载均衡与高可用
-
博客
锐龙4500和4600哪个好 r5 4500和r5 4600的区别
锐龙4500和4600哪个好 r5 4500和r5 4600的区别
-
学院
华为1+X认证——网络系统建设与运维(初级)
华为1+X认证——网络系统建设与运维(初级)
-
下载
gethashes工具.rar
gethashes工具.rar
-
学院
使用 Linux 平台充当 Router 路由器
使用 Linux 平台充当 Router 路由器
-
学院
Mycat 实现 MySQL的分库分表、读写分离、主从切换
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
下载
Python-3.0.1.tgz
Python-3.0.1.tgz
-
下载
geany官方最新版苹果mac系统dmg安装包
geany官方最新版苹果mac系统dmg安装包
-
下载
C#公交车查询系统源码-C#文档类资源
C#公交车查询系统源码-C#文档类资源
-
博客
395. 至少有 K 个重复字符的最长子串
395. 至少有 K 个重复字符的最长子串
-
学院
MySQL 触发器
MySQL 触发器
-
博客
春节感悟 - 抱歉
春节感悟 - 抱歉
-
博客
eclipse部署的web项目没有添加到Tomcat的webapps目录下解决方法
eclipse部署的web项目没有添加到Tomcat的webapps目录下解决方法
-
下载
基于Kinect的虚拟现实跑步机设计毕设论文.docx
基于Kinect的虚拟现实跑步机设计毕设论文.docx
-
学院
MySQL Router 实现高可用、负载均衡、读写分离
MySQL Router 实现高可用、负载均衡、读写分离
-
博客
LeetCode 395. 至少有 K 个重复字符的最长子串 0ms
LeetCode 395. 至少有 K 个重复字符的最长子串 0ms
-
学院
C++代码规范和Doxygen根据注释自动生成手册
C++代码规范和Doxygen根据注释自动生成手册
-
下载
2021新版SVGA礼物 直播礼物 SVGA礼物特效新平台专用测试
2021新版SVGA礼物 直播礼物 SVGA礼物特效新平台专用测试
-
下载
亚马逊开店服务流程.pptx
亚马逊开店服务流程.pptx
-
下载
股票代码列表_20210227_171609.rar
股票代码列表_20210227_171609.rar
-
学院
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
下载
telnet-centos.zip
telnet-centos.zip
-
博客
nginx 使用笔记
nginx 使用笔记