|
闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柛顐f礀缁犵娀鏌熼崜褏甯涢柛濠傜埣閺屾盯顢曢悩鎻掑缂佺偓鍎抽…鐑藉蓟閻旂厧绀堢憸蹇曟暜濞戙垺鐓熼柟鎯ь嚟濞叉挳鏌$仦鍓ф创妞ゃ垺娲熼、鏇綖椤撶姷娉块梻鍌欐祰椤曆勵殽韫囨洘宕叉繝闈涱儏閽冪喖鏌ㄥ☉妯侯仱闁稿鎹囬弫鎰償濠靛牏娉块梻浣告惈濡盯宕戦妶澶婅摕闁绘梻鈷堥弫宥嗙箾閹寸偟鎳愭俊顐㈠暙铻栭柣姗€娼ф禒锕傛煥濮樿埖鍋傞柕鍫濇川绾捐棄霉閿濆牏鏌堢紓鍌涚閵囧嫰鍩為崹顔碱瀳闂佸疇顫夐崹鍧楀极瀹ュ绀嬫い鎰ㄥ墲濠⑩偓闂傚倷鑳舵灙閼峰酣鏌涢妷鎴濇媼閸炵敻姊绘担鑺ョ《闁革綇绠撻獮蹇涙晸閿燂拷
|
缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳婀遍幉鎼佹偋閸繄鐟查梺绋款儏椤戝棛鎹㈠┑鍥╃瘈闁稿本绮岄。娲⒑缂佹ɑ灏扮紒璇茬墦瀵濡搁埡鍌氫簽闂佺ǹ鏈粙鎴︻敂閿燂拷
|
IC
|
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偞鐗犻、鏇㈡晝閳ь剛绮婚悩鑽ゅ彄闁搞儯鍔嶉幆鍫ユ煠閺夋寧鍋ラ柡灞剧洴閺佸倻鎷犻幓鎺旑啋缂傚倷璁查崑鎾斥攽閻樺弶澶勯柛濠勬暬閺屻劌鈹戦崱娑扁偓妤€顭胯濠㈡﹢鍩ユ径鎰鐎规洖娉﹁閺岋紕浠︾拠鎻掝潎闂佽鍠撻崐婵嗙暦閹烘垟妲堟慨妤€妫旂槐锟�
|
缂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愪粙鏌ㄩ悢鍝勑㈢紒鎰殕娣囧﹪濡堕崒姘闂備椒绱徊浠嬪床閼煎墎浜芥繝鐢靛仜濡盯宕戦幘鎵挎帡鏁撻敓锟�
|
濠电姷鏁告慨鐑藉极閹间礁纾婚柣鎰惈閸ㄥ倿鏌涢锝嗙缂佺姴缍婇弻宥夊传閸曨剙娅i梺娲诲幗椤ㄥ﹪寮诲☉銏犵疀闂傚牊绋掗悘渚€姊洪柅鐐茶嫰婢ь噣鏌涙繝鍌涘仴鐎殿噮鍋婇獮妯肩磼濡粯顏熼梻浣芥硶閸o箓骞忛敓锟�
|
闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柤鍝ユ暩娴犳氨绱撻崒娆掑厡缂侇噮鍨堕妴鍐川閺夋垹鍘洪梺鍝勫€哥花鍗炍i崼銉︾厪闊洤艌閸嬫捇宕楅崨顔间簼闂傚倸鍊峰ù鍥р枖閺囥垹闂柨鏇炲€哥粻顖炴煥閻曞倹瀚�
|
闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏇炲€归崕鎴犳喐閻楀牆绗掗柛銊ュ€婚幉鎼佹偋閸繄鐟查梺绋匡龚閸╂牠骞堥妸銉庣喓鎹勯妸褏鍕樺┑鐘愁問閸犳绻涙繝鍥ц摕闁靛ň鏅滈崑鍡涙煕鐏炲墽鈽夋い蹇ユ嫹
|
闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柛鎾茬劍閸忔粓鏌涢锝嗙闁汇倝绠栭弻锝夊箛椤撶姰鍋為梺鍝勵儏缁夊綊寮婚妸銉㈡斀闁糕檧鏅滆倴闂備線鈧偛鑻崢鍝ョ磼閼搁潧鍝虹€殿噮鍋婇獮妯肩磼濡粯顏熼梻浣芥硶閸o箓骞忛敓锟�
|
闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏇楀亾妞ゎ亜鍟村畷褰掝敋閸涱垰鏁搁梻渚€鈧偛鑻晶鎵磼鏉堛劌娴鐐存崌楠炴帒鈹戦崼婵囧€梺璇叉唉椤煤濡厧鍨濋柟鎹愵嚙閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓
|
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偞鐗犻、鏇㈡晝閳ь剟鎮块鈧弻锝呂旈埀顒勬偋婵犲洤鐭楅煫鍥ㄧ⊕閻撶喖鏌熸潏鍓хɑ妞ゃ儱顦甸弻娑橆潩椤掑倻楔闂佸搫琚崝鎴﹀箖閵堝纾兼繛鎴烇供娴硷拷
|
婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柟闂寸绾惧鏌i幇顒佹儓闁搞劌鍊垮濠氬醇閻斿墎绻侀梺鎼炲€栧ú鐔煎箖鐟欏嫨鍋婇悷浣靛€愰崑鎾诲焵椤掑嫭鐓涢悗锝庝簽鏁堥梺鍝勮閸旀垿骞冮妶澶婄<婵炴垶锕╂导锟�
|
闂傚倸鍊峰ù鍥敋瑜嶉湁闁绘垼妫勯弸浣糕攽閻樺疇澹樼痪鎹愵嚙閳规垿鎮╅崣澶嬫倷缂備焦鍔栭〃鍡樼┍婵犲洤围闁告侗鍘藉▓銊╂⒑缂佹ê绗掗柨鏇ㄤ邯瀵濡搁埡鍌氫簽闂佺ǹ鏈粙鎴︻敂閿燂拷
|
缂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗銆掑锝呬壕闂佽鍨伴惌鍌氱暦閹烘垟鍫柛娑卞灲缁辫櫕绻濆▓鍨灍閺嬵亪鏌涢埡鍌滃⒌鐎规洘娲栭鍏煎緞鐎n剙寮抽梻浣虹帛濞叉牠宕愰崷顓涘亾濮樼偓瀚�
|
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗ù锝堟缁€濠傗攽閻樻彃鈧绱撳杈ㄥ枑闁哄啫鐗勯埀顑跨窔瀵粙顢橀悙鑼垛偓鍨攽閿涘嫬浠х紒顕呭灦瀵偊鎮╃紒妯锋嫼闂備緡鍋嗛崑娑氱矓閻㈢鍋撳鐐
|
|
闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柛鎾茬閸ㄦ繃銇勯弽顐粶闁哄嫨鍎甸弻娑㈩敃閻樻彃濮庨梺绋胯閸斿矂婀侀梺缁樏Ο濠囧磿韫囨洜纾奸柣妯挎珪缁跺弶銇勯鐐村仴闁硅櫕绮撳Λ鍐ㄢ槈濮楀棙缍嬮梻鍌氬€搁崐鎼佸磻閸℃稑鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷
|
闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏇炲€归崕鎴犳喐閻楀牆绗掗柛銊ュ€块弻锕€螣娓氼垱小缂傚倸鍊瑰銊╁箟閸涘﹥鍎熼柕濞垮劤閻ゅ嫰姊洪棃娴ュ牓寮插☉銏″亗婵炴垯鍨洪悡鏇㈡倶閻愭彃鈷旈柍钘夘槹閵囧嫰顢曢鍌滅槇濠殿喖锕ㄥ▍锝夊箲閸曨垰惟闁靛濡囪ぐ姘舵⒒娴g儤鍤€闁搞倖鐗犻獮蹇涙晸閿燂拷
|
LED闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃繘骞戦姀銈呯婵°倐鍋撶痪鎯ф健閺岀喐娼忛崜褏鏆犵紓浣哄閸ㄥ爼寮婚妸鈺傚亞闁稿本绋戦锟�
|
闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柛鎾茬閸ㄦ繃銇勯弽銊х煁闁哄棙绮撻弻鐔兼倻濮楀棙鐣烽梺鍝勬噺缁诲牓寮婚弴鐔风窞闁割偅绻傛慨澶愭⒑鐞涒€充壕闂佹寧娲栭崐褰掓偂閸愵亝鍠愭繝闈涱儏缁狀垶鏌ㄩ悤鍌涘
|
您现在的位置: 华玉生活网 >> 技术文库 >> 电源 >> 正文>> 繁体中文

