非标设备中PC与PLC的通信方式

2024-04-18

在非标设备中,一些情况下需要使用PC机(工控机)与PLC通信,例如PC机中数据库信息提交PLC、机器视觉信息提交PLC、PLC数据上传至上位机等。 不同品牌的PLC与PC的通信方式不尽相同,下面以三菱、松下PLC为例,简单介绍两种通信方式。
一、 与三菱PLC的通信
三菱PLC的通信,使用三菱开发的MX Component控件,需下载安装。支持VC++、VB、Visual Studio.NET、C++ Builder开发语言,支持以太网、CC-LINK、MELSECNET以及串口通信。 以C++ Builder为例,简要说明一下编程方式。
首先,将PC与PLC连接在同一个以太网中,保证可以ping通,在MX Component软件中,PC与PLC连接正常,如下图

设定PLC的IP地址
UnicodeString as = “192.0.1.2”;
连接PLC
ActQJ71E71TCP1->ActHostAddress = as;
long iRet = ActQJ71E71TCP1->Open();
if( iRet == 0 )
{
//PLC连接成功
}else{
//PLC连接失败
}
读取PLC中的数据
WideString szDevice = “M1000”; //需读取的PLC寄存器
long IData = 0; // 读取结果
long iRet = ActQJ71E71TCP1->GetDevice(szDevice.c_bstr(),&IData);
断开与PLC的连接
ActQJ71E71TCP1->Close();
使用MX Component建立PC与PLC的通信,是比较简便的,适应快捷开发,通信稳定。
二、 与松下PLC通信
松下PLC的通信,采用的是Socket方式,无需安装插件。支持Socket的开发语言均可使用。以下是以VC++为例的简要案例:
首先仍然是使PC与PLC处于同一局域网中,并能够ping通。
PC使用Socket客户端模式,首先创建套接字
SOCKET m_sSockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(8003); //PLC的通信端口
serAddr.sin_addr.S_un.S_addr = ::inet_addr(IP_PLC); //PLC的IP地址
连接PLC
if(connect(m_sSockClient, (sockaddr*)&serAddr, sizeof(serAddr))!= SOCKET_ERROR){
//连接成功
}
进行通信,读取R100寄存器状态:
char cCMD_GetType[1024];
memset(cCMD_GetType, 0, 1024);
memcpy(cCMD_GetType, "%01#RCSR0100**\r", 15);
int n = send(m_sSockClient, cCMD_GetType, strlen(cCMD_GetType), 0);
Sleep(20);
char cRev[1024];
memset(cRev, 0, 1024);
n = recv(m_sSockClient, cRev, 1024, 0);
进行通信,写入寄存器R9000为ON
char cCMD_ON[256];
memset(cCMD_ON, 0, 256);
memcpy(cCMD_ON, "%01#WCSR90001**\r", 16);
int nSnd = send(m_sSockClient, cCMD_ON, strlen(cCMD_ON), 0);
断开与PLC的连接
closesocket(m_sSockClient);
使用Socket通信方式,编程比较灵活,适应的开发语言更多,通信稳定。


丁斗科技在PC与PLC通信方面具有多个成功案例,通信稳定可靠。可为您配套开发相应程序,具体可联系丁斗科技