自由口模式下西门子PLC与计算机的通信

合集下载

西门子S7—200PLC自由口通讯的两种Delphi实现方法

西门子S7—200PLC自由口通讯的两种Delphi实现方法

西门子S7—200PLC自由口通讯的两种Delphi实现方法【摘要】本文介绍了PC机与PLC实现自由口通信的两种方法。

上位机采用的是PC机,利用Delphi6.0编写应用程序,详细对其中的两种方式做了详细说明。

下位机采用西门子公司的S7-200PLC,文中列出了相应的程序说明。

【关键词】计算机通信;PLC;Delphi;自由口通信1.引言随着大规模和超大规模集成电路等微电子技术的迅猛发展,PLC作为一种新型高能的控制器已经越来越广泛地用于工业现场控制的各个领域,它有着高可靠性、低能耗、易操作、易安装等优点。

但是,由于PLC的人机交互能力差,独立的PLC不能完成工业控制流程的实时和动态监控,PC机与PLC的通讯就愈加显得重要。

通过PLC与PC机的通讯,使得个人计算机和其他智能控制设备交换数字信息,使系统形成一个统一的整体,方便实现分散控制和集中管理。

2.S7-200的通信与PC机的通信机理S7-200 PLC的CPU支持多种通信协议,包括:点到点接口协议(PPI)、多点接口协议(MPI)、Profibus协议、自由通信接口协议和USS协议。

自由通讯口模式是S7-200PLC一个很有特色的功能,用户可以通过用户程序对通信口进行操作并且自己定义通信协议。

应用该通信方式,S7-200可以方便地和任何通信协议已知、具有串口的智能设备和控制器进行通信。

通过设定特殊存储字节SMB30(端口0)或SMB130(端口1)允许自由口模式,设置它的波特率、奇偶校验和数据位数。

用发送指令(XMT)和接收指令(RCV)对数据进行通信操作。

值得注意的一点是:只有在CPU处于RUN 模式时才允许自由口模式,当CPU处于STOP模式时自由口模式将自动转换为PPI协议模式。

用反应CPU模块上的工作方式的特殊存储器位SM0.7来控制自由口通讯方式的进入,当SM0.7为1时CPU处于RUN模式,可将通信口置为自由口模式。

在PC机与PLC的通讯过程中,主要是由PC机发送信息来强制控制PLC 的状态,接收PLC发送过来的信息来显示控制状态。

S7-200系列PLC与PC间自由口通讯的实现

S7-200系列PLC与PC间自由口通讯的实现
中 图分 类 号 :T 2 3 P 7 文 献 标 识 码 :A
0 引 言
通讯 。 过 向 S 3 通 MB 0或 S 1 0 S 3 MB 3 (MB 0用 于设 置端 口 0 而 S 1 0用 于设 置 端 口 1 的协议 选择 域 置 1 , MB 3 ) , 可 以将通 讯端 口置为 自由 口模式 。 MB 0或 S 1 0 S 3 MB 3
可编 程序控 制 器 ( I 是 以计算 机 技术 为 核心 的 P C) 通用 自动 控制装 置 , 由于其 具有 体 积小 、 使用灵 活 、 价 格相 对较 低 的特点 , 在工 业生 产 中得 到 了广 泛 的应用 。 西 门子公 司 的 S —2 0系列 小型 P C的功 能强 、 价 7 0 L 性 比高 ,在 国 内更 是应 用广 泛 。在 工业 控制 过程 中 ,常 常需 要用 一 台上位机 去控 制 多 台 P I C,实 P C机发 送
与集 中管 理 , 以构成分 布式 控制 系 统 。 文正是 在 P 本 C
端利 用 MS o C mm 控 件 、在 S —2 0P C端利 用 自由 7 0 L 口通讯 ,实现 它们 之间 的信 息交换 ,以构成 一 个简单 的分 布式控 制 系统 。
P C的 C U 处 于 S OP模 式 时 , 自由 口通讯 被 L P T
禁 止 ,只有 当 C U 处 于 RUN 模 式 时 ,才可使 用 自由 P 口通 讯 。 此 , 以用反 映 C U 模块 工作 方式 的特殊 在 可 P
存 储器位 S . M0 7来 控 制 自 由 口 方 式 的 进 入 。 当
产品之间 的通讯 。 自由 口通讯 可 由用户控 制 串行通讯 接
口, 现用户 自定义 的通讯协议 。 自由 口通 讯方式下 , 实 在 用 户利 用梯 形 图程序 中的接 收完成 中断 、字 符接 收 中 断、发送 完成 中断 、发 送指令 和接收指令 实现 S —2 0 7 0 系列 P C与上位机 的通讯 。在 P 与 P L I C C的通讯方式 上 , 自由 口通讯 是一种廉 价和灵 活的方法 _ 。 1 ]

