登录
首页 PLC论坛 罗克韦尔Rockwell(AB)
回帖 发帖
正文

主题:AB调试笔记3.2——程序篇2

点击:5789 回复:22

1. 数据类型
常用数据类型和西门子类似,SINT(短整形)、INT(整形)、DINT(双整形)、REAL(实型)、STRING(字符串)。区别就在于,西门子多了无符号整形(USINT、UINT等)、WORD(实际应用中我也把它和INT混用),并没什么影响。
附件 1.jpg
如上图,我建立了一个SINT变量,可以看到,可以单独访问SINT的每一个位,这一点做的比西门子灵活。右侧复选框可以选择显示方式,2进制、10进制、16进制及ASC码显示均可轻易切换。
附件 2.jpg
上图为字符串。可以看到,字符串名.LEN变量指明了此字符串包含元素数量,字符串名.DATA数组指明了每一位的数据。其实西门子的数组也是类似的存储方式,但是表达不如AB清晰。
2. I/O地址问题
使用AB的PLC,可以把I/O地址这个想法抛弃了。什么I0.0、Q0.0,根!本!没!有!
附件 3.jpg
如上图,当你工程加入PLC后,会自动加入Local1的一些标签,Local:1:I表示PLC的输入点,同理Local:1:O表示PLC的输出点。Local:2表示PLC本机扩展的第一个模块,以此类推。图中可以看到,我第一个扩展模块是8位输入模块。本机16DI&16DO,扩展模块是8DI,所以Local:1:O.Data是0-15,而Local:2:1.Data是0-7。
附件 4.jpg
如上图,我先定义一个标签InS1,然后点击红色方框,选到Local:1:I.Data,选择12,这个标签就和PLC的第12个输入地址连接起来了,程序中就可以直接调用InS1。当然,也可以直接调用Local:1:I.Data.12,效果是一样的,只是自定义标签用起来可读性更高。输出点及扩展模块类似,不赘述。当然连接的不只是输入输出点,中间变量也可以用标签连接。你定义一个INT,也可以用类似的方式连接他的某一个点。
3. 标签表
项目建立好后会自动生成Controller Tags,默认生成的标签都在里边。Controller Tags生成的标签可以在程序中任何地方调用。建议,尽量把所有的标签都放到这里边,虽然会很长,看起来头疼,但是用起来方便一点。
4. 任务(Tasks)
任务分为三种:MainTask(主程序任务)、Periodic(周期性任务)、Event(事件任务)。主程序是一定要有的。周期性任务可以设置多长时间执行一次,秒脉冲方波就是用这个程序生成的。事件任务项目用不上,我就没玩。
附件 5.jpg
在Tasks上右键,点击New Tasks,可以新建任务。在Type中可以选择周期性任务和事件任务。如上图,选择周期性任务,在红框内设置该任务多长时间执行一次。该参数可以更改。
5. 建立程序
附件 6.jpg
如上图,在MainTask点击右键——Add,点击New Program,即可在主任务中增加程序。主任务中的程序会一直执行。Pulse是我建立的一个周期性任务,也可以同样的方式增加程序,该程序就按照Pulse中设置的时间周期性执行。
6. 自定义
(1) 数据结构体
在Data Types——User-Defined右键,New Data Type,可以新建结构体。
附件 7.jpg
如上图,可以往结构体内添加各个元素。另,数组的设置方法是,在上图所示的Dim0中填入数字,即可设置数组长度。
和西门子一样,结构体定义好以后,就可以在建立变量的时候选择该数据类型了。
(2)附加指令(函数)
老规矩,Add-On Instructions右键——New Add-On Instructions,可以新建自定义指令(实际上就是函数,觉得叫函数更习惯)。如我建立的Mode函数,用作手自动切换程序。
附件 8.jpg
每建立一个函数都会自动生成两个文件,一个是Parameters and local Tags,这里是标签,对应西门子的FB/FC就是定义变量的地方。另一个是Logic,就是写程序的地方。点开Parameters and local Tags,添加新标签,可以选择为Local Tag(相当于静态变量)、Input(输入)、Output(输出)、InOut(输入输出)。建议Input访问方式选择Read/Write,原因以后再讲。
附件 9.jpg
双击Logic,可以编写逻辑程序。
附件 10.jpg
★在函数文件夹上右键——Open Definition可以打开设置选项。最重要是Parameters选项卡。在图上红框部分。绿框部分可以设置调用程序时是否显示该标签。
附件 11.jpg
以此程序为例,我在主程序中,Add-On选项卡中找到Mode函数,拖到梯形图中。程序段如果没有问题,线是蓝色;有问题,线是红色。可以看到我填写了两个参数:ModeDB和InAutoKey。ModeDB相当于西门子FB的背景数据块,是需要建立的。
附件 12.jpg
如果没有建立,可以现在里面填入标签名(例如ModeDB1),然后右键——New ModeDB1,出现标签创建设置界面。Scope选项卡选择将该标签建立在哪里。前面已经讲过了,如果条件允许,建议都放到主标签(Controller Tags)里(把这个选项卡一直往下翻到底,PLC标志项目名的就是)。然后点击Create,该标签建立完成。几乎所有标签都可以用这种方式建立,反正我是没有遇到不行的。还可以在Usage选择标签类型。如函数里边就需要选择输入、输出等。
好了,这些步骤都是为了前面一步做准备。
回到前面★部分,绿框中我勾选了AutoKey一行的两项,所以我程序里需要填写AutoKey的标签。没有勾选的都可以不填!西门子的FB/FC,每一个管脚都得填,相对来说AB节省了一些工作量。举例,我程序中涉及到两个触摸屏的按钮:HMIAuto和HMIManual,按照西门子的做法,我需要先建立HMIAuto和HMIManual两个变量,但是AB不用,我只需要在触摸屏上使用ModeDB. HMIAuto和ModeDB. HMIManual就行了,不需要新建额外的标签(一会标签一会变量烦死了)。下边那个数字1不用管它,如果你填入了某个数值,那就是默认值。
18-08-29 10:59
等楼主更新要等很久。。。
18-08-29 12:46
呵呵,我也是不忙的时候才抽点时间写一点,又没有稿费(我这点水平也没资格,这个论坛里比我强的还有一大把),有时间就写一点,没时间就拉到罗
18-08-29 16:44
不用绝对地址的编程,感觉是不是很爽?
18-08-29 17:11
给楼主点赞,对新的品牌PLC接受能力很强啊楼主。
另外,西门子的FB引脚也是可以空着的,你可以一个引脚都不用填,因为有了背景数据块。其次你说建立的手动自动两个变量,西门子需要新建,其实也是不用的。你既然可以从AB的PLC里的这个功能块(我看了和西门子的FB一样调用时都是要用背景数据块)的背景数据里取了ModeDB. HMIAuto和ModeDB. HMIManual这两个变量,那么同理你也可以试下,西门子的FB块的背景数据块的变量你也是可以直接拿来用的。
  其实背景数据块,可以这么理解,那就是如果你给了外部值赋值到这个功能块的接口上,那么就以外部数据工作。如果你没有给接口赋值,那么它就采用它的背景数据块的值。我有很多程序,直接是调用几次功能块,然后产生了几个对应的背景数据块,我给每个功能块所有引脚都不赋值,程序上只需要对相应的背景数据块进行操作就好了。就像你的上述两个变量就是如此。
18-08-29 17:21
慢慢来吧,给后来人铺路顺便露一手嘚瑟一下,甚好!
18-08-29 18:11
我记得西门子的FC引脚是必须填变量的,FB某些不用,但是显示的时候就一直显示一个false,看起来很不爽,所以都把它填了,所以我没尝试过这种方式。AB这样直接不现实,可以明目张胆的不填了。
18-08-29 22:13
接受能力这个事,我觉得没有什么玄乎的,我的智商只是属于中等,意味着世界上超过一半的人都比我聪明。各个厂家的PLC编程都大同小异触类旁通,只要愿意花时间研究,超过一半的人都可以比我更出色,只是是否愿意下功夫研究而已。
18-08-29 22:15

引用 deweg 在 2018/8/29 17:11:12 发言【内容省略】

是!图纸更不爽!这次图纸我都是标了I/O地址了的,发现坑了,但是无所谓,图纸不影响,就这么着了
18-08-29 22:20

引用 jint 在 2018/8/29 18:11:34 发言【内容省略】

有人看了文章能够绕过一些坑,那就有价值了。话说今年的葵花宝典我是不是又要预定一些篇幅了?
18-08-29 22:21

上一页下一页

工控新闻

更多新闻资讯