网站大量收购独家精品文档,联系QQ:2885784924

西门子PLC1200关于通信缓冲区的几个技巧.PDF

西门子PLC1200关于通信缓冲区的几个技巧.PDF

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西门子PLC1200关于通信缓冲区的几个技巧

西门子PLC 1200 关于通信缓冲区的几个技巧 PLC 在进行通信时,调用的块上总是有个数据缓存区保存着我们要发送出去 的或者接收到的数据,通常我们都是用Byte 或者Word 的数组。在这里介绍几个 小技巧,来避开把数据一个一个的写入到数组里的繁琐代码。 分为三个小问题:建立DB 块时应注意的问题;Modbus 通信时的缓冲;序 列化与反序列化。 一、建立DB 块应注意的小问题 如果某个DB 块要用作通信的缓冲区,挂在函数块的某个输入上,就一定要 去除“优化的块访问”,否则会编译错误。对于初学者,这个问题可能总是会忽 略。操作步骤如下。 (1)右击DB 块,单击“属性”。 (2)去掉 “优化的块访问”的勾选。如图1。 图1. 去掉 “优化的块访问” 二、Modbus 通信时的缓冲 对于Modbus 通信的DATA_PTR 参数(Master )或者MB_HOLD_REG 参数 (Slave )可以直接将整个DB 块挂上去,不一定要挂数组型的数据,如图2 和 图3,注意一定要将DB 块去掉优化访问。DB 块内可以随意的写任何类型的数 据,如图4 ,不过变量的位置 (偏移量)会与他的地址有关。 图2. Modbus RTU 主站通信函数块 图3. Modbus RTU 从站通信函数块 图4. 用于Modbus 缓存的DB 块 因此在用PLC 通过Modbus 协议与变频器、仪表之类的设备通信时,可以 建一个DB 块,去掉优化访问后,在DB 块里按照设备的寄存器通信地址的顺序 去创建变量即可。如果中间出现了不关心的变量,不想一个个的创建变量,可以 用Word 数组代替那部分地址的变量。 对于Modbus TCP 的数据缓冲区一样使用。 三、序列化与反序列化 有一些通信模块,比如一些第三方厂家提供的模块的通信函数,其缓冲数据 可能只能是Byte 数组,不能像上文说的,直接挂DB 块。我们可以通过“Serialize” (序列化)和“Deserialize ”(反序列化)的指令来实现各个类型的数据和数组的 相互转换,比MOVE 指令要简便,并且不容易出错。 序列化是指将我们的数据(可能是DB 块,也可能是各种类型的变量)按顺 序转化为一个个的字节,反序列化是指把字节数组里的字节按照顺序写入我们的 数据中。 1.序列化 如图5 序列化例程。 图5. 序列化例程1 通过介绍些Serialize 块的四个参数来介绍功能。SRC_VARIABLE 是要序列 化的变量,可以是一个DB 块 (是否去掉“优化的块访问”都可以),也可以是 任意类型的变量。本例程的”DB_Recipe”.aa 的内容如图4 。DEST_ARRAY 是储 存结果的数据变量,为BYTE 数组。POS 是一个InOut 型参数,不可以写入常数, 其代表的意思用本例程来介绍,如图5 给POS 初始化为10,”DB_Recipe”.aa 的 数据将从buf 的偏移量10 的位置 (不是索引号10)开始写入,函数运行完后, POS 的值将会增加,增加量为写入的字节数,比如例程的”DB_Recipe”.aa 占用 14 个字节,POS 的值会变为10+14=24。Ret_Val 是错误信息。 我们还可以将多个数据非常方便的序列化到一个数组里。例程如图6 。本例 程还是从偏移量10 开始写入,将”DB_Recipe”.aa 和”DB_Recipe”.bb 都进行序列 化。本例程序列化的结果为,”DB_Recipe”.aa 的数据 (14 个字节)在buf 的10 到23 的位置,”DB_Recipe”.bb 的数据(14 个字节)在buf24 到37 的位置,POS 的值为38 。 图6. 序列化例程2 2.反序列化 例程如图7 。SRC_ARRAY 为存有数据流的Byte 数组,DEST_VARIABLE 为我们实际需要的数据,可以是DB 块也可以是任意类型的变量。POS 与Ret_Val 不做过多介绍。 反序列化也可以像“序列化例程2 ”一样的结构进行使用。 图7. 反序

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档