s7-200自由口通信

s7-200自由口通信

S7-200自由口通信简介S7-200是一款广泛应用于低端自动化控制领域的PLC,可以满足各种控制要求。

在控制系统中,一个PLC通常需要与其他设备进行通信,以实现更加复杂的控制功能。

而S7-200具有自由口通信功能,可以方便地与其他设备进行通信,为控制系统的设计提供了更多的选择。

自由口通信的概念S7-200的自由口通信,是指使用自由口功能实现与其他设备(如触摸屏、人机界面、变频器等)之间的通信。

在PLC控制系统中,S7-200自由口通信的应用非常广泛。

通过配置相应的参数和指令,S7-200可以方便地实现与其他设备之间的数据交换和控制指令传输。

自由口通信的优势相比其他通信方式,S7-200的自由口通信具有许多优势:方便易用S7-200自由口的设置非常简单,用户只需要根据实际需要设置相应的参数即可。

并且S7-200具备很好的兼容性,能够与其他设备快速实现数据交换。

实时性强S7-200的自由口通信实时性非常好,数据传输速度快,通讯延时很低。

这一优势使得S7-200在高速控制和监控场合得到广泛应用。

带宽宽敞S7-200自由口的带宽非常宽敞,可以同时实现多个任务和数据的传输。

这一优势使得S7-200具有非常好的扩展性和适应性,可以满足各种不同应用场合的需求。

自由口通信的应用示例通讯协议S7-200可以通过自由口通信与其他设备进行通讯,常用的通讯协议包括Modbus、Profibu、Devicenet等。

在S7-200的通讯模块中,可以通过配置相应的参数和指令,非常方便地实现与这些通讯协议之间的通信。

数据交换在PLC控制系统中,数据交换是一个非常重要的环节。

通过S7-200的自由口通信,用户可以快速实现控制器之间的数据交换,提高控制系统的性能和稳定性。

例如,在变频器控制系统中,S7-200可以通过自由口和变频器进行数据交换,以实现更加复杂的控制功能。

远程监控S7-200的自由口通信可以实现远程监控和数据采集。

西门子S7-200 自由口通信实用文档

西门子S7-200 自由口通信实用文档

主题:应用探讨—S7-200 自由口通信—发帖整理强大而灵活的自由口通信能力,是S7-200系统的一个重要特点。

S7-200 CPU的RS485通信口提供了建立在串行通信基础上的“自由”通信能力,数据传输协议完全由用户程序决定。

通过自由口方式,S7-200可以与串行打印机、条码阅读器等通信。

而S7-200的编程软件也提供了一些通信协议库,如USS协议库和MODBUS RTU从站协议库,它们实际上也使用了自由口通信功能。

开设本话题的目的,在于澄清自由口通信的基本概念,强调使用中的要点,讨论应用的常见问题。

经过此次集中交流,解决了如下一些问题:1. 自由口通信基本概念2. 自由口通信编程指令的使用和技巧3. 自由口通信常见问题4. 产品功能建议更多信息请参考下面文档。

“下载中心”参考文档:文档编号“1109582”——S7-200《可编程控制器系统手册》文档编号“A0136”——《西门子 S7-200•LOGO!•SITOP参考》以下为本次探讨的发帖整理,查看原始交流内容请点击此处。

1.自由口通信基本概念(1楼——5楼)2.自由口通信编程指令的使用和技巧(6楼——15楼)3.自由口通信容易犯的错误(16楼——24楼)4.产品功能建议(25楼——27楼)quote:以下是引用BABU在2011-01-20 15:17:08的发言:我回来了,项目终于做完了,可以回家过年了,:)。

自由口通信真是折腾的我好惨啊,简单回顾一下,希望对像我这样的菜鸟有些借鉴作用。

先感谢一下西门子论坛和热线,没少骚扰他们。

在完全没有准备的情况下甲方又加进一个仪表,做什么自有口通信,晕阿!没办法,迎着上吧!网上搜资料,看手册,越看越糊涂!时间紧迫,还是直接上手做吧。

首先是把PLC和仪表连接起来,可仪表的口是rs232的,热线工程师告诉我得做rs232/485的转换,打车到市场上买个转换器(打车钱比设备钱还多,可见现场多么偏僻阿),听卖转换器的老板给我分析了一下每种的区别——不光是价格的区别,说实在的,当时非常惭愧,老板懂的比我多多了。

自由口模式下西门子PLC与计算机的串口通信

