PLC以卓越的可靠性和方便的可编程性广泛应用于工业控制领域。实现PC机与PLC通信的目的是为了向用户提供诸如工艺流程图显示、动态数据画面显示、报表显示、窗口技术等多种功能,为PLC提供良好的人机界面。本文详细介绍了FX系列PLC的通信协议,并在Windows环境下,使用易语言开发通信程序,实现了PC机与FX系列PLC之间的串行通信。本文对FX系列PLC的通信协议进行了详细的介绍,并以易语言为开发工具实现了PC机与FX系列PLC的串行通信。

1 前言

PLC以卓越的可靠性和方便的可编程性广泛应用于工业控制领域。实现PC机与PLC通信的目的是为了向用户提供诸如工艺流程图显示、动态数据画面显示、报表显示、窗口技术等多种功能,为PLC提供良好的人机界面。本文详细介绍了FX系列PLC的通信协议,并在Windows环境下,使用易语言开发通信程序,实现了PC机与FX系列PLC之间的串行通信。

2 PC机与PLC实现通信的条件

带异步通信适配器的PC机与PLC只有满足如下条件,才能互联通信:

(1)带有异步通信接口的PLC才能与带异步通信适配器的PC机互联。还要求双方采用的总线标准一致,否则要通过“总线标准变换单元”变换之后才能互联。

(2)双方的初始化,使波特率、数据位数、停止位数、奇偶校验都相同。

(3)要对PLC的通信协议分析清楚,严格地按照协议的规定及帧格式编写PC机的通信程序。PLC中配有通信机制,一般不需用户编程。

3 PC机及与FX系列PLC的串行通讯

3.1 硬件连接

PC机与FX系列PLC不能直接连接,要经过FX-232AW单元进行RS232C/RS-422的变换,下图表示了它们之间的连接关系:

3.2 FX系列PLC的通信协议

在PC机中必须依据互联的PLC的通信协议来编写通信程序,因此先介绍FX系列PLC的通信协议。

(1)数据格式

FX系列PLC采用异步格式,由1位起始位、7位数据位、1位偶校验位及1位停止位组成,波特率为9600bps,字符为ASCII码。格式如下:

(2)通信命令

FX系列PLC有4个通信命令,它们是读命令、写命令、强制通命令、强制断命令,如下表所示。表中X—输入继电器;Y—输出继电器;M—辅助继电器;S—状态元件;T—定时器;C—计数器;D—数据寄存器。

(3)通信控制字符

FX系列PLC采用面向字符的传输规程,用到5个通信控制字符,如下表所示。

*当PLC对PC机发来的ENQ不理解时,用NAK回答。

(4)报文格式

PC机向PLC发送的报文格式如下:

其中STX为开始标志:02H;ETX为结束标志:03H;CMD为命令的ASCII码;SUMH,SUML为从CMD到ETX按字节求累加和,溢出不计。由于每字节十六进制数变为两字节ASCII代码,故校验和为SUMH与SUML。

数据段格式与含义如下:

*写命令的数据段有数据,读命令的数据段则无数据。

读/写字节数为01H~40H(1~64)个。

PLC向PC机发送的应答报文格式如下:

*对读命令的应答报文数据段为要读取的数据,一个数据占两个字节,分上位下位:

对写命令的应答报文无数据段,而用ACK及NAK作为应答内容。

(5)传输过程

PC机与FX系列PLC之间采用应答方式通信,传输出错则组织重发。其传输过程如下:

PLC根据PC机的命令,在每个循环扫描结束处的END语句后组织自动应答,无需用户在PLC一方编写程序。

4 利用易语言编写通信程序

下面以一个简单的例子来说明编写通信程序的要点。假设PC机要求从PLC中读入从D123开始的4个字节的数据(D123,D124),其传输应答过程及报文如下(图略可向作者索取):

命令报文中10F6H为D123的地址,04H表示要读入4个字节的数据。校验和SUM=30H+31H+30H+46H+36H+30H+34H+

03H=174H,溢出部分不计,故SUMH为'7',SUML为‘4’,相应的ASCII码为“37H”,“34H”。应答报文中4个字节的十六进制数,其相应的ASCII码为8个字节,故应答报文长度为12个字节。

根据PC机与FX系列PLC的传输应答过程编制出如下所示的通信程序流程图略。

利用VB的MSComm控件,按照流程图可以编写如下通信程序实现PC机与FX系列PLC之间的串行通信以完成数据的读取。MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。在这个例子中使用了轮询方法。

(1)通信口初始化

端口1.端口号=1

端口1.波特率=9600

端口1.数据位数=7

端口1.奇偶校检方案=2

端口1.停止位=1

端口1.启动()

(2)请求通信与确认

Private Function MakeHandShaking() As Boolean

Dim InPackage As String

MSComm1.OutBufferCount = 0

MSComm1.InBufferCount = 0

MSComm1.Output = Chr(&H5)

Do

DoEvents

Loop Until MSComm1.InBufferCount = 1

InPackage = MSComm1.Input

If InPackage = Chr(&H6) Then

MakeHandShaking = True

Else

MakeHandShaking = FalseEnd If

End Function

(3)发送命令报文

Private Sub SendFrame()

Dim OutString As String

