东营西门子(中国)模块授权总代理商
编程技巧
1、 程序块尽量细化,方便阅读,将同一类型的设备控制放在一个程序块中;
2、 如遇特殊情况下采用语言编程,多数情况下请使用梯形图编程,方便别人阅读;
3、 对于经常调用的子程序,可以做成子模块,频繁调用,例如:求几个数平均值或求几个数的大值;
4、 程序要有注释,变量及中间变量必须有描述,方便别人阅读或以后查阅;
5、 定期做程序备份,工程名称+系统名称+当天日期;
6、 程序加密,防止别人窃取。
我想说plc入门容易,深造难啊。对于一些初学者,看看书看看视频没有专门的去实践学习,大部分了解了plc的原理,设计一些简单的程序可以运用自如,但是碰到一些复杂的要求时,就懵逼了,因为我以前也时常懵逼。plc这个东西就得把指令融汇贯通,运用自如,才能编出一些较复杂的程序。下面简单介绍一下学plc的技巧和方法,让大家更快地去熟悉plc、掌握plc,让我们口袋里的钱变得鼓鼓的。
首先、你得对编程感兴趣,设计出程序来感觉有成就感。有的人一看到界面,一看到要求,哎呦妈呀晕晕晕,哥快来扶我一把。这样的同学我劝你这辈子就告别工控这条路吧。
第二、学习plc编程要有一定的电器基础,要明白各个电器的用途,因为PLC说白了也就是把很多的电器实物程序化(比如说各种继电器及计数器等),但是也有的人跨来学,感觉工控好啊,工控好神奇啊,带着强烈的兴趣来探索工控这个奥秘。这样的同学可能后比有基础的同学学的还要好。
第三、选择一个品牌。
老大当然是西门子,尤其在冶金方面接近于99%。ABB在石油方面用到的很广。罗克韦尔也不错,就是价格稍微高一点。还有就是施耐德了。然后呢就是日本的一些牌子了,三菱、欧姆龙等。其次就是中国的一些品牌了比如说和利时,台达、信捷等一些品牌了。
第四、没时间的可以买本书买些视频或者看看,电脑下载一个对应的编程软件,试着编绘简易梯形图:一般以现有的电工原理图,根据其工作原理进行绘制,由浅 入深,先求画出,再求简单明了,慢慢领会绘制梯形图心得。首先要理解电工原理图的工作原理,根据电 工原理图的工作原理,再按 PLC 的要求进行绘制。应把握的是,不能简单地将 PLC 各接点与电工原理图上 的各接点一一对应(这是初学者的通病),若是这样的话就有可能步入死胡同,绘制的梯形图只要能达到 目的即可。有条件的就整个硬件或者模拟器。
再有条件又有时间就去报培训班学吧,那样学得会比自己学的全面容易,也有硬件供你练习实践
在下面的示例中数据被从三个不同的优化的数据块中读出或写入。三个数据块"Silo_Water", "Silo_Sugar" 和"Silo_Milk"都包含相同的变量声明:
DB 变量1:"MyBool" Bool类型
DB 变量2:"MyInt" Int类型
DB 变量3:"MyWord" Word类型
创建的PLC数据类型"SiloUDT"用于寻址包含不同数据类型的DB变量。 "AccessGroupSiloRead"功能块用于读出返回值,是由PLC 数据类型 "SiloUDT"定义的。基于此可以在一个FB中间接访问,例如如图.03所示的指令:
"Silo_Handling_OnlyReading"("AccessGroupSiloRead"(Index:= #Silo_Index));
创建环境
此FAQ中的截屏由 STEP 7 V13创建。
为了plc程序可读性强,短期内可以读懂并且能够修改,在PLC工作组内部需要统一我们的编程标准,以便适应将来工程人员调动后,原来的程序能够被后来的人在短期内读懂,现统一标准如下:
一、程序结构
1、 程序结构统一
OB1:主程序;
OB100:初始化程序(无需主程序调用);
OB35:100ms(可修改)中断(无需主程序调用),可以调用PID模块;
OB80、OB82、OB85、OB86、OB87、OB121、OB122:故障诊断模块(无需主程序调用、无需编程);
FC1:系统模式;
FC2:输入处理;
FC3:输出处理;
FC4:运行处理;
FC5:停止处理;
FC6:手自动切换;
FC7:
。。。
FC100:之后用来建立一些可以循环调用的子程序;
FC105:系统自带,模拟量输入子程序(可以循环调用);
FC106:系统自带,模拟量输出子程序(可以循环调用);
modbus通讯(CP341):FB7:P_RCV_RK,FB8:P_SND_RK;
通讯CP340:FB2:P_RCV,FB3:P_SND;
一般PID:用FB41;
温、湿度PID:用FB58;
如果程序块与系统块重复,请避让。
2、 数据块
DB1:AI数据,类型:REAL,与上位机接口;
DB2:AO数据,类型:REAL,与上位机接口;
DB3:DI数据,类型:BOOL,与上位机接口;
DB4:DO数据,类型:BOOL,与上位机接口;
DB5:设备运行时间及流量累计,类型:REAL,与上位机接口;
DB6:报警消息,类型:BOOL,与上位机接口;
DB7:类型:REAL,中间寄存器;
DB8:类型:INT,中间寄存器;
DB9:类型:WORD,中间寄存器;
DB10:类型:BOOL,中间寄存器;
DB11:之后用作与设备通讯用,例如:MODBUS通讯等;
DB100:之后用作调用FB块时的背景数据块;
M区:也作为中间变量。
东营西门子(中国)模块授权总代理商
程序编程
可以通过SFB/FB 14 "GET",从远程CPU中读取数据。
S7-300:在REQ的上升沿处读取数据。在REQ的每个上升沿处传送参数ID、ADDR_1和RD_1。在每个作业结束之后,可以分配新数值给ID、ADDR_1和RD_1参数。
S7-400:在控制输入REQ的上升沿处启动SFB。在此过程中,将要读取的区域的相关指针(ADDR_i)发送到伙伴CPU。远程伙伴返回此数据。在 下一个SFB/FB调用处,已接收的数据被复制到组态的接收区(RD_i)中。必须要确保通过参数ADDR_i和RD_i定义的区域在长度和数据类型方面 要相互匹配。
通过状态参数NDR数值为1来指示此作业已完成。只有在前一个作业已经完成之后,才能重新激活读作业。远程CPU可以处于RUN或STOP工作状态。如果 正在读取数据时发生访问故障,或如果数据类型检查过程中出错,则出错和警告信息将通过ERROR和STATUS输出表示。
通过使用SFB/FB 15 "PUT",可以将数据写入到远程CPU。
S7-300:在REQ的上升沿处发送数据。在REQ的每个上升沿处传送参数ID、ADDR_1和SD_1。在每个作业结束之后,可以给ID、ADDR_1和SD_1参数分配新数值。
S7-400:在控制输入REQ的上升沿处启动SFB。在此过程中,将指向要写入数据的区域(ADDR_i)的指针和数据(SD_i)发送到伙伴CPU。 远程伙伴将所需要的数据保存在随数据一起提供的地址下面,并返回一个执行确认。必须要确保通过参数ADDR_i和SD_i定义的区域在编号、长度和数据类 型方面相互匹配。
如果没有产生任何错误,则在下一个SFB/FB调用时,通过状态参数DONE来指示,其数值为1。只有在后一个作业完成之后,才能再次激活写作业。远程 CPU可以处于RUN或STOP模式。如果正在写入数据时发生访问故障,或如果执行检查过程中出错,则出错和警告信息将通过ERROR和STATUS输出 表示。
打开SIMATIC 315 PN-1的OB1,在OB1中依次调用FB14,FB15如图12、图13所示:
图12 FB14调用
表2.FB14参数说明 :
参数 | 描述 | 数据类型 | 存储区 | |
REQ | bbbbb | BOOL | I、Q、M、D、L | 上升沿触发调用功能块 |
ID | WORD | M、D、常数 | 地址参数ID | |
NDR | OUTPUT | 为1时,接收数据成功 | ||
ERROR | 接收到新数据 | |||
STATUS | 故障代码 | |||
S7-300: | IN_OUT | ANY | M、D I、Q、M、D、 | 从S7-200 SMART的数据地址中读取数据;V区数据对应DB1。 |
S7-300: | S7-300:M、D | 本站接收数据地址 |
图13 FB15调用
表3.FB15参数说明 :