自由口模式下西门子PLC与计算机的串口通信
NETWORK 2
LD SM0.0
//RCV指令初始化
MOVB 16#EC, SMB87
MOVB 103, SMB88
MOVB 71, SMB89
MOVB +1000, SMW92
MOVB 35, SMB94
R SM87.2, 1
NETWORK 3
LD SM0.0
由于RS-485为半双工电气标准硬件电路,在用PC/PPI电缆时,发送和接收之间要有一定的时间间隔,这是由电缆本身的切换时间决定的,否则就会出现XMT/RCV冲突现象。因此,收发使能的控制切换需延时(尽管短),且通信协议(底层)一般也要求收发之间有间隔,以便正确判断传送数据的正确性。采取的措施:在发送前允许发送中断,在发送完成中断程序中关闭发送中断,延时启动接收中断,并在接收完成中断中关闭接收中断。根据经验,如果用9600波特率的话最短时间间隔至少要50ms以上,否则可能会造成数据的丢失。但我们发现,在发送完成后将自定义的标志位置位,检测到标志位上跳沿的首次扫描执行一遍RCV,即使不加发送延时也不会造成数据丢失。
S7-200系列PLC的通信口分3种工作方式:
l PPI(Point2to2Point Interface)方式;
l 自由口通信(Freeport)方式;
l PROFIBU S2DP方式。
本文主要介绍PLC的自由口通信方式。自由口通信方式是一种通讯协议完全开放的工作方式, 如果说PPI方式是外设适应PLC的话, 那么自由口通信方式就是PLC适应外设。在自由口通信方式下外设不受PPI协议的限制,不支持PPI协议的设备也能够与S7-200系列PLC通讯, 在自由口通信方式下通讯口的协议由外设决定, PLC通过程序来适应外设。自由口通信方式是对PPI方式的一个补充,该方式使得S7-200系列PLC可以与任何具有通讯能力的、并且协议公开的设备相通讯。

西门子PLC 自由口通讯

西门子PLC 自由口通讯

1.自由口通讯基本概念1.1 自由口通信概述1.2 自由口通信要点1.3 发送和接收指令2.自由口通信使用指南2.1 通讯口初始化2.2 发送数据:2.3 接收数据2.4 自由口通信例程1.自由口通讯基本概念1.1 自由口通信概述S7-200PLC的通讯口支持RS485接口标准。

采用正负两根信号线作为传输线路。

工作模式采用串行半双工形式,在任意时刻只允许由一方发送数据,另一方接收数据。

数据传输采用异步方式,传输的单位是字符,收发双方以预先约定的传输速率,在时钟的作用下,传送这个字符中的每一位。

传输速率可以设置为1200、2400、4800、9600、19200、38400、57600、115200。

字符帧格式为一个起始位、7或8个数据位、一个奇/偶校验位或者无校验位、一个停止位。

字符传输从最低位开始,空闲线高电平、起始位低电平、停止位高电平。

字符传输时间取决于波特率。

数据发送可以是连续的也可以是断续的。

所谓连续的数据发送,是指在一个字符格式的停止位之后,立即发送下一个字符的起始位,之间没有空闲线时间。

而断续的数据发送,是指当一个字符帧发送后,总线维持空闲的状态,新字符起始位可以在任意时刻开始发送,即上一个字符的停止位和下一个字符的起始位之间有空闲线状态。

