您现在的位置是:首页 > 变频技术 > 变频技术
VFD -B系列变频器的分布串行通信系统
来源:艾特贸易2017-06-04
简介1 .系统的总体设计 图 7-11 为系统的总体设计方框图,采用 ADAM - 4520 转换模块,一端可以直接插在计算机串口上;另一端提供一个半双工的 RS - 485 接口,而不需要握手信号。其内置的
1.系统的总体设计 图7-11为系统的总体设计方框图,采用ADAM - 4520转换模块,一端可以直接插在计算机串口上;另一端提供一个半双工的RS - 485接口,而不需要握手信号。其内置的特殊的I/O电路可以自动控制信号的传输方向。这种RS - 485控制对用户是完全透明的,为RS一232编写的软件可以不加修改地用在这里。 该模块需要外加一个10~ 30V直流电源,可以隔离3000V的高电压。传输速率达到115.2kb/s。 2.台达变频器通信协议 VFD -B系列变频器具内建RS-485串联通信界面,串联通信埠(SG+,SG -)位于控制回路端子,端子定义如下: SG+:信号正端;SG-:信号负端。 使用RS - 485串联通信界面时,每一台VFD -B必须预先在Pr. - 78(参数78)指定其通信位址,计算机便根据其个别的位址实施控制。另外,计算机可控制命令码中“A”设定为02H可同时对所有连线的变频器进行控制。 协议格式:比特率(传输速率,b/s)设定范围:1200,2400,4800(Pr.- 77),每一个字节以11个位表示,采用奇校验。字节格式如表7-5所示。 表7-5 协议字节格式
通信格式:包括控制指令、参数设定指令、参数读取指令以及交流电动机驱动器状态读取指令。 图7-11中工控PC机通过ADAM4520(RS-232转RS-485)与多个变频器相连接,最多可达到32台(可通过中断器扩展到254台)。每个变频器被赋予各自的地址码用以识别身份,这样上位机便能通过485通信线对挂在上面的所有变频器进行控制操作。
图7-11 系统的总体设计方框图 对于台达VFD-B系列变频器通信协议遵守MODBUS asci(American Standard Code for Infor-mation Interchange)模式,通信方式为RS-485,波特率最高可达到38400 b/s,通信资料格式可自设定,本系统设定为(7,N,2 for ASCII)。变频器发送、接收控制的通信协议如表7-6所示。 表7-6 变频器发送、接收控制的通信协议
若功能码为03H,即读出寄存器内容,比如询问信息字串格式如下: “:01 03 2102 0002D7”CRLF 则回应讯息字串格式就为: “:01 03 04 1770 0000 71”CRLF 这里表示对于变频器位址为01H,读出2个连续于寄存器内的资料内容如下表示:起始寄存器位址2102H,结果为1770H(60.00Hz): 若功能码为06H,表示写入一个word至寄存器,比如对于变频器位址01H,写入6000(1770H)至变频器内部设定参数0100H(其询问讯息字串格式与回应讯息字串格式相同)。 “:01 06 0100 1770 71”CRLF 因此,对于变频器能通过面板按键设置的功能,通过以上的通信协议也一样能实现。通过ADAM4520的RS-485通信线能同时控制多台变频器,同时各变频器的运行状态和内部设定参数也能实时地回送给上位机或者通过上位机进行修改,这就大大方便了用户,增加了控制系统的灵活性。 3.Visual C++6.0下对变频器进行串行通信控制 (1)串口初始化。在Win98环境下提供了完备的API应用程序接口函数,程序员通过这些函数与通信硬件接口。通信函数是中断驱动的:发送数据时,先将其放入缓存区,串口准备好后,就将其发送出去;传来的数据迅速申请中断,使Windows接收它并将其存入缓冲区,以供读取。用户编写串口通信程序实现如图7-12所示的流程。
图7-12 串行通信编程步骤 初始化程序代码如下: hCom= CreateFile("COM2", GENERIC_READ | GENERJC_WRITE,0,NULL, OPEN_EXISTING, FILE_AITRIBUTE_NORMAL, NULL);//用于打开通信资源 if( hCom= INVALID_ HANDLE_ VALUE) MessageBox (hWnd,“打开COM2失败”,“Mylpc", MB_OK); SetupComm (hCom, 1024, 1024);//用于设置输入输出队列的大小 GetCommState (hCom, &dcb);//获得端口参数当前配置 dcb. BaudRate= 9600;//设置波特率 dcb. ByteSize=7;//设置数据位 dcb. Parity=0;//设置无校验 dcb. StopBits=2;//设置停止位数 SetCommState (hCom, &dcb);//设置端口 PurgeComm (hCom, PURGE_TXCLEAR);//清发送缓冲区 PLrrgcomm (hCOm, PURGE_RXCLEAR)://清接收缓冲区 (2)串行通信程序。读变频器各个参数的数值并作相应处理,用以显示在屏幕上监视变频器的状态,譬如频率指令(F),输出频率、输出电流、DC-BUS电压等,还可以读变频器内部设定参数00-00~ 11-04等。下面是读变频器参数的相应子程序[其中lrc_chk()函数为自定义的计算信息检查码的子函数]。 Unsigned int readinf (short int number, int address, HDC hdc) {int numl, num2; sprintf (str,“%2x”,number); //送变频器号数 sendbuf[0]=“:”; sendbuf[1]=(isspace (str [0]? "0": str[0]); sendbuf[2]=(isspace (str[0]? "0": str[1]); sendbuf [3]="0"; sendbuf [4]="3"; sprintf (str, "%4x", address); //送变频器参数地址 sendbuf[5]=(isspace (str[0]? "0": str [0]); sendbuf [6]=(isspace (str[0]? "0": str [1]); sendbuf [7]=(isspace (str [0]? "0": str[2]); sendbuf [8]=(isspace (str [0]? "0": str [3]); sendbuf [9]="0"; sendbuf [10]="0"; sendbuf[11]="0"; sendbuf [12]="2"; Lrc - chk (sendbuf); WriteFile (hCom, sendbuf, 17, &dwLength, NULL);//送读信息字串17个 ClearCommError (hCom, &dwEvtMask, &comState), …,//具体程序处理代码 retum (1); } 写变频器的参数与上述类似,只是功能码03H改成06H,以下是它的子函数: unsigned int writeinf (short int number, int address, int data sendbuf[17]) { sprintf (str, "%2x", number); sendbuf[0]=“:”; sendbuf[1]=(isspace (str [0]? "0": str[0]); sendbuf [2]=(isspace (str [0]1 "0": str[1]); sendbuf[3]="0"; sendbd [4]="6"; sprintf (str,“%4x”,address); sendbuf [5]=(isspace (str[0]? "0": str[0]); sendbuf [6]=(isspace (str [1]? "0": str[1]); sendbuf [7]=(isspace (str [2]? "0": str [2]); sendbuf[8]=(isspace (str [3]? "0": str [3]); sprintf (str,“%4x”,dada); sendbuf[9]=(isspace (str[0]? "0": str[0]); sendbuf[10]=(isspace (str[1]? "0": str[1]); sendbuf[11]=(isspace (str [2]? "0": str [2]); sendbuf [12]=(isspace (str [3]? "0": str [3]); lrc - chk (sendbuf); WriteFile (hCom, sendbuf, 17, &dwLength, NULL);//送写信息字串17个 Retum (1); } 在主程序中调用读函数,读变频器命令参数和内部设定参数并作相应处理,在屏幕上显示、判断或报警,调用写函数可以通过上位机改写变频器命令参数和内部参数。 本节利用VC++6.0的C模式编程和API函数实现与变频器的全部串行通信,完成了在Windows98环境下用工控PC机控制多台变频器的任务,即分布式变频调速系统。整个控制系统灵活方便,具有很大的实用性。