本程序设计了四个串口可供选择,只有在选择串口之后才可进行“打开串口,关闭串口”的操作,当打开串口以后,就可以对PLC进行相应的操作了,为了使界面整洁干净,特别设计了“清空发送区”和“清空接收区”选项,当发送数据和接收数据放满编辑框时只需点击这两个按钮,数据就会清空。且实现代码相当简单,m_sSend.Empty()、m_sReceive.Empty()就可轻松实现这一任务。
PC机与PLC的通讯程序流程图如图3所示。

图3 PC机与PLC的通讯流程图
系统通信控制程序采用了MSComm控件。此控件提供了两种通信方法:①文件驱动,即用MSComm控件的OnComm文件捕获并处理通信事件和错误,它是处理串行端口交互作用的一种非常有效的方法;②查询方式,通过查询串口属性来获得事件和错误,实质上还是属于事件驱动,但在有些情况下显得更为便捷。MSComm6.0控件的属性:①CommPort,设置或返回通信端口号;②Settings,以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位;③PortOpen,设置或返回通信端口的状态,也可以打开和关闭端口;④bbbbb,返回和删除接收缓冲区中的字符;⑤bbbbbMode,设置或返回bbbbb属性取回的数据的类型,数据取回的形式为字符串或二进制数据的数组;⑥CommEvent返回近的通信事件或错误的数字代码,通信程序设计时可以根据该属性值执行不同的操作,在运行时为只写;⑦Output,将字符串写入发送缓冲区。
MSComm6.0控件只有一个事件,即Oncomm事件。在通信时如果发生错误或者事件,将会引发Oneomm事件并且改变其属性值,通过GetCommEvent()可获得Oncomm产生事件或错误的代码。在与PLC进行通信的过程中,使用MSComm6.0控件可以自动完成PLC对计算机发送信息的接收,终实现PC机对PLC的状态检测。
软件实现过程:FX2N系列的PLC与计算机之间的通信采用RS-232C标准,其传输速率固定为9 600bps,奇偶校验位采用偶校验。数据以帧为单位发送和接收。PC机向PLC中写数据时首先需对串口进行初始化,并对波特率、校验位等进行设置,然后根据通信协议对PLC进行相应的读写、复位、置位等操作,PLC根据PC机送来的控制字进行相应的操作。数据发送,采用专用发送指令XMT TABLE,CommPort,其中TABLE为发送缓冲区的首地址,首地址中保存要发送的字节数,即数据长度,大为255,其后的地址中保存要发送的数据,CommPort指定用于发送的端口。对于数据接收,使用接收指令RCV TABLE,CommPort,接收指令激活初始化或结束接收信息,通过制定端口接收信息并存储于数据缓冲区中,数据缓冲区的个数据指明了接收的字节数。
3 系统功能验证
将计算机用通讯电缆与PLC相连后,首先发送请求05H以后,验证计算机与PLC是否可以正常通信,接收区显示06,表示PLC对ENQ的确定回答,即PLC已准备好,可以进行下面的操作,具体如图4和图5。

这里主要对PLC读值功能进行验证。读操作命令格式如下:
STX—CMD0一数据段一ETX—SUMH—SUML
在按上述命令格式发送相应的代码后,就可直接读取PLC响应的信息了。响应信息格式如下:
STX—DATA—ETX—SUMH—SUML
图6和图7分别是对PLC进行读值验证时发送数据和接收数据的显示。

图6 发送数据显示

图7 接收数据显示
其中接收数据显示中的023030033633,是对x软地址值(0080H)读取后接收到的数据。具体算法如下:
nSUMLx=(0X30+0X30+0X03)%16=3<9,
nSUMHx=((0X30+0X30+0X03)%256)/16=6<9,
nSUMLx=0x30+nSUMLYl=0X33,
nSUMHx=0X30+nSUMHY2=0X36
故,转变成两字节ASCII代码SUMLx=33;SUMHx=36。
理论分析和实际操作的结果是一致的,即证明了本设计是准确无误的。
4 结语
本文主要使用Visual C++6.0作为开发工具,通过编写各个模块对应的操作程序,后用通讯电缆将PC机与三菱PLC相连进行调试,基本上达到了预期的设计目标,实现了计算机与PLC的通信功能。
西门子代理商,西门子模块代理商,西门子一级代理商,西门子PLC代理,西门子中国代理商