您现在的位置是:首页 > PLC技术 > PLC技术

PLC与计算机专有协议通信

来源:艾特贸易2017-06-04

简介为了实现 PC 与 PLC 的通信,用户应当做如下工作: 判别 PC 上配置的通信口是否与要连入的 PLC 匹配,若不匹配,则增加通信模板。 要清楚 PLC 的通信协议,按照协议的规定及帧格式编写

    为了实现PCPLC的通信,用户应当做如下工作:    判别PC上配置的通信口是否与要连入的PLC匹配,若不匹配,则增加通信模板。    要清楚PLC的通信协议,按照协议的规定及帧格式编写PC的通信程序。PLC中配有通信机制,一般不需用户编程。若PLC厂家有PLCPC的专用通信软件出售,则此项任务较容易完成。    选择适当的操作系统提供的软件平台,利用与PLC交换的数据编制用户要求的画面。    若要远程传送,可通过Modem接入电话网。若要PC具有编程功能,应配置编程软件。    1PCPLC通信的条件    从原则上讲,PC连入PLC网络并没有什么困难。只要为PC配备该种PLC网专用的通信卡以及通信软件,按要求对通信卡进行初始化,并编制用户程序即可。用这种方法把PC连入PLC网络存在的惟一问题是价格问题。在PC上配上PLC制造厂生产的专用通信卡及专用通信软件常会使PC的价格数倍甚至十几倍地升高。    用户普遍感兴趣的问题是,能否利用PC中已普遍配有的异步串行通信适配器加上自己编写的通信程序把PC连入PLC网络。    带异步通信适配器的PCPLC通信并不一定行得通,只有满足如下条件才能实现通信:    1)只有带有异步通信接口的PLC及采用异步方式通信的PLC网络才有可能与带异步通信适配器的PC互联。同时还要求双方采用的总线标准一致,都是RS - 232C,或者都是RS - 422RS -485),否则要通过“总线标准变换单元”变换之后才能互联。    2)要通过对双方的初始化,使比特率、数据位数、停止位数、奇偶校验都相同。    3)用户必须熟悉互联的PLC采用的通信协议,严格地按照协议规定为PC编写通信程序。在PLC一方不需用户编写通信程序。    满足上述三个条件,PC就可以与PLC互联通信。如果不能满足这些条件,则应配置专用网卡及通信软件实现互联。    2PCPLC互联的结构形式    用户把带异步通信适配器的PCPLC互联通信时通常采用两种结构形式。一种为点对点结构,PCCOM口与PLC的编程器接口或其他异步通信口之间实现点对点链接。另一种为多点结构,PC与多台PLC共同连在同一条串行总线上。多点的结构则采用主从式存取控制方法,通常以PC为主站,多台PLC为从站,通过周期轮询进行通信管理。    3PCPLC互联通信方式    主要介绍利用标准通信口或由用户自定义的自由通信口实现PCPLC的通信。目前PCPLC互联通信方式主要有以下几种:    1)通过PLC开发商提供的系统协议和网络适配器,构成特定公司产品的内部网络,其通信协议不公开。互联通信必须使用开发商提供的上位组态软件,并采用支持相应协议的外设。这种方式其显示画面和功能往往难以满足不同用户的需要。    2)购买通用的上位组态软件,实现PCPLC的通信。这种方式除了要增加系统投资外,其应用的灵活性也受到一定的局限。    3)利用PLC厂商提供的标准通信口或由用户自定义的自由通信口实现PCPLC互联通信。这种方式不需要增加投资,有较好的灵活性,特别适合于小规模控制系统。    4PCFX系列PLC通信的实现    (1)硬件连接    一台PC可与一台或最多16FX系列PLC通信,PCPLC之间不能直接连接。图7-32ab所示为点对点结构的连接,图7-32a中是通过FX -232AW单元进行RS - 232C/RS -422转换与PLC编程口连接,图7-32b中通过在PLC内部安装的通信功能扩展板FX - 232 -BDPC连接;图7-32c所示为多点结构的连接,FX - 485 - BD为安装在PLC内部的通信功能扩展板,FX -485PC -IFRS -232CRS -485的转换接口。除此之外,还可以通过其他通信模块进行连接,这里不再一一赘述。下面以PCPLC之间点对点通信为例。