示例:用PLC连续的发送两个字符(16#55和16#EE)(程序如图3和图4),通过示波器测量CPU通讯端口管脚3/8之间的电压,波形如下图1.:图1.两个字符(16#55和16#EE)的波形图示例说明:16进制的16#55换算成2进制等于2#01010101,16进制的16#EE换算成2进制等于2#11101110。

如图所示,当数据线上没有字符发送时总线处于空闲状态(高电平),当PLC发送第一个字符16#55时,先发送该字符帧的起始位(低电平),再发送它的8个数据位,依次从数据位的最低位开始发送(分别为1、0、1、0、1、0、1、0),接着发送校验位(高电平或低电平或无)和停止位(高电平)。

电脑与西门子plc网口通讯设置

电脑与西门子plc网口通讯设置近年来,随着自动化技术的不断发展,西门子可编程逻辑控制器(PLC)在工业生产中扮演着越来越重要的角色。

作为工业控制系统的核心设备,PLC通过与电脑的通讯,实现对生产过程的全面监控和控制。

本文将介绍如何设置电脑与西门子PLC之间的网口通讯。

首先,为了实现正常的通讯,我们需要连接电脑和PLC之间的网口。

通常情况下,PLC会提供一个以太网口(Ethernet Port)或串行口(Serial Port),而大部分电脑都拥有以太网口。

在硬件上,我们只需使用一条网线将PLC的以太网口与电脑的以太网口相连即可。

需要注意的是,在连接网线之前,确保电脑和PLC都已经通电并处于正常工作状态。

接下来,我们需要在电脑上进行一些软件设置。

以Windows操作系统为例,首先打开控制面板,找到并点击“网络和Internet”选项。

然后,在网络和共享中心中选择“更改适配器设置”。

在这里,你将看到你电脑上所有已连接的网络设备,包括以太网口。

找到以太网口后,右键点击它并选择“属性”。

在属性窗口中,找到并点击“Int ernet协议版本4(TCP/IPv4)”。

在这个选项中,我们可以手动设置IP地址和子网掩码。

通常情况下,PLC会预设一个默认的IP地址和子网掩码,你需要确保电脑与PLC在同一个网段。

你可以根据PLC的设置手册,将电脑的IP地址设置为与PLC相同的网段。

完成IP地址和子网掩码的设置后,点击确定保存更改。

接下来,我们需要进行网络设置中的高级设置。

在高级设置窗口中,找到“默认网关”选项,并填写PLC的网关地址。

同样地,你可以在PLC的设置手册中找到对应的网关地址。

点击确定保存更改后,我们还需要进行一些额外的配置。

找到控制面板中的“网络和Internet”选项,再次进入网络和共享中心。

在左侧的面板中,选择“高级共享设置”,并将网络发现和文件共享设置为打开状态。

经过以上的设置,你的电脑就可以和PLC之间建立起通讯连接了。

PC与多台S7-200PLC的自由口通信控制

7 2
P 与 多 台 S — 0 L 的 自由 口通 信 控 制 C 720PC
P C与多台 S — 0 L 7 2 0 P C的 自由I通信控制 Z l
Co t IO r ICo nr fSe i mmu ia in e we n C a d S —2 0 S r s PL o a nc t B t e P n 7 0 e i C o e
强 , 行 稳 定 运
关键词 : 串行 通 信 , L V P C,C++, 自由 口模 式
Ab tac sr t T s ap prs t te omm u cain c em e bewe S7—2 0 s is PL hi p er e enes h c ni t s h o s t en 0 er e C of e e a P an r al e t e Sim ns nd C, d e i s h z c omm u ia in e wee u nc to b t n ppe —c r om p t r nd ¥7- 4CN PL T m o t ig u e a 22 C.he ni n an c tols sem i or d on r y t s de el d orSol Ba— v ope f ar t
的 3 H 到 3 H ( 示 0到 9 和 4 H 到 4 H ( 示 A 到 F 。 0 9 表 ) 1 6 表 )
行 通 信 , 成 了对 多 台 P C 的监 控 , 时将 监 控 数 据 存 储 到 数 据 完 L 同
库 中 , 此基 础 上 成 功开 发 了太 阳能 电池 组 件 层压 机 监控 系 统 。 在

合 , 使 系 统 达 到既 能 及 时 地 采集 、 储 数 据 , 可 处 理 和使 用 好 可 存 又

自由口模式下PLC与计算机的通信


HTAVB180, VB172, 2//BCC 校验码写入发送缓冲区 NETWORK 8 LDSM4.5//发送反馈信息 XMTVB153, 0 Write 子程序: NETWORK 1 LDSM0.0//停止端口 0 的接收 RSM87.7, 1 RM0.0, 1 RCVVB100, 0 NETWORK 2 LDSM0.0//装入要写如数据源的地址指针 MOVD&VB115, VD145 NETWORK 3
第5页共6页
ATHVB113, VB139, 2 ATHVB131, VB140, 2 SM0.1, 1//置位 Verify 子程序的触发条件 MOVB0, VB179//BCC 码寄存器清零 MOVD&VB102, VD149//装入地址指针 XMTcomplete 中断程序 NETWORK 1 LDSM0.0 RM0.0, 1//复位 BCC 校验码正确的标记位 SSM87.7, 1//允许口 0 举行接收 MOVB0, VB179//BCC 校验码寄存器清零 MOVB0, VB180//BCC 校验码寄存器清零 MOVD&VB102, VD149//重新装入地址指针 MOVD&VB156, VD181
第4页共6页
MOVB103, SMB88 MOVB71, SMB89 MOVB+1000, SMW92 MOVB35, SMB94 RSM87.2, 1 NETWORK 3 LDSM0.0 ATCHRCVcomplete, 23//衔接口 0 接收完成的中断 NETWORK 4 LDSM0.0 ATCHXMTcomplete, 9//衔接口 0 发送完成的中断 NETWORK 5 LDSM0.0 ENI //中断允许
第1页共6页
MOVB21, VB153 NETWORK 3 LDSM0.0//计算 BCC 校验码 FORVW177, +1, +16 NETWORK 4 LDSM0.0 XORB*VD181, VB180 NETWORK 5 LDSM0.0 INCDVD181 NETWORK 6 NEXT NETWORK 7 LDSM0.0

西门子S7-1200与第三方设备自由口通信详解

西门子S7-1200与第三方设备自由口通信详解西门子S7-1200 紧凑型PLC在当前的市场中有着广泛的应用,由于其性价比高,所以常被用作小型自动化控制设备的控制器,这也使得它经常与第三方的设备(扫描枪、打印机等设备进行通讯。

因为没有第三方的设备,这里就以超级终端为例介绍自由口通讯。

1.控制系统原理图1:控制系统原理2.硬件需求S7-1200 PLC目前有3种类型的CPU:1)S7-1211C CPU。

2)S7-1212C CPU。