基于VC环境的变频器联网控制

摘要:变频器是工业自动化系统中的基本拖动设备。当应用环境非常恶劣,不适合于人在现场对变频器直接进行控制时就需要对变频器进行远程控制。主要介绍了如何用VC编写控制软件对变频器进行联网控制。

0    引言

    变频器是工业自动化系统中的基本拖动设备,通常用于控制交流电机的转速和转向。如果变频器的工作现场环境比较恶劣,不适合于人在现场对变频器进行控制,那么就需要对变频器进行远程的联网控制。

1    基本组成

    将变频器的RS485串口通过RS232/485转换器连接到计算机的串口组成网络,这个网络系统主要由三部分组成。

    第一部分是变频器的网络功能部分,包括硬件和软件两部分。硬件部分是变频器控制板上CPU的串口经过RS485转换芯片(如MAX485)对外形成的一个RS485接口,通过这个接口可以将变频器接进控制网络。软件部分是变频器的通信程序。通过这个通信程序可使变频器在接收到计算机的下达指令后,根据指令做出相应的应答和动作。变频器上的通信程序主要包括串口初始化程序、命令读取和发送程序、命令判断程序及命令集。

    第二部分是计算机控制程序。这个程序有人机对话功能,对变频器的状态可以进行远程监视与控制,对变频器的参数能进行修改。总之,人在现场可以对变频器进行的操作在这个控制软件上都应该可以实现。

    第三部分是通信协议。这是计算机与变频器之间进行通信的依据。变频器的通信软件和计算机的控制软件都是按照这个通信协议所规定的信息格式进行编写的。

    由这三部分构成的变频器远程控制网络就可以完成所希望的变频器远程控制功能。变频器远程控制网络组态图如图1所示。

