VC环境下三菱PLC与微机的串行通信

出处:维库电子市场网 发布于:2023-06-29 16:07:37

摘 要:主要介绍三菱FX系列PLC与上位机之间的通讯协议,并采用CSerial类来实现串行通信,本文给出了程序设计方法和部分源代码。

编程控制器(PLC)是集计算机技术、自动控制技术、通信技术为一体的新型自动控制装置。由于体积小、可靠性高以及组态灵活等优点,PLC在工业控制领域得到了广泛的应用。将PC机与可编程控制器组合起来,充分利用PC机强大的人机接口功能、丰富的应用软件和低廉的价格来共同实现管理、控制一体化成为一个新的发展趋势。本文重点介绍在Windows 2000环境下如何利用VC来实现PC机与三菱PLC之间的串行通讯。
1 三菱PLC与计算机之间通信协议
FX2系列PLC与计算机之间的通信采用RS-232标准,其传输速率固定为9600bps,奇偶校验位采用偶校验。数据格式如表1所示。数据以帧为单位发送和接收。一个多字符帧由所示的五部分组成,其中和校验值是将命令码STX——ETX之间的字符的ASCII码(十六进制数)相加,取得所得和的二位数。STX和ETX分别表示该字符帧的起始标起和结束标志。


(1) 起始字元(STX):ASCII码的起始字元STX对应的16进制数位0x02。无论命令信息还是回应信息,它们的起始字元均为STX,接收方以此来判知传输资料的开始。
(2) 命令号码:为两位16进制数。所谓命令号码是指上位机要求下位机所执行的动作类别,例如要求读取或写入单点状态、写入或读取暂存器资料、强制设定、运行、停止等。在回应信息中,下位机会将上位机接收到的命令号码原原本本的随同其它信息一同发送给上位机。
(3) 元件首地址:对应要操作的元件的相应的地址。如从D123单元中读取数据时,要把它对应的地址:0x10F6发送给PLC。
(4) 元件个数:读取位元件或字元件的数量。
(5) 结束字元(ETX):ASCII码的结束字元ETX对应的16进制数为0x03。无论命令信息还是回应信息,它们的结束字元均为ETX,接收方以此来判知此次通讯已结束。
(6) 校验码(Checksum):校验码是将STX-ETX之间的ASCII字元的16进制数值以“LRC(Longitudinal Redundancy Check)”法计算出1个Byte长度(两个16进制数值00-FFH)的校验码。当下位机接收到信息后,用同样的方法计算出接收信息的校验码,如果两个校验码相同,则说明传送正确。
FX2系列与计算机之间的通信是以主机发出的初始命令,PLC对其做出响应的方式进行通信的。共有0、1、7、8四种命令,上位机实现对PLC的读写和强行置位。通过ENQ、ACK和NAK,上位机协调与PLC的通信应答。
2 编程口操作命令类型
串行通信是计算机与其他机器之间进行通信的一种常用方法,在Windows操作系统中提供了实现各种串行通信的API函数。通过SC-09编程电缆或FX-232-BD通讯模块,可以将PC机和计算机串行通信口RS-232连接起来,可以实现PC机对PLC的RAM区数据进行读、写操作。根据PLC本身所具有的特性,计算机可对PLC进行以下4种类型的操作:
(1) 位元件或字元件状态读操作(CMD0);
  (2) 位元件或字元件状态写操作(CMD1);
  (3) 位元件强制ON操作(CMD7);
  (4) 位元件强制OFF操作(CMD8)。