3)S7-1214C CPU。

这三种类型的CPU都可以连接三个串口通信模版。

本例中使用的PLC硬件为:1)PM1207电源 ( 6EP1 332-1SH71 )2) S7-1214C ( 6ES7 214 -1BE30 -0XB0 )3) CM1241 RS232 ( 6ES7 241 -1AH30 -0XB0 )3.软件需求1) 编程软件 Step7 Basic V10.5 ( 6ES7 822-0AA0-0YA0)4.组态我们通过下述的实际操作来介绍如何在Step7 Basic V10.5 中组态S7-1214C 和超级终端通信。

点击桌面上的“Totally Integrated Automation Portal V10”图标,打开如下图:图2:新建S7 -1200项目首先需要选择“Create new project”选项,然后在“Project name:”里输入PTP;在“Path:”修改项目的存储路径为“C:\”;点击“Create”,这样就创建了一个文件PTP的新项目。

创建后的窗口如下图所示:图3:新建项目后点击门户视图左下角的“Project View”切换到项目视图下,如下图:图4:切换到项目视图打开后,在“Devices”标签下,点击“Add new device”,在弹出的菜单中输入设备名“PLC_1”并在设备列表里选择CPU的类型。

选择后如下图:图5:PLC硬件组态插入CPU后,点击CPU左边的空槽,在右边的“Catalog ”里找到“Communication”下的RS232模块,拖拽或双击此模块,这样就把串口模块插入到硬件配置里,接下来就需要配置此RS232模块硬件接口参数,选择RS232模块,在其下方会出现该模块的硬件属性配置窗口,在属性窗口里有两个选项,一个是“general”;一个是“RS232 interface”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

自由口模式下PLC与计算机的通信产品部门:AS 所属行业:其它工业领域工程来源:Siemens概述本例说明如何以自由协议实现计算机与S7-200的通信,计算机作为主站,可以实现对PLC从站各寄存器的读/写操作。

计算机通过COM口发送指令到PLC的PORT0(或PORT1)口,PLC通过RCV接收指令,然后对指令进行译码,译码后调用相应的读/写子程序实现指令要求的操作,并返回指令执行的状态信息。

通信协议在自由口模式下,通信协议是由用户定义的。

用户可以用梯形图程序调用接收中断、发送中断、发送指令(XMT)、接受指令(RCV)来控制通信操作。

在自由口模式下,通信协议完全由梯形图程序控制。

指令格式定义•计算机每次发送一个33字节长的指令来实现一次读/写操作,指令格式见表1 说明:1起始字符起始字符标志着指令的开始,在本例中被定义为ASCII码的"g",不同的PLC从站可以定义不同的起始字符以接收真对该PLC的指令。

1指令类型该字节用来标志指令的类型,在本例中05H代表读操作,06H代表写操作。

1目标PLC站地址目标PLC站地址占用指令的B2、B3两个字节,以十六进制ASCII码的格式表示目标PLC的站地址。

目标寄存器地址在PLC内部可以用4个字节来表示一个寄存器的地址(但不能表示一个位地址)。

前I寄存器区两个字节表示寄存器类型,后两个字节表示寄存器号。

00 00(H):01 00(H):Q寄存器区02 00(H):M寄存器区08 00(H):V寄存器区00 00 00 00(H)例如:IB000的地址可表示为VB100的地址可表示为08 00 00 64(H)1读/写字节数M当读命令时,始终读回从目标寄存器开始的连续8个字节的数据(转换为十六进制ASCII码后占用16个字节),可以根据自己的需要取用,M可以任意写入。

当写命令时,M表示的是要写入数据的十六进制ASCII码所占用的字节数。

例如要写入1个字节的数据,数据在指令中以十六进制ASCII码表示,它将占用2个字节,此时应向M中写入"02"。

