收藏 分享(赏)

VC环境下三菱PLC系列与微机的串行通信.docx

上传人:scg750829 文档编号:7231069 上传时间:2019-05-10 格式:DOCX 页数:8 大小:32.20KB
下载 相关 举报
VC环境下三菱PLC系列与微机的串行通信.docx_第1页
第1页 / 共8页
VC环境下三菱PLC系列与微机的串行通信.docx_第2页
第2页 / 共8页
VC环境下三菱PLC系列与微机的串行通信.docx_第3页
第3页 / 共8页
VC环境下三菱PLC系列与微机的串行通信.docx_第4页
第4页 / 共8页
VC环境下三菱PLC系列与微机的串行通信.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

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

2、1 所示。数据以帧为单位发送和接收。一个多字符帧由图 1 所示的五部分组成,其中和校验值是将命令码 STXETX 之间的字符的 ASCII 码(十六进制数)相加,取得所得和的最低二位数。STX 和 ETX 分别表示该字符帧的起始标起和结束标志。(1) 起始字元(STX):ASCII 码的起始字元 STX 对应的 16 进制数位 0x02。无论命令信息还是回应信息,它们的起始字元均为 STX,接收方以此来判知传输资料的开始。(2) 命令号码:为两位 16 进制数。所谓命令号码是指上位机要求下位机所执行的动作类别,例如要求读取或写入单点状态、写入或读取暂存器资料、强制设定、运行、停止等。在回应信息

3、中,下位机会将上位机接收到的命令号码原原本本的随同其它信息一同发送给上位机。(3) 元件首地址:对应要操作的元件的相应的地址。如从 D123 单元中读取数据时,要把它对应的地址:0x10F6 发送给 PLC。(4) 元件个数:一次读取位元件或字元件的数量。(5) 结束字元(ETX):ASCII 码的结束字元 ETX 对应的 16 进制数为 0x03。无论命令信息还是回应信息,它们的结束字元均为 ETX,接收方以此来判知此次通讯已结束。 (6) 校验码(Checksum):校验码是将 STX-ETX 之间的 ASCII 字元的 16 进制数值以“LRC(Longitudinal Redundan

4、cy Check)” 法计算出 1 个 Byte 长度(两个 16 进制数值 00-FFH)的校验码。当下位机接收到信息后,用同样的方法计算出接收信息的校验码,如果两个校验码相同,则说明传送正确。FX2 系列与计算机之间的通信是以主机发出的初始命令,PLC 对其做出响应的方式进行通信的。共有 0、1 、7 、8 四种命令,上位机实现对 PLC 的读写和强行置位。通过 ENQ、ACK 和 NAK,上位机协调与 PLC 的通信应答。2 编程口操作命令类型 串行通信是计算机与其他机器之间进行通信的一种常用方法,在 Windows 操作系统中提供了实现各种串行通信的 API 函数。通过 SC-09 编

5、程电缆或 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 函数中进行了

6、进一步的完善。它由 MuMega Technologies 公司提供的一个 Visual C+类,我们只要理解 CSerial 类种的几个成员函数,就能很方便地实现串行通信了。以下是该类定义:class CSerialpublic: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 Read

7、DataWaiting( 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 函数关闭通信端口。 CSe

8、rial:SendData 函数把数据从一个缓冲区写到串行端口。第一个参数是缓冲区指针,其中包含要被发送的资料;第二个参数是发送的字节数。 CSerial:ReadData 函数从断口接收缓冲区读入数据。第一个参数是缓冲区指针,资料将被放入该缓冲区;第二个参数缓冲区的大小。(2) 位元件或字元件状态读操作操作对象元件:PLC 内部的 X、Y、M、S、T 、C 、D 元件;命令格式如表 1;在发送完上述命令格式代码后,就可以读取 PLC 响应信息了。响应信息格式如图 2; 部分程序代码:BOOL CPlcComDlg:ReadPLC(char *Read, char *address, int

9、bytes)CSerial Serial;char read_BUFFER;if(Serial.Open(m_com, m_Buad, m_Parity, m_Byte, m_StopBites)Serial.SendData(/发送联络讯号Sleep(100);Serial.ReadData(/读取 PLC 响应讯号if(read_BUFFER=ACK)/初始化变量/发送图 2 命令格式代码ASCII(readdatasum_check,readdata_sum);/将 STX-ETX 之间的字符相加,转换成 ASCII(十六进制),并取和的低二位数。if(*readdatasum_CHEC

10、K=*readdatasum_check)/和校验 /对读出的数据进行处理,转换成整型数 for(int j=0;j0x39)?(Readi-0x41+0xA):(Read i-0x30);Read_valuej=(Read j*4+24) total_databytes0=(uTmp10)?(uTmp+0x30):(uTmp+0x41-0xA);(3) 位元件或字元件状态写操作操作对象元件:PLC 内部的 X、Y、M、S、T 、C 、D 元件;命令格式如图 3 所示。程序代码(略)。(4) 位元件强制 ON 操作操作对象元件:PLC 内部的 X、Y、M、S、T 、C 元件;命令格式如图 4

11、所示。部分程序代码如下:void CPlcComDlg:ForceOnOpreation(char *Address)CSerial Serial;char read_BUFFER;CString strtemp;if(Serial.Open(m_com,9600)Serial.SendData(Sleep(100);Serial.ReadData(if(read_BUFFER=ACK) /初始化变量/发送图 4 命令格式代码ASCII(Sum_Check,sum); /将 STX-ETX 之间的字符相加,转换成 ASCII(十六进制),并取和的低二位数for(i=0;i2;i+)Serial.SendData(/和校验Sleep(100);Serial.ReadData(if(read_buffer=ACK)return TRUE;elsereturn FALSE;(5) 位元件强制 OFF 操作操作对象元件:PLC 内部的 X、Y、M、S、T 、C 元件;命令格式如图 5 所示。4 实时通讯控制界面本程序能够实现远程控制 FX 系列 PLC 的运行。能读取位元件的当前状态,以及对它们置位和复位。能够读取字元件的值和往字元件写值。并能自动连续读取单个字元件的值。http:/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报