MSComm1.OutBufferCount = 0

MSComm1.InBufferCount = 0

OutStrin = Chr(&H2)+″0″+″10F604″+Chr(&H3)+″74″

MSComm1.Output = OutString

End Sub

(4)读取应答报文

Private Sub ReceiveFrame()

Dim InString As String

Do

DoEvents

Loop Until MSComm1.InBufferCount = 12

InString = MSComm1.Input

End Sub

5 结束语

以本文所述机制编写的通信程序已成功用于以FX2N型PLC作为主控制器的高层建筑玻璃幕墙清洗机器人系统中,通过该通信程序,实现了PC机对PLC的监视和控制。同时,本程序对PC机与其它型号PLC之间的通信也有一定的借鉴意义。

c 与易语言程序间通信,易语言与三菱PLC通信-FX系列相关推荐

  1. 为什么说易语言不如c语言_不说语言? 如何使用Google翻译

    为什么说易语言不如c语言 The Google Translate app and Google Assistant can translate text or images in dozens of ...

  2. c语言调易语言dll,易语言DLL来返回文本供其他语言调用

    部分简介 在使用易语言与其他语言配合编程中,有时需要使用易语言的DLL来返回文本型的值,但是由于易语言本身文本型数据不能直接返回让其他语言使用(直接使用多次会崩溃).所以这里要使用一种转换的方式,是其 ...

  3. [易语言][转载]易语言支持库内的DES算法分析

    介绍 易语言支持库里有个这样的命令: 〈字节集〉 加密数据 (字节集 字节集数据,文本型 密码文本,[整数型 加密算法]) - 数据操作支持库一->数据加解密 其中加密算法可以选DES以及RC4 ...

  4. c开发 易语言支持库,易写易库-用易语言开发易语言支持库.pdf

    易写易库-用易语言开发易语言支持库 易写易库(EXEK)用户手册 版本:0.2 作者:liigo,/liigo 时间:2008.10 概述 EXEK EXEK "易写易库(EEXXEEKK) ...

  5. “易写易库(EXEK)”项目启动,用易语言开发易语言支持库

    "易写易库"(EXEK,E Xie E Ku)项目已经启动,用易语言开发易语言支持库.我(liigo)准备用一个月左右的业余时间,完成本项目的一期工程. 用易语言开发易语言支持库, ...

  6. c语言中local status6,C语言中易错的地方(一)

    c++中易错的地方 1:scanf int a; int b; scanf("%d-=%d",&a,&b); printf("a=%d,b=%d" ...

  7. c语言常考易错知识点,C语言中易错点知识点拾遗

    C语言中易错点知识点拾遗 1. 首先,feof()是文件结束检测函数,如果没有结束,返回值是 0,结束了是 1 由于 feof(fp)返回 0 才 是没有结束,所以通常写成 while(!feof(f ...

  8. java语言与c++语言相比_最突出的特点是_Java 语言与C++语言相比,最突出的特点是( )。_学小易找答案...

    [简答题]今日はタバコを止めることにしました. [单选题]在编程时添加注释讲句, 会使编译之后生成的程序文件长度( ). [单选题]Java 语言与C++语言相比,最突出的特点是( ). [判断题]O ...

  9. 最易理解的C语言教学 第一章

    本章重点: 目录 1.什么是C语言 2.第一个C语言程序 3.C语言数据类型 4.变量.常量 5.字符串+转义字符+注释  1. 什么是C语言? 语言是一门通用计算机编程语言 ,广泛应用于底层开发. ...

最新文章

  1. python自学到精通
  2. 无线红外探测器04:产品测试及验证
  3. MyBatis学习总结(七)——Mybatis缓存
  4. 设置Tomcat字符编码UTF-8
  5. 实例比较虚幻引擎4与光线追踪渲染
  6. 四个修改Docker默认存储位置的方法
  7. 云管理不是巴别塔 从数据跨入云之路
  8. 汇编学习--7.10--循环
  9. Docker教程:镜像构建和自动镜像构建dockerfile
  10. 线性代数及其应用(第三版)5.1节习题解答
  11. Redis客户端工具如何连接宝塔Redis服务器
  12. 大型企业通用ERP进销存源码 ASP.Net开发系统源码
  13. php控制表格颜色,php – 表格列的背景颜色
  14. 2013年春节放假通知
  15. GNE: 4行代码实现新闻类网站通用爬虫
  16. Qt自定义控件的实践——电池电量控件
  17. MacPorts卡在正在运行软件包脚本解决方法
  18. oracle11g ins208022,解决重装 Oracle 出现的 INS-32025 问题,完全卸载 Oracle11g
  19. MockMvc案例实战调用Controller层API接⼝
  20. 国土电子政务办公平台设计

热门文章

  1. 因忘记一个约会而写的致歉函
  2. 第一次作业补充:项目调研
  3. 程序员是如何失去女朋友的
  4. android背景图拉伸,解决android:background背景图片被拉伸问题
  5. 货币银行学简答论述题
  6. 哪个ppt模板网站好
  7. XtraReport显示行序号
  8. C# dotnet 获取某个字符所在 Unicode 字符平面映射
  9. 修改微信小程序单选,复选框样式
  10. cvs数据格式 gps_运动手表GPS轨迹文件导出方法