同理,如果要写入5个字节的数据,M中应写入"0A"。

1要写入的数据要写入的数据在指令中以十六进制ASCII码的格式表示,占用指令的B14-B29共16个字节。

数据区必须填满,但只有前M个字节的数据会被写入目标寄存器。

一条指令最多可以写入8个字节的数据(此时M中应写入"10",代表十进制的16)1BCC校验码在传输过程中,指令有可能受到任何的干扰而使原来的数据信号发生扭曲,此时的指令当然是错误的,为了侦测指令在传输过程中发生的错误,接收方必须对指令作进一步的确认工作,以防止错误的指令被执行,最简单的方法就是使用校验码。

BCC校验码的方法就是将要传送的字符串的ASCII码以字节为单位作异或和,并将此异或和作为指令的一部分传送出去;同样地,接收方在接到指令后,以相同的方式对接收到的字符串作异或和,并与传送方所送过来的值作对比,若其值相等,则代表接收到的指令是正确的,反之则是错误的。

在本例中,bcc为指令B1到B29的异或和,BCC为bcc的十六进制ASCII码。

bcc=B1 xor B2 xor B3 xor B4 xor …… xor B291结束字符结束字符标志着指令的结束,在本例中被定义为ASCII码的"G",不同的PLC从站可以定义不同的结束字符以接收真对该PLC的指令。

•PLC在接到上位机指令后,将发送一个21字节长反馈信息,格式见表2说明:1起始字符起始字符标志着反馈信息的开始,在本例中被定义为ASCII码的"g",不同的PLC从站可以定义不同的起始字符,这样上位机可以根据信息的起始字符来判断反馈信息的来源。

状态信息代表读取正确该字节包含指令执行的状态信息,在本例中01H02H 代表写入正确03H 代表BCC校验码错误04H 代表指令不合法1数据区反馈信息的B3到B18为读指令所要读取的数据,以十六进制ASCII码表示。

1BCC校验码与上位机指令中的BCC校验码类似,它是反馈信息B3到B18的异或和。

1结束字符结束字符标志着反馈信息的结束,在本例中被定义为26H。

指令中为何要使用ASCII码一条指令除包含数据外,还包含必要的控制字(起始字符、结束字符、指令类型等)。

如果指令中的数据直接以其原本的形式传输,则不可避免的会与指令中的控制字发生混淆。

例如本例中,指令的起始字符为"g",其ASCII码值为67H,结束字符为"G",其ASCII码值为47H。

假设要写入的数据中也有47H,并且数据直接以其原本的形式传输,则PLC会因为接收到了数据中的47H而停止接收,这样PLC接收到的指令将是一个不完整的非法指令,很可能造成PLC的误动作。

为了避免这种情况的发生,可以用文本来传送二进制数据。

通过以16进制ASCII码的格式描述数据,每个二进制的字节都可以表示成一对ASCII编码,这对编码表示这个字节的两个16进制字符。

这种格式可以表示任何的数值,仅仅使用ASCII代码的30H到39H(表示0到9)和41H到46H(表示A到F)。

ASCII码的其余部分可以用作控制字(起始标志、结束标志、指令类型等)。

这样,数据中的47H以ASCII 码的形式进行传送就变成了34H 37H 两个字节,从而避免了PLC因接收到数据中的47H而停止接收的错误。

表1 上位机指令格式Byte0 起始字符Byte1 指令类型(读/写)Byte2目标PLC站地址(十六进制ASCII码)Byte3Byte4目标寄存器地址(十六进制ASCII码)Byte5Byte6Byte8Byte9Byte10Byte11Byte12读/写字节数M(十六进制ASCII码)Byte13Byte14Byte15Byte16Byte17Byte18Byte19Byte20Byte21要写入的数据(十六进制ASCII码)Byte22Byte23Byte24Byte25Byte26Byte27Byte28Byte29Byte30BCC校验码(十六进制ASCII码)Byte31Byte32 结束字符表2 反馈信息格式Byte0 起始字符Byte1 状态信息Byte2Byte3Byte4Byte5Byte6Byte7Byte8数据区(十六进制ASCII码)Byte9Byte10Byte11Byte12Byte13Byte14Byte15Byte17Byte18BCC校验码(十六进制ASCII码)Byte19Byte20 结束字符PLC程序执行过程PLC在第一次扫描时执行初始化子程序,对端口及RCV指令进行初始化。

初始化完成后,运行RCV指令使端口处于接受状态。

RCV会将以"g"开头"G"结尾的指令保存到接收缓冲区,并同时产生接收完成中断。

RCVcomplete中断服务程序用来处理接收完成中断事件,它会将接收缓冲区中的十六进制ASCII码还原成数据并保存,同时置位Verify 子程序的触发条件(M0.1)。