图1    变频器远程控制网络组态图

2    在VC环境下编写计算机控制软件

    用VC编写的计算机控制软件的主界面选用单文本界面,并且带Windows浏览窗口,界面的基类选用CFormView类。主界面显示了所控制的网络中变频器的构成及地址。各个变频器的详细信息显示选用了CpropertyPage类作对话框。CpropertyPage类是从Cobjec类一路继承发展而来,可以被看作是标签对话框。控制软件为各个变频器显示了两个方面的详细信息:一个是变频器的功能码信息,另一个是变频器的远程控制和当前状态。这两方面信息的显示每个都是用CpropertyPage类对话框。对于变频器的功能码显示,由于变频器的功能码由很多组构成,而且显示要求分组进行,所以应用Tab控件来进行分组选择切换。对于变频器的远程控制和当前状态界面我们调用了一些Text、Edit和Button控件。这些控件通过消息〔如BN_CLICKED,UpdateData(TRUE)等信息〕与相应的子程序相关联。一旦我们对变频器进行控制动作或程序收到变频器的反馈信息,界面就会有相应的变化。整个控制软件的程序流程如图2所示。

图2    控制软件程序流程图

    从流程图上可以看出控制软件要求能不断地得到联网变频器的状态,这就要求控制软件不停地下发变频器的状态查询指令。这个功能通过在程序里设定了一个计时器SetTimer(1,10000,NULL)完成。定时器使控制软件每10s对变频器进行一次状态查询,检查变频器是否在线。如果在线就会反映这个变频器当前的各种状态,如果不在线会有相应的提示信息显示。计算机与变频器组网时软件的主界面图如图3所示。

