HELLO 各位小伙伴,大家好,上次我们分析了CELL程序,今天我们继续分析这一套程序。main()模块是这套程序中的主模块。CELL程序通过PGNO调用了唯一的一个case--main()接下来我们打开这个模块
main()头部分
3行:CONTINUE,让程序预读,这一行我觉得写不写都行
4-6行:这里用了T1模式作为是否执行INI的条件,也就是说不是T1的话机器人将不执行INI
(打开INI的折合看并没什么特殊。这样做的目的是为了不让第9行的运动初始化执行,而T1模式为了保证能手动运行才出此办法。)
8行:进入主循环
10行:预读(以下省略)
11行:判断输入端程序启动信号是否为false
12行:14行,等待输入端程序启动为true(包含停止计时器)
19行:输出端程序运行赋值为true(表示程序已经启动)
22行:通过输入端的iprognr(程序号,进行分配工作步骤分配;config中定义了这个信号)
分配器部分
主工作分配,
case1:回原位
case2:到安全位置
case11:抓取输送线上的东西
case12:测量
case13:去毛刺
case14:推...
case15:打孔位
case16:不合格位
case17:抓取测试零件
case18:拍照测试
default:输出错误信息7(这里是个自定义报警信息发送给plc,信号在config定义)
56行:等待false(用于留住运行指针,等待人工处理)
个人观点
通过这段代码可以看出机器人的整个流程被拆分成了部分工作步骤,并且由PLC自由调配。这样的做法可以让整个流程更方便单独执行某一部分。
这里又出现了一个命名规则值得学习-程序名称:case号_位置名称_功能
整个main()程序看下来大部分都还是比较好理解,唯一不常见的用法是程序头上的INI行,我们大多数时候是根本不管INI这行的作用,甚至不知道INI到底干了什么。
这里单独拿INI折合探讨一下:
7行:一个中断,采用了急停的信号触发,并且调用了一个IR_STOPM() 程序,机器人硬件部分做了急停回路,所以这个子程序并不是用于停止机器人的,而是用于做急停后的一些信号处理。也支持用户对这个程序进行编程。
8行:启动中断
9行:初始化运动参数,通常如果不对运动参数初始化,机器人就没办法执行非联机表单的运动程序,另外从A程序调用B程序时,如果B程序执行了初始化那么第一个运动点就无法逼近。所以这个程序用IF $TI==TRUE 来决定是否需要执行INI.
到此MAIN()程序就算分析结束,如果你觉得有用就把它分享给你的朋友吧!!!