Verify子程序首先复位本身的触发条件以防止子程序被重复调用,然后求出接收缓冲区中指令的BCC校验码并与指令中的BCC校验码进行比对。

如果相等则置BCC码校验正确的标志位(M0.0)为1;如果指令格式正确(指令的结束标志在接收缓冲区中特定的位置VB133)而BCC码不相等,则发送代表BCC校验码错误的反馈信息;如果指令格式不正确(VB133中不是指令的结束标志),则返回代表指令格式错误的反馈信息。

Read子程序的触发条件为:指令中的站地址与本机站地址相符、指令类型为读指令、BCC检验码正确。

当条件满足时,Read子程序被执行。

Read子程序首先禁止RCV,然后将指令所要读取的数据转换成十六进制ASCII码并写入发送缓冲区、计算BCC检验码、最后发送反馈信息。

Write子程序的触发条件为:指令中的站地址与本机站地址相符、指令类型为写指令、BCC检验码正确。

当条件满足时,Write子程序被执行。

Write子程序首先禁止RCV,然后将指令中的数据写入目标寄存器,最后发送代表写入正确的反馈信息。

PLC每接到一条指令后都会发送一条反馈信息,当反馈信息发送完成时,会产生发送完成中断,XMTcomplete中断服务程序用来处理发送完成中断事件。

在XMTcomplete中断服务程序中所要执行的操作包括:复位BCC校验码正确的标志位(M0.0);允许RCV;bcc码寄存器清零;重新装入用于计算BCC校验码的地址指针;接收缓冲区中存放指令结束字符的字节VB133清零(用来判断下一条指令格式是否正确)。

PLC寄存器地址分配此程序占用PLC寄存器的VB100-VB199,内部继电器占用M0.0和M0.1。

寄存器地址分配见表3、表4、表5、表6。

