宝鸡西门子(中国)授权总代理商
在编写梯形图比较程序时有个小问题需要注意,OB40_MDL_ADDR和OB40_POINT_ADDR的数字类型分别是字和双字,不能直接用于整数比较指令和双整数比较指令。需要将它们保存到其他地址,然后参与比较。
S7 200:用于小型的电气控制系统中,着重于逻辑控制;
S7 300:用于稍大系统,可实现复杂的工艺控制,如PID、脉宽调制等;
S7 400:用于大型控制系统,主要是实现冗余控制。
200属于小型机,300属于中型机,小型机也是多功能机,将所有功能结合在一起,它的控制规模为zui大512点,CPU的运算处理速度不及中大型机快,小型机多为整体式的,扩展模块zui多可加8块,适用于小型设备,****;中大型机结构是模块化的,zui多可加300多块扩展模块,中大型机硬件较贵,成本高,但其运算处理速度快,有很强的通信功能,主要应用于中大型生产线,如化工行业,造纸行业,钢铁行业,汽车生产线,大型*空调,污水处理等,中国的中大型机以西门子的300和400为主,西门子的产品性能稳定,网络通信功能强大,程序简单,****。
一、硬件区别:
(1)zui主要地区别就是S7-300/400更模块化了,S7-200系列是整体式的,CPU模块、I/O模块和电源模块都在一个模块内,称为CPU模块;而S7-300/400系列的,从电源,I/O,CPU都是单独模块的。但是这么说容易让人误解200系列不能扩展,实际上200系列也可以扩展,只不过买来的CPU模块集成了部分功能,一些小型系统不需要另外定制模块,200系列的模块也有信号、通信、位控等模块。
(2)200系列的对机架没有什么概念,称之为导轨;为了便于分散控制,300/400系列的模块装在一根导轨上的,称之为一个机架,与*机架对应的是扩展机架,机架还在软件里反映出来。
(3)200系列的同一机架上的模块之间是通过模块正上方的数据接头的;而300/400则是通过在底部的U型总线连接器连接的。
(4)300/400系列的I/O输入是接在前连接器上的,前连接器再接在信号模块上,而不是I/O信号直接接在信号模块上,这样可以更换信号模块而不用重新接线。
(5)300/400系列的CPU带有profibus(profibus是一种化.开放式.不依赖于设备生产商的现场总线标准)接口。
二、软件区别:
(1)200系列用的STEP7-Micro/WIN32软件;300/400使用的是STEP7软件,带了Micro和不带的区别是相当的明显的。
(2)200系列的编程语言有三种--语句表(STL)、梯形图(LAD)、功能块图(FBD);300/400系列的除了这三种外,还有结构化控制语言(SCL)和图形语言(S7 graph)。
(3)300/400软件zui大的特点就是提供了一些数据块来对应每一个功能块( Block-FB),称之为Instance。
(4)300/400再也不能随意的自定义Organization Block、sub-routine和Interrupt routine了,现在OB1惟我独尊了,没事系统只能调用它了,其它的什么东东则变成了FB- Block和FC-,其它的也是预定义成了系统的了,System的S给它们(SFB、SFC)定义了自己的身份。
(5)300/400中提供了累加器(ACCU)和状态字寄存器、诊断缓冲区。
描述
采用间接寻址时,只有程序执行时,用于读或写数值的地址才得以确定。使用这种方法可以减少编程量并使得程序更灵活。通常来讲,程序创建后访问地址也就确定了。为了使得间接寻址更灵活和更安全,可以
使用"Array"数据类型用于组合相同的数据类型。
对于不同的存储区,采用index来访问相关的针对每个应用不同的变量。
在下面的例子中,对于三个变量的访问采用了不同的存储区。表01 显示了三个变量的访问列表,每个都有单独的索引。
索引 | 访问变量 | 存储区 |
1 | Input_Word_0 | EW 0 |
2 | "Processdata".Temperature | DB 1 |
3 | Output_Word_4 | AW 4 |
表01
创建一个功能,并声明输入变量为"Int"类型。图.01 显示了对于"AccessGroupInt"功能块的编程示例,通过index进行间接寻址并返回值。可以在程序中直接使用间接访问,例如使用指令#TempValue:= "AccessGroupInt"(#Index);。这一编程方法
可追踪,因为可以使用交叉索引。
安全,因为仅使用了预定义的内存区。
通用,因为既可以用于标准块也可以用于优化的数据区 。
控制模式1、 系统设置远程/本地/手动按钮1.1、 远程:只能通过上位机对系统进行自动启/停控制,单台设备就地控制优先,在程控时,可以通过上位机对设备进行软手操/自动切换,软手操启/停;
1.2、 本地:只能通过触摸屏对系统进行自动启/停控制,单台设备就地控制优先,在程控时,可以通过触摸屏对设备进行软手操/自动切换,软手操启/停;
1.3、 手动:手动控制时,上位机/触摸屏失效,只能通过手动控制设备的启/停。
2、 单台设备控制单台设备必须有软手操/自动切换以及软手操时可以启/停功能,由自动切换到软手操时,设备不能停机;由软手操切换到自动时,设备启/停取决于自动程序。
3、 单台设备(泵、风机及其它大型设备)运行满24小时必须进行轮换,且必须有运行时间累计,如果由上位机设定启/停顺序除外,操作人员自行设定;
三、编程技巧1、 程序块尽量细化,方便阅读,将同一类型的设备控制放在一个程序块中;
2、 如遇特殊情况下采用语言编程,多数情况下请使用梯形图编程,方便别人阅读;
3、 对于经常调用的子程序,可以做成子模块,频繁调用,例如:求几个数平均值或求几个数的大值;
4、 程序要有注释,变量及中间变量必须有描述,方便别人阅读或以后查阅;
5、 定期做程序备份,工程名称+系统名称+当天日期;
6、 程序加密,防止别人窃取。
我想说plc入门容易,深造难啊。对于一些初学者,看看书看看视频没有专门的去实践学习,大部分了解了plc的原理,设计一些简单的程序可以运用自如,但是碰到一些复杂的要求时,就懵逼了,因为我以前也时常懵逼。plc这个东西就得把指令融汇贯通,运用自如,才能编出一些较复杂的程序。下面简单介绍一下学plc的技巧和方法,让大家更快地去熟悉plc、掌握plc,让我们口袋里的钱变得鼓鼓的。
此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区:也作为中间变量。
in | Input | DInt | 需要做积分计算的值 |
enable | Input | Bool | 使能积分计算 |
reset | Input | Bool | 复位( 为 True 时复位输出参数) |
out | Output | LReal | 积分后的值(可保持) |
error | Output | Bool | 错误输出 |
描述
创建一个功能,并声明输入变量为"Int"类型。图.01 显示了对于"AccessGroupInt"功能块的编程示例,通过index进行间接寻址并返回值。可以在程序中直接使用间接访问,例如使用指令#TempValue:= "AccessGroupInt"(#Index);。这一编程方法