3 软件编程
(1) 串行通信实现方法
在进行以上四种操作之前要对串行通信口进行必要的初始化。本人采用了一个专门针对串行通信的CSerial类,并在Open函数中进行了进一步的完善。它由MuMega Technologies公司提供的一个Visual C++类,我们只要理解CSerial类种的几个成员函数,就能很方便地实现串行通信了。以下是该类定义:
class CSerial
{
public:
CSerial();
~CSerial();
BOOL Open( int nPort , int nBaud,int nParity,int nByteSize,int nStopBits );
BOOL Close( void );
int ReadData( void *, int );
int SendData( const char *, int );
int ReadDataWaiting( void );
BOOL IsOpened( void ){ return( m_bOpened ); }
protected:
BOOL WriteCommByte( unsigned char );
HANDLE m_hIDComDev;
OVERLAPPED m_OverlappedRead, m_OverlappedWrite;
BOOL m_bOpened;
};
① Serial::Open这个成员函数打开通信端口。带五个参数,个是串口号,第二个参数是数据传输速率,第三个是数据效验方式,第四个是数据位数,第五个是数据停止位。
② Serial::Close函数关闭通信端口。
③ CSerial::SendData函数把数据从一个缓冲区写到串行端口。个参数是缓冲区指针,其中包含要被发送的资料;第二个参数是发送的字节数。
④ CSerial::ReadData函数从断口接收缓冲区读入数据。个参数是缓冲区指针,资料将被放入该缓冲区;第二个参数缓冲区的大小。
(2) 位元件或字元件状态读操作
操作对象元件:PLC内部的X、Y、M、S、T、C、D元件;命令格式如表1;在发送完上述命令格式代码后,就可以读取PLC响应信息了。

部分程序代码:
BOOL CPlcComDlg::ReadPLC(char *Read, char *address, int bytes)
{
CSerial Serial;
char read_BUFFER;
if(Serial.Open(m_com, m_Buad, m_Parity, m_Byte, m_StopBites))
{
Serial.SendData(&ENQ_request,1);//发送联络讯号
Sleep(100);
Serial.ReadData(&read_BUFFER,1);//读取PLC响应讯号
if(read_BUFFER==ACK)
{
//初始化变量
//发送命令格式代码
ASCII(readdatasum_check,readdata_sum);
//将STX-ETX之间的字符相加,转换成ASCII(十六进制),并取和的低二位数。
if(*readdatasum_CHECK==*readdatasum_check)//和校验
{
//对读出的数据进行处理,转换成整型数
for(int j=0;j{
for(i=j*2;iRead[i]=(Read[i]>0x39)?(Read[i]-0x41+0xA):(Read [i]-0x30);
Read_value[j]=(((((Read [j*4+2]<<4)+Read [j*4+3]))+Read [j*4+0])<<4)+Read [j*4+1];
}
return TRUE;
}
else
return FALSE;
}
}
}
}
//将整数转换成ASCII(十六进制),并取低二位,
void CPlcComDlg::ASCII(char *total_databytes, int read_bytes)
{
unsigned int uTmp;
uTmp=read_bytes & 0x000f;
total_databytes[1]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xA);
uTmp=(read_bytes>>4) & 0x000f;
total_databytes[0]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xA);
}
(3) 位元件或字元件状态写操作
操作对象元件:PLC内部的X、Y、M、S、T、C、D元件;命令格式。
程序代码(略)。
(4) 位元件强制ON操作
操作对象元件:PLC内部的X、Y、M、S、T、C元件;命令格式。


部分程序代码如下:
void CPlcComDlg::ForceOnOpreation(char *Address)
{
CSerial Serial;
char read_BUFFER;
CString strtemp;
if(Serial.Open(m_com,9600))
{
Serial.SendData(&ENQ_request,1);
Sleep(100);
Serial.ReadData(&read_BUFFER,1);
if(read_BUFFER==ACK)
{
//初始化变量
//发送命令格式代码
ASCII(Sum_Check,sum); //将STX-ETX之间的字符相加,转换成ASCII(十六进制),并取和的低二位数
for(i=0;i<2;i++)
Serial.SendData(&Sum_Check[i],1);//和校验
Sleep(100);
Serial.ReadData(&read_buffer,1);
if(read_buffer==ACK)
return TRUE;
else
return FALSE;
}
}
}
(5) 位元件强制OFF操作
操作对象元件:PLC内部的X、Y、M、S、T、C元件;命令格式所示。

4 实时通讯控制界面
本程序能够实现远程控制FX系列PLC的运行。能读取位元件的当前状态,以及对它们置位和复位。能够读取字元件的值和往字元件写值。并能自动连续读取单个字元件的值。

通讯界面
5 结论
本程序实现了上位机对三菱PLC的实时监控,传送数据准确,这种通信方法不仅成本低,而且简单、稳定、实用性强。

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!