首页
学习
活动
专区
工具
TVP
发布

学习《DB_ANY之MODBUS-RTU轮询程序》有感

一但使用上了PORTAL,就爱上了它,但编程还是经典STEP7的思维,慢慢改变吧。最近一直在研究PORTAL的指针(VARIANT),跟STEP7指针跟本不一样,感觉要使用PORTAL,还是忘了以前的STEP7吧。

这几天研究了SIEMENS官网的一个关于DB_ANY的资料,里面有一段介绍modbus_tru轮询的代码,说一下自己的感悟和发现的一些错误。

现把一些要点和主要程序段描述一下:

1.     新建2个PLC_DATA_TYPE(UDT),如下图:

图1

2.     新建MODBUS_PARA数据块,定义一个结构数组,每一个数组对应一个报文和存储数据的DB块号。以modbus_Instu_UDT新建DB数据块,用来存放读取的数据或要写入的数据,DB块数量根据报文数量(MODBUS_PARA数据块中数组数量)来定。

图3

图4

3.     新建FB块,作为MODBUS的主程序块,主要接口如下图(原PDF文件没有说清楚InOut_1接口的定义):

图5

4.     主程序中,主要几个程序如下:

调用MODBUS_COMM_LOAD块,并给参数赋值

图6

读取MODBUS_PARA数据块内数组的上下限

图7

调用MODBUS_MASTER块,并给参数赋值(原PDF文件中,对InOut_1参数引用有错误),#Static_2是存储读取数据和写入数据的临时变量,赋给DATA_PTR接口:

图8

程序中分别对读和写进行了编程:

写从站:把(METER_1(DB42))数据块引用给VARIANT变量,再把DB块内的数据进行序列化给中间变量#Static_2

图9

读从站:把(METER_1(DB42))数据块引用给VARIANT变量,再把读取的数据#Static_2进行反序列化到VARIANT变量,最后再写入(METER_1(DB42))数据块

图10

5.     最后在OB1中调用 FB2

图11

学习完这段程序,对我受益非浅,对VARIANT和DB_ANY的使用也有了进一步了解。在这里,也对原PDF中的一些错误进行了修改,原PDF的代码输入到PORTAL,版本是V16。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200911A0LDY900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券