浅析PLC程序的串口通讯模块化开发.pdf
王业自 DOI 1 0 . 3 9 6 9 / j . i s s n . 1 0 0 9 - 9 4 9 2 . 2 0 1 6 . 0 2 . 0 0 7 浅析P L C程序的串口通讯模块化开发 陈优 明 深圳达实智能股份有限公司,广东深圳 5 1 8 0 0 0 摘要地铁环境与设备监控系统系统 B A S 中往往存在诸多通讯接 口,详实、完整、可靠的通讯程序是至关重要的,通过命令 串的通讯程序讲解 , 有助于对总线通讯实现方式的理解,以及通讯模块化开发 ,以供大家参考。 关键词串口;半双工;初始化 ; 标志位 中图分类号 T P 2 7 3 . 5 文献标识码 A 文章编号 1 0 0 9 9 4 9 2 2 0 1 6 0 20 0 2 7 0 3 Ana l ys i s o f t he De v e l o pm e nt o f S e r i al Co m muni c a t i o n M o du l e i n PLC Pr o g r a m CHEN YO Umi n g S h e n z h e n D A S I n t e l l i t e c h C o . ,L t d . ,S h e n z h e n 5 1 8 0 0 0 ,C h i n a A b s t r a c t T h e r e a r e ma n y c o mmu n i c a t i o n i n t e r f a c e s i n t h e b u i l d i n g a u t o ma t i c s y s t e m B A S ,d e t a i l e d ,c o mp l e t e a n d r e l i a b l e p r o g r a m i s v e r y i mp o r t a n t , t h r o u g h t h e c o mma n d s t r i n g o f c o mmu n i c a t i o n p r o g r a m e x p l a i n, h e l p t o r e a l i z e t h e wa y o f c o mmu n i c a t i o n a n d t h e c o mmu n i c a t i o n mo d u l e d e v e l o p me n t . Ke y wo r d s s e r i a l p o rt ;ha l f d up l e x; i n i t i a l i z a t i o n; fl a g O引言 在地铁环境 与设备监控系统 B A S 中常见 的 通讯接 口有以下几种 1 冷水系统 ; 2 不间断电源 U P S ; 3 应急电源 E P S ; 4 给排水系统 ; 5 自动扶梯系统 ; 6 变频风机 ; 7 智能照 明。 各条地铁上 B A S系统对上述接 口实现方式不 同 ,可能采用通讯方式 ,也可能采用硬接线方式 等。无论通讯接 口数 量多与少 ,一般都会优先考 虑采用同一种通讯协议 ,同时考虑存在不同协议 的可能性 。B A S 系统 中的核心控制是 P L C控制 系 统 ,其所包含的通讯模块 的功能 、性能指标影 响 着通讯的质量与效率 。从通讯模块的实现方式来 分 ,可分为简单配置 、命令 串、协议报文 。简单 配置方式 由于实现通讯的主体功能都是 由模块厂 家封装好 ,用户只需对通讯节点地址 ,读写数据 地址和长度进行配置即可 ,对于使用者来说很方 便 ,但对通讯理解上往往会收获甚微。协议报文 方式 ,往往用于非标协议 ,虽然可以比较全面理 解通讯是如何实现 ,但各非标协议不 同,协议报 文往往大不相同,这增加了记忆的复杂性,其代 表意义不佳。本文通过对命令串方式的通讯阐 述 ,既对 通讯 的基本 思路做 介绍 ,同时也可 以 理解通讯中主要代码的含义。 本文主体思路是 用 G E P L C I C 2 0 0 C MM0 2 0模块对上述 B A S 系统接 口的M o d b u s R T U串口半双工通讯程序开发的过 程 Ⅲ 。 1 通讯流程 对构建的串口通讯创建简易流程图,如图1 所示 收稿 日期 2 0 1 50 92 1 [二] G 自 图 1 串 口通 讯简 易 流程 图 1 . 1 初始化 串行通讯模 块一般需要 设置 通 讯 接口 类型 R S 2 3 2 、 RS 4 8 5 、 R S 4 2 2 、 波特率 、奇偶校验等参数。 完成模块设置后 ,对通讯协 议需要进行软件初始化 。主 要初始 化 内容有协议 类 型 、 节点功能 、等待模式 、状 态地址 、指定端 口、通 讯速率、奇偶校验 、控制流、超时响应时间。要 设定 以上参数 ,需用初始化命令码对模块 的端 口 进行软件初始化。初始化成功则反馈字A 1 0 0 将返 回标 志数 值 2 。若初 始化命令未成功 ,以超时时 间做为判断标 准 ,在超过响应时间仍未收到正确 的反馈值,则重新触发初始化命令 ,方法为初始 化命令执行次数的计数值加 1 ,如此反复初始化 直到成功,初始化查询命令成功时,A 1 0 0 将返回 标志数值 1 。初始化流程如图2 所示。 图2 初始化流程图 1 - 2 读取数据 初始化成 功后 ,优先对 设备读取数据 操作 。只有知 道设备 目前处 于什 么 状 态 , 才能知道设备 可进行何种动 作以及设备如 何 响应动作请 求 。读取数据命令主要注意以下参数 命令长 度 、命令功能码 、状态字类型 ,后面 则是 Mo d b u s R T U通用代码 设备地址 、功能码 、数据起始地 址 、数据 长度 、存储数据 地址 、C RC校验码等 。 形成一条查询命令行后,发送至目标设备,等待 目标设备的响应 。若反馈计数与查询计数相等 , 此时判断反馈字 A 1 0 0 ,值为 1 表示执行成功 ,若 值为大于2的数表示执行失败 ,该值为故障代 码 ,关于故 障问题在后面进行讲解 。读取成功则 判断是否需读多段地址,读多段只需判断该地址 仍有读请求则成功标志位重新触发查询命令,查 询计数值大于反馈计数值,成功与失败判断位失 效,等待 目标设备响应。如此反复查询,直至完 成该设备的所有查询命令。读取失败则无论是否 有写要求都跳过该节点所有命令请求,执行下一 个节点命令。在读成功时查询的反馈数据需要传 递实际控制设备参 数 ,采用读成功的 上 升 沿 触 发 方 式 , 可减少解析代码在 周期性 运行 中的重 复调用 ,提高程序 运行效率。读程序 流程如图3 所示 。 除 数 据 解 析 外 ,在总线 轮询过 程 中 ,对 同一 节点 图3 读数据流程图 地址多次读 未成功 ,则判 断为该节点通讯故 障 , 需检查该设备和通讯链路。通讯成功则清除通讯 故障标志位 。 1 . 3写数据 只有在完成对这个设备 的读情况下 ,才对设 备进行写操作。若读失败,将不进行写操作。读 成功后判断 目标设备是否有写需求 ,可用两种方 式实现 ,第一种 目标状态字与期望状态不同 ,则 产 生写请 求 ,该 方法 需对 目标 的状 态字进 行解 析 ,优点保证命令准确送达,缺点所有控制字都 需与状态字进行 比较 ,若控制要求中为模式控制 之类,则反馈的状态数据比较多,且组合比较困 难 。第二种方法是采用临时存储方法 ,临时存储 字保存上一次的写命令值,只有在写成功后才将 命令字赋值给临时存储字,优点是不需要读太多 的反馈数据,缺点是如系统数据被清零 ,或是第 一 次执行 ,由于临时存储字里数据 为零 ,则必将 执 行非 零命令 ,同时需 提供 一 片临时字 存储 区 域 ,对 内存提 出了要求 ,可通过编程 方式优化或 避免该类情况。两种方式都可实现写数据动作 , 也可以结合来实现,根据编程设备的实际存储和 通讯量吞吐量而定。当进行写命令时,读命令将 禁止产生 ,并且使读成功和失败标志位失效 ,置 位写标志 ,这样可清晰地知道设备在写状态。同 样在读 的过程 中,不产生写 的成功或是失败标志 位。写命令与读命令成功与失败判断相同,在写 陈优 明浅析P L C程序的串口通讯模块化开发 工 计数值与反馈计数值相同的情况下 ,判断反馈字 A1 0 0 ,值为 1 表示执行成功 ,值为大于 2 的数表示 执行失败 该值为故障代码 ,关于故障类在后面 做讲解 。无论写成功与失败都产生标志位 ,写成 功 则判 断是否需写多段区域 ,写失败则直接进入 地址轮询 。在 同一地址里 只要写请求还存在 ,则 写成功标志位重新触发新的写命令 ,写计数值大 于反馈计数值 ,成功与失败判断位失效 ,等待 目 标设备 响应 。如此反复直至完成该设备所有写动 作 。写数据流程如 图4 所示 。 图4 写数据流程图 同读 数 据对 目标 地址 的通讯 情况 做 出判 断一 样 ,多次 写未成 功 需 生 产 警 告 , 以提 醒开发 人员 对通讯 代码 的检 查 。 1 . 4地址轮询 一 条 串行 通 讯 链路 上往往 存 在 多个 设备 ,对 设备地址交替轮询的判断至关重要。 以下 4 种情况触发地址变换 1 读成功并且没有写请求 ; 2 读失败 ; 3 写成功并且完成该设备所有写请求; 4 写失败 。 在地址规 划方 面 ,同类设备 采用连续地址 , 不同设备分不同区段,以便提高代码执行效率和 可扩展性 。 地址轮询采用脉 冲触发方式 ,中断之前的读 请求 、写请求 ,从而开始新的设备的读写命令 。 2故障诊断 在通讯开发过程 中遇到故障问题是在所难免 的,如何分析与解决故障是需要认真考虑的。 2 . 1初始化故障诊断 在初始化过程 中如果一直未能实 现成功初始 化 。首先检查 硬件设备 ,比如安装情 况 、供 电情 况 、接线情况等 。若未能完成软件初始化 ,在排 除硬 件 的可能性 后 ,着 重考 虑程序 是否 正确 调 用 ,初始化命令参数是否正确 ,初始化程序是否 合理。比如命令长度太长或太短、指定端口不支 持该协议、参数值超出了有效范围等。 2 . 2读写数据诊断 在开发读写数据过程 中也可能经常报错 ,比 如命令不正确、数据长短不匹配、读取数据类型 不匹配 、节点地址不存在等。 在通讯程序测试能过后 ,在通讯 中随机产生 的错误如何 去分析成为要点 。在协议 中往往 自带 了错误响应代码,解读该类代码,将帮助开发人 员快速解决问题 。 2 . 3设备故障 有时会遇到 内部通讯程序虽在执行 ,但对外 的通讯指示灯 已经不再 闪烁 ,表示对外并无数据 请求。该类问题可能是设备命令地址区的数据溢 出或是死锁。通过诊断命令调用命令地址区,对 其数值进行分析 ,若确实为命令地址 区造成无法 通讯,则通过执行通讯地址区清空命令,使设备 回到初始化或未初始化状态 。 3结语 本文通过一个 比较有特色的通讯模块 的通讯 程序讲解 ,给大家提供一种常规串口通讯开发方 法 ,希望在串口通讯开发上对大家有所帮助。 参考文献 [ 1 ]G F K 一 2 2 2 0 B G E M o d b u s R T U主站 通 讯 手册[ z ]. 2 011 作者简介陈优明,男,1 9 8 2 年生,浙江磐安人,大学专 科 ,工程师。研究领域轨道交通智能控制技术及计算机 应用。 编辑 阮毅 [二]