图3    控制软件的主界面图

    控制软件界面上显示的网络信息和各个变频器的参数信息都要配合相应的数据库才能完成。而对于网络中各个变频器状态信息的获得则要通过计算机串口上传至现场的变频器运行数据实现。下面就分别介绍控制软件是如何对数据库和计算机串口进行操作的。

3    应用DAO技术操作数据库

    数据库是现代计算机应用的一个重要组成部分,是人们有效地进行数据存储、共享和处理的工具。有两种主要的数据库类型,即平面数据库和关系数据库。简而言之,平面数据库是一组记录的集合,数据库中的每一个记录都是由字段构成的,第一个字段则包含了与本条记录相关的特定信息。

    而关系数据库就像是由若干个平面数据库连接在一起形成的。采用关系数据库能够建立一个记录集合与另一个记录集合之间的关系。在关系数据库中,每一个记录集合称为一张表,表之间的连接是通过关键字实现的,关键字用来确定一条记录的值。

    这个控制软件的数据库使用的是平面数据库。数据库中存储了变频器网络的信息和网络中各个变频器的参数。数据库用Access建立,应用DAO作为数据库的访问接口。Microsoft Jet为像Access和Visual Basic这样的产品提供了数据引擎。DAO是使用Microsoft Jet数据库引擎来访问数据库的。VisualC++6.0提供了对DAO的封装,MFCDAO类封装了DAO的大部分功能,从而使VC程序可以使用MFCDAO类方便地进行数据库访问。

    下面具体叙述是如何利用数据库完成软件的网络控制功能。首先用Access建立变频器网络的信息表,然后程序中建立一个基类为CdaoRecordset(DAO中封装的一个类)的类Cdata,该类与数据库中的变频器网络信息表相联系。当要在网络中添加一个变频器时,不仅要在变频器网络信息表上进行添加数据操作,还要在数据库中添加一个关于该变频器功能码的新表。对变频器网络信息表的添加操作用了一个CdaoRecordset类数据库指针m_leftptr。CdaoRecordset类是对DAO记录集对象的封装,代表从数据源中选择的一种记录,管理数据库中表里记录的操作。而要在数据库中添加一个新增变频器功能码的新表,需要设定一个CdaoDatabase类的变量。CdaoDatabase类是对DAO数据库对象的封装,它代表了一个数据库连接,管理数据库的操作和数据库中表的操作。下面是网络中添加一个变频器时对数据库的操作程序。

    CComzDoc*pDoc=(CComzDoc*)GetDocument();

    m_leftptr=&pDoc->m_Docptr;

    CAddNodeDlgm_addnode;

    if(m_addnode.DoModal()==IDOK)

    {

        m_leftptr->Open();

        m_leftptr->AddNew();

        m_leftptr->m_NodeAddress=

        m_addnode.m_adddress;

        m_leftptr->m_NodeName=

        m_addnode.m_addnodename;

        m_leftptr->m_NodeOrderCalled=

        m_addnode.m_comturn;

        m_leftptr->Update();

        m_leftptr->Close();

        CDaoDatabasem_pDatabase;

        m_pDatabase.Open("ConverterPc

        97.mdb");

        CDaoTableDeftable(&m_pDatabase);

        table.Create(m_addnode.m_addnodename);

        table.CreateField("AutoIndex",dbInteger,2);

        table.CreateField("ParaGroup",dbText,10);

        table.CreateField("ParaNo",dbInteger,2);

        table.CreateField("ParaName",dbText,100);

        table.CreateField("ParaDefaultVal",dbInteger,2);

        table.CreateField("ParaCoefficient",dbInteger,2);

        table.CreateField("ParaDW",dbText,10);

        table.CreateField("ParaModif",dbInteger,2);

        table.CreateField("ParaMemo",dbText,255);

        table.Append();

        m_pDatabase.Close();

    }

    添加完成后,该变频器如果在线就完成初始化数据库命令,初始化变频器的功能码。在软件上显示变频器功能码数据库如图4所示。

图4    变频器功能码

    对控制软件的数据库中表的删除及表中记录的删除和更新操作所采用的DAO类是一样的,只是使用的指令不同,这里就不再赘述。变频器功能码表中的具体数据,要通过串口通信从相应的变频器中获得,这就要用到VC对计算机串口编程。

4    计算机串口通讯编程

    对于VC的计算机串口通信编程可以用多种方法实现。MSComm控件通过串行端口传输和接收数据,因此,可在编写计算机串口通信程序时使用MSComm控件。MSComm控件使用时比较方便,只要完成简单的串口初始化设置,然后调用相应的读写函数即可完成计算机串口通信操作。但是,使用MSComm控件在设置通信参数时是成批进行的,即数据传输速率、奇偶校验、数据位数和停止位数是作为一个参数进行设置的。这样使通信参数的设置和修改不太灵活自如,因此,不采用MSComm控件进行串行通信编程。利用Windows通信API函数进行串口通信编程可以非常灵活地进行串口参数的配置,但编程非常复杂,专业化程度较高,因此也没有采用。利用VC的标准通信函数inp,inpw,inpd,outp,outpw,outpd等直接对串口进行操作编程需要对硬件电路的结构原理非常了解,但这里并不需要对计算机的串口电路非常了解,因此同样没有采用。最终程序中应用的是第三方编写的串行通信Cserial类。下面对CSerial类进行解释。

    CSerial::CSerial是类构造函数,不带参数,负责初始化所有类成员变量。

    CSerial::Open是打开通信端口的成员函数,带两个参数,一个是串行端口号,另一个是波特率。

    CSerial::Close是关闭通信端口的成员函数。类析构函数调用这个函数,因此可不用显式调用这个函数。

    CSerial::SendData函数把数据从一个缓冲区写到串行端口。它所带的第一个参数是缓冲区指针,其中包含要被发送的资料。这个函数返回一些到端口的实际字节数。

    CSerial::ReadDataWaiting函数返回等待在通信端口缓冲区中的数据,不带参数。

    CSerial::ReadData函数从端口接收缓冲区读入数据。第一个参数是缓冲区指针,第二个参数是个整数值,给出缓冲区的大小。

    将CSerial.cpp和CSerial.h添加入源程序,在串口通信程序部分调用CSerial类的函数,可以很方便地完成通信功能。下面是在程序中用CSerial类编写通信程序,完成的功能是按既定的通信协议向变频器网络下传查询指令,并接收从站返回的信息。如果连发三次都没有接收到变频器的应答信息就显示变频器为离线状态。

    CSerialSerial;

    inti;

    CStringm_mes;

    Unsignedcharsend[14]={0x02,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x80,0x00,0x00,0x00};

    for(i=1;i<=m_slname;i++)

    {

        send[2]=i;

        unsignedcharu=send[0];

        for(intl=1;l<13;l++)

        {

        u=u^send[l];

    }

    send[13]=u;

    showaf=send[10];

    if(Serial.Open(m_port,m_baudrate))

    {

        Serial.SendData(send,14);

    }

        Sleep(200);

    if(Serial.ReadDataWaiting())

    {

        Serial.ReadData(recieve,14);

    }

    else

    {

        Serial.SendData(send,14);

        Sleep(200);

    if(Serial.ReadDataWaiting())

    {

        Serial.ReadData(recieve,14);

    }

    else

    {

        Serial.SendData(send,14);

        Sleep(200);

        if(Serial.ReadDataWaiting())

        {

        Serial.ReadData(recieve,14);

        }

    else

      {

        m_mes.Format("%disoffline",i);

        m_recc.InsertString(-1,m_mes);

        }

      }

    }

    在与变频器的通信中要求计算机的串口号和通信速率是可变的。Open函数的两个参数就是计算机的串口号和通信速率,在调用该函数初始化串口时,将这两个参数按所希望的数赋值就可以正常通信了。如果要修改这两个参数,只要将修改值赋给这两个参数的变量,再调用一次Open函数从新初始化计算机串口即可。在Open函数中仅初始化了串口号、通信速率和8位数据位这三个参数,其它参数采用上一次串口初始化形成的参数数据。但是,在通信中还要求传送的数据为二进制数据、偶校验和有1位停止位,这就要求对Open函数进行修改。对Open函数的修改主要是对其中设备控制快(DCB)的修改。只要将旧的DCB结构改写为以下结构即可。

    GetCommState(m_hIDComDev,&dcb);

    dcb.BaudRate=nBaud;

    dcb.ByteSize=8;

    dcb.fParity=1;

    dcb.fBinary=1;

    dcb.Parity=EVENPARITY;

    dcb.StopBits=ONESTOPBIT;

    经过上述修改后,用Open函数初始化的串口就符合传送二进制数、偶校验、8位数据位、1位停止位和波特率及端口可变的要求,计算机可以和变频器进行正常的通信了。

5    组网实验

    远程控制软件完成后进行组网实验。网络上用一台计算机连接两台变频器,对其中一台变频器执行正转起动到30Hz的控制命令,软件控制界面显示如图5所示。

图5    变频器器起动控制界面

6    结语

    本文主要介绍了实现变频器远程网络控制的计算机控制软件如何编写。从软件的功能框架,数据库的操作和计算机串口通信3个方面进行了阐述,详细说明了在VC环境下来编写合乎我们要求的控制软件的方法,具有一定的实际参考价值。

 


  • 扩展阅读
  • 上一个文章:
  • 【返回网站首页】 【返回电源】
  • 下一个文章:
  • 【字体: 】【】【发表评论】【加入收藏】【告诉好友】【打印此文
    文章 软件 电影 商品

    相关文章

    本站公告

    • 扫一扫,打赏给我们,谢谢!

      本站2016年12月16日起取消ruida.org.cn域名,该域名正式作废,该域名发布任何信息与本站无关。


      启用ruida.orghy928.net域名;

      瑞达网,瑞达科技网宣

    专 题 栏 目

    • 公元干支年号皇帝对照年表618年-2025年
      全国各地庙会圩日表
       婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柟闂寸绾剧粯绻涢幋鐐垫噧缂佸墎鍋ら弻娑㈠Ψ椤旂厧顫╃紓浣插亾闁割偆鍠撶弧鈧梻鍌氱墛缁嬫帡鏁嶉弮鍫熺厾闁哄娉曟禒銏ゆ婢舵劖鐓ユ繝闈涙閸f椽鎮归幇銊ュ⒉闁靛洤瀚伴崺锟犲礃閵娿儱绠i梻浣筋嚃閸犳盯锝炴径鎰闁告稒娼欐导鐘绘煏婢舵ê鐏g紒鈧繝鍕=闁稿本鐟чˇ锔姐亜閿旇鐏﹂柟顔矫埞鎴犫偓锝庝簽閸欌偓濠电姰鍨奸崺鏍礉閺囩姷涓嶅┑鐘崇閸婂灚绻涢幋鐑嗕痪妞ゅ繐妫楅ˉ姘舵煕閹邦剚鈻曟繛鎾愁煼閺屾洟宕煎┑鍫㈩唺闁诲簼绲婚崑鎰閹烘鏁婇柣锝呮湰閸Q冾渻閵堝棙绌跨紓宥勭閻g兘骞囬悧鍫濅簻闂佹儳绻楅~澶婎熆閹达附鈷掑ù锝呮啞閹牊绻涚仦鍌氬鐎规洑鍗抽獮妯肩磼濡桨绮ч梻浣芥硶閸o箓骞忛敓锟�
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论

    | 服务声明 | 充值中心| 华安五金电器 | 收费标准| 论坛| 留言| 实用查询| 会员中心| 下载帮助| 设为首页|

    技术支持:瑞达科技 即时交谈QQ:237013889 QQ群:13810759 E-Mail:237013889@qq.com
    非盈利网站,如有侵权,请来信来电告知,第一时间处理,谢谢!
    桂ICP备17008104号 华玉生活网网站统计
    tj