表3 接收缓冲区VB100 字符数VB101 起始字符Byte0VB102 指令类型(读/写)Byte1VB103 目标PLC站地址(十六进制ASCII码)Byte2VB104 Byte3VB105目标寄存器地址(十六进制ASCII码)Byte4VB106 Byte5 VB107 Byte6 VB108 Byte7 VB109 Byte8 VB110 Byte9 VB111 Byte10 VB112 Byte11VB113 读/写字节数M(十六进制ASCII码)Byte12VB114 Byte13VB115要写入的数据(十六进制ASCII码)Byte14VB116 Byte15 VB117 Byte16VB119 Byte18 VB120 Byte19 VB121 Byte20 VB122 Byte21 VB123 Byte22 VB124 Byte23 VB125 Byte24 VB126 Byte25 VB127 Byte26 VB128 Byte27 VB129 Byte28 VB130 Byte29 VB131 BCC 校验码(十六进制ASCII 码) Byte30 VB132 Byte31 VB133结束字符Byte32表4 译码区VB134 PLC 站号(ATH from VB103-VB104)VB135 合成为VD135作为目标寄存器的地址指针(ATH from VB105-VB112)VB136 VB137 VB138 VB139 读/写字节数(ATH from VB113-VB114) VB140 bcc 码(ATH from VB131-VB132)VB141 未使用VB142 VB143 VB144VB145 VB146 VB147 VB148 VB149 和成为VD149作为VB102的地址指针用以计算BCC 校验码VB150 VB151 VB152表5 发送缓冲区VB153 字符数VB154 起始字符 Byte0 VB155 状态信息 Byte1 VB156 数据区(十六进制ASCII 码) Byte2 VB157Byte3VB159 Byte5 VB160 Byte6 VB161 Byte7 VB162 Byte8 VB163 Byte9 VB164 Byte10 VB165 Byte11 VB166 Byte12 VB167 Byte13 VB168 Byte14 VB169 Byte15 VB170 Byte16 VB171 Byte17 VB172 BCC 校验码(十六进制ASCII 码)Byte18 VB173 Byte19 VB174结束字符Byte20表6 其它VB175 合成为VW175作为接收时计算bcc 码循环的INDXVB176 VB177 合成为VW177作为发送时计算bcc 码循环的INDXVB178 VB179 接收数据的bcc 码 VB180 发送数据的bcc 码VB181 合成为VD181作为VB156的地址指针 (计算发送反馈信息的bcc 码时使用)VB182 VB183 VB184 VB185至VB198 未使用VB199本机站号 程序清单 主程序:NETWORK 1 LD SM0.1 //第一次扫描调用初始化子程序 CALL initializeNETWORK 2 LDB= VB134, VB199 //指令中的站地址与本机站地址相符 AB= VB102, 5 //指令类型为读指令 A M0.0 //BCC 码校验正确 CALLRead//调用读子程序NETWORK 3LDB= VB134, VB199 //指令中的站地址与本机站地址相符AB= VB102, 6 //指令类型为写指令A M0.0 //BCC码校验正确CALL Write //调用写子程序NETWORK 4LD M0.1 //指令接收完成后调用BCC码校验子程序CALL VerifyNETWORK 5LD SM4.5 //当端口空闲时启动RCVRCV VB100, 0Read子程序:NETWORK 1LD SM0.0 //停止端口0的接收R SM87.7, 1R M0.0, 1RCV VB100, 0NETWORK 2LD SM0.0 //将数据写入发送缓冲区MOV103, VB154BMOV1, VB155BHTA *VD135, VB156, 16MOV26, VB174BMOV21, VB153BNETWORK 3LD SM0.0 //计算BCC校验码FOR VW177, +1, +16NETWORK 4LD SM0.0XOR*VD181, VB180BNETWORK 5LD SM0.0INCD VD181NETWORK 6NEXTNETWORK 7LD SM0.0HTA VB180, VB172, 2 //BCC校验码写入发送缓冲区NETWORK 8LD SM4.5 //发送反馈信息XMT VB153, 0Write子程序:NETWORK 1LD SM0.0 //停止端口0的接收R SM87.7, 1R M0.0, 1RCV VB100, 0NETWORK 2LD SM0.0 //装入要写如数据源的地址指针MOV&VB115, VD145DNETWORK 3LD SM0.0 //写入数据*VD145, *VD135,ATHVB139NETWORK 4LD SM0.0 //指令执行的反馈信息写入发送缓冲区MOV21, VB153BMOV103, VB154BMOV2, VB155BMOV26, VB174BNETWORK 5LD SM4.5 //发送指令执行的反馈信息XMT VB153, 0Verify子程序:NETWORK 1LD SM0.0R M0.1, 1 //复位verify子程序的执行条件NETWORK 2LD SM0.0 //计算BCC码FOR VW175, +1, +29NETWORK 3LD SM0.0XOR*VD149, VB179BNETWORK 4LD SM0.0INCD VD149NETWORK 5NEXTNETWORK 6LDB= VB179, VB140 //当BCC码校验正确时,M0.0置1AB= VB133, 71S M0.0, 1NETWORK 7LDB= VB133, 71 //BCC码错误时发送反馈信息AB<> VB179, VB140MOV21, VB153BMOV103, VB154BMOV3, VB155BMOV26, VB174BR SM87.7, 1RCV VB100, 0XMT VB153, 0NETWORK 8LDB<VB133, 71 //指令格式错误或RCV超时时发送反馈信息>MOV21, VB153BMOV103, VB154BMOV4, VB155BMOV26, VB174BR SM87.7, 1RCV VB100, 0XMT VB153, 0Initialize子程序:NETWORK 1LD SM0.0MOV9, SMB30 //0口"9600,N,8,1"BNETWORK 2LD SM0.0 //RCV指令初始化MOV16#EC, SMB87BMOV103, SMB88BMOV71, SMB89BMOV+1000, SMW92BMOV35, SMB94BR SM87.2, 1NETWORK 3LD SM0.0ATCH RCVcomplete, 23 //连接口0接收完成的中断NETWORK 4LD SM0.0ATCH XMTcomplete, 9 //连接口0发送完成的中断NETWORK 5LD SM0.0ENI //中断允许NETWORK 6LD SM0.0MOV2, VB199 //将本机站地址装入寄存器BNETWORK 7LD SM0.0MOV&VB102, VD149 //装入地址指针BMOV0, VB179 //BCC码寄存器清零BMOV&VB156, VD181 //装入地址指针BMOV0, VB180 //BCC码寄存器清零BRCVcomplete中断程序NETWORK 1LD SM0.0ATH VB103, VB134, 2 //指令译码(ASCII码到十六进制)ATH VB105, VB135, 8ATH VB113, VB139, 2ATH VB131, VB140, 2S M0.1, 1 //置位Verify子程序的触发条件MOV0, VB179 //BCC码寄存器清零BMOV&VB102, VD149 //装入地址指针DXMTcomplete中断程序NETWORK 1LD SM0.0R M0.0, 1 //复位BCC校验码正确的标志位S SM87.7, 1 //允许口0进行接收MOV0, VB179 //BCC校验码寄存器清零BMOV0, VB180 //BCC校验码寄存器清零BMOV&VB102, VD149 //重新装入地址指针DMOV&VB156, VD181DMOV0, VB133 //接收缓冲区中存放指令结束字符的字节B。

相关文档
最新文档