- 发布
- 浔之漫智控技术-西门子PLC代理商
- 手机
- 15221406036
- 发布时间
- 2023-12-13 21:36:25
6ES7231-7PB22-0XA8程序安装
1 引言
在变频器和PLC集成应用领域,通常需要根据现场某个变量自动控制变频器的运转频率。纺织工艺加湿系统便是一个典型的例子。在以往的设计中,一般是通过模拟量输出模块来控制变频器的运转频率的。但是该方法成本昂贵,而且模拟量模块输出的4-20mA电流信号容易受到外界的干扰。为此,我们在应用三菱系列自动化产品时,利用三菱PLCRS无协议通讯功能来替代模拟量模块,取得了事半功倍的实效。由于三菱PLC只有一个可用的编程口,如果要进行无协议通讯,需要在PLC上面扩充一个485-BD模块。该模块支持无协议通讯、并行连接、网络连接等多种通讯方式。本文讨论无协议通讯在PLC和变频器之间的应用。
2 系统方案
加湿器广泛应用于纺织行业,是纺织工艺的后一个环节,它将水泵tisheng的液体切割成雾状后,均匀地喷洒在布匹等织物的表面,主要是增加布匹的光泽和柔韧性。它的电气方面主要有编码器,三菱FX1N-20MR,FX1N-485BD,HITECH人机,变频器等。它是利用编码器和PLC测量布匹的卷取速度,然后根据卷取速度的快慢来控制变频器的运转频率来达到控制水泵的liuliang,进而控制喷洒在布匹等织物表面的液量。通过RS485-BD模块进行PLC和变频器之间的无协议通讯,根据卷取速度的快慢将运转频率自动写入变频器中。而人机则主要完成系统的启动、停止、参数设定等功能。RS485-BD模块的接线参见图1。
图1 RS485-BD模块接线
图1中,通讯线一定要使用屏蔽双绞线,RS485-BD侧的屏蔽线一定要接地(100Ω)。
R为终端电阻。RDA和RDB以及SDA和SDB之间的电阻为110Ω(半双工方式)。详细说明见《FX系列通讯用户手册》。
3 无协议通讯参数设定
无协议通讯参数主要由特殊数据寄存器D8120设定,具体设置如附表所示。
附表 特殊数据寄存器D8120参数设定
附表中:
D8120详细说明请参照485-BD模块使用手册。
变频器参数设定具体参照三菱变频器FR-E500使用手册。
4 通讯程序
图2为三菱FX系列PLC和三菱E系列变频器通讯程序。RS无协议通讯指令详细说明请参照《FX硬件手册和编程手册》
可编程控制器(PLC)是集计算机技术、自动控制技术、通信技术为一体的新型自动控制装置。由于体积小、可靠性高以及组态灵活等优点,PLC在工业控制领域得到了广泛的应用。将PC机与可编程控制器组合起来,充分利用PC机强大的人机接口功能、丰富的应用软件和低廉的价格来共同实现管理、控制一体化成为一个新的发展趋势。本文重点介绍在bbbbbbs 2000环境下如何利用VC来实现PC机与三菱PLC之间的串行通讯。
1 三菱PLC与计算机之间通信协议
FX2系列PLC与计算机之间的通信采用RS-232标准,其传输速率固定为9600bps,奇偶校验位采用偶校验。数据格式如表1所示。数据以帧为单位发送和接收。一个多字符帧由图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 编程口操作命令类型
串行通信是计算机与其他机器之间进行通信的一种常用方法,在bbbbbbs操作系统中提供了实现各种串行通信的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响应信息了。响应信息格式如图2;
部分程序代码:
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(&EN,1);//发送联络讯号
Sleep(100);
Serial.ReadData(&read_BUFFER,1);//读取PLC响应讯号
if(read_BUFFER==ACK)
{
//初始化变量
//发送图2命令格式代码
ASCIi(readdatasum_check,readdata_sum);
//将STX-ETX之间的字符相加,转换成ASCII(十六进制),并取和的低二位数。
if(*readdatasum_CHECK==*readdatasum_check)//和校验
{
//对读出的数据进行处理,转换成整型数
for(int j=0;j