故事作者:YiMoon

最近创作

看看TA的故事

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

已锁定

YiMoon

西门子1847工业学习平台

  • 帖子

    1230
  • 精华

    35
  • 被关注

    84

论坛等级:至圣

注册时间:2005-04-14

钻石 钻石 如何晋级?

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

11660

18

2020-02-11 13:02:11

star star star

  一但使用上了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。

附件1:修改后的DB_ANY pdf文件(下载后删除前面2个压缩包的.zip后缀)

 

DB_ANY.z01.zip

DB_ANY.z02.zip

DB_ANY.zip

附件2:代码程序V16

 

DB_ANY_20200211_1120.zip

 


【技】学习《DB_ANY之MODBUS-RTU轮询程序》有感 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3243条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。