PC与FX的硬件连接图
    7-32    PCFX的硬件连接图    (2) FX系列PLC通信协议    PC中必须依据所连接PLC的通信规程来编写通信协议,所以先要熟悉FX系列PLC的通信协议。    1)数据格式。FX系列PLC采用异步格式,由1位起始位、7位数据位、1位偶校验位及1位停止位组成,比特率为9600bit/s,字符为ASCII码。数据格式如图7-33所示。
数据格式
    7-33    数据格式    2)通信命令。FX系列PLC4条通信命令,分别是读命令、写命令、强制通命令、强制断命令,如表7-7所示。    7-7    FX系列PLC的通信命令
FX系列PLC的通信命令
    3)通信控制字符。FX系列PLC采用面向字符的传输规程,用到5个通信控制字符,如表7-8所示。    7-8    FX系列PLC通信控制字符
FX系列PLC通信控制字符
    注:当PLC对计算机发来的ENQ不理解时,用NAK回答。    4)报文格式。计算机向PLC发送的报文格式如下:    其中,STX为开始标志02H; ETX为结束标志03H; CMD为命令的ASCII码;SUMHSUML为按字节求累加和,溢出不计。由于每字节十六进制数变为两字节的ASCII码,故校验和为SUMHSUML    数据段格式与含义如下:
    注:写命令的数据段有数据,读命令的数据段则无数据。    PLCPC发的应答报文格式如下:
    注:对读命令的应答报文数据段为要读取的数据,一个数据占两字节,分上位、下位。    数据段:    对写命令的应答报文无数据段,而用ACKNAK作为应答内容。   5)传输规程。PCFX系列PLC间采用应答方式通信,传输出错,则组织重发。其传输过程如图7-34所示。
传输过程
    7-34    传输过程    PLC根据PC的命令,在每个循环扫描结束处的END语句后组织自动应答,无须用户在PLC -方编写程序。    (3) PC通信程序的编写    编写PC的通信程序可采用汇编语言编写,或采用各种高级语言编写,或采用工控组态软件,或直接采用PLC厂家的通信软件(如三菱的MELSE MEDOC等)    下面利用VB6.0以一个简单的例子来说明编写通信程序的要点。假设PC要求从PLC中读入从D123开始的4个字节的数据(D123D124),其传输应答过程及命令报文如图7-35所示。
传输应答过程及命令报文
    7-35    传输应答过程及命令报文    命令报文中IOF6HD123的地址,04H表示要读入4个字节的数据。校验和SUM=30H +31H+30H+46H+36H+30H+34H +03H=174H,溢出部分不计,故SUMH=7SUML =4,相应的ASCII码为37H. 34H。应答报文中4个字节的十六进制数,其相应的ASCII码为8个字节,故应答报文长度为12个字节。    根据PCFX系列PLC的传输应答过程,利用VBMSComm控件可以编写如下通信程序实现PCFX系列PLC之间的串行通信,以完成数据的读取。MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。在这个例子中使用了轮询方法。    ①通信口初始化    Private Sub Initialize()    MSComml. CommPort=1    MSComml. Settings="9600, E,7,1”    MSComml. InBufferSize= 1024    MSComml. OutBufferSize= 1024    MSComml. InputLen=0    MSComml. InputMode= comInputText    MSComml. Handshaking= comNone    MSComml. PortOpen= True    End Sub    ②请求通信与确认    Private Function MakeHandshaking() As Boolean    Dim InPackage As String    MSComml. OutBufferCount=O    MSComml. InBufferCount=0    MSComml. OutPut= Chr(&H5)    Do    DoEvents    Loop Until MSComml. InBufferCount=l    InPackage= Chr (&H6) Then    MakeHandShaking= True    Else    MakeHandshaking = False    End If    End Function    Private Sub SendFrame ( )    Dim Outstring As String    MSComml. OutBufferCount = 0    MSComrnl. InBufferCount = 0    Outstrin = Chr ( &H2)    + " on " + " IOF604 " + Chr ( &H3)    + " 74 "    MSComml. Output = Outstring    End Sub    Private Sub ReceiveFrame ( )    Dim Instring As String    Do    DoEvents    Loop Until MSComml. InBufferCount = 12    InString = MSComml. Inpult    End Sub