四时宝库

程序员的知识宝库

西门子S7-300/400指针经典使用(西门子s7300指令全集)

对于初识指针的朋友们,只看手册会一脸懵B,因为有很多东西无从理解,知识点也比较广泛。下面举个经典应用给大家,理解后会对指针的应用一目了然。


//Transfer address

L #Value_To_DB_Number

T #Value_To_DB_Number_T

L #Sample_Start_Address

T #Sample_Address

//Initiate LAR1,the Sample_Start_Adress

LAR1 P#256.0

L #Sample_Start_Address

L 256

-I

L 2

/I

T #Counter_1

C_1B: L #Counter_1

L 0

<=I

JC C_2

+AR1 P#2.0

L #Counter_1

L 1

-I

T #Counter_1

JU C_1B

//Initiate LAR2,the Value_To_Start_Address

C_2: LAR2 P#0.0

L #Value_To_Start_Address

L 0

-I

L 1

/I

T #Counter_2

C_2B: L #Counter_2

L 0

<=I

JC Go

+AR2 P#1.0

L #Counter_2

L 1

-I

T #Counter_2

JU C_2B

//Open DataBlock

Go: OPN DB [ #Value_To_DB_Number_T]

//Initiate Alrm_Control_Lamp

R #Alarm_Lamp_Temp

R #Alarm_Voice_Temp

//计算采样值

Top: L PIW [ AR1 , P#0.0 ]

ITD

DTR

T #Value_Sample

// 新工程值

//=采样值*(量程上限-量程下限)/27648+量程下限+修正值,和老工程值做平均滤波

L #Value_Sample

L 2.75e+2

<R

JCN get

L 0.0e+0

T #Value_Sample

get: L DBD [ AR2 , P#16.0 ] //取得量程上限

L DBD [ AR2 , P#12.0 ] //取得量程下限

-R

L #Value_Sample

*R

L 2.7648e+4

/R

L DBD [ AR2 , P#12.0 ] //取得量程下限

+R

L DBD [ AR2 , P#8.0 ] //取得修正值

+R

L DBD [ AR2 , P#0.0 ] //取得工程值

+R

L 2.0e+0

/R

T #Value_Project

L #Value_Project

L DBD [ AR2 , P#12.0 ] //取得量程下限

<=R

JCN LimU

L DBD [ AR2 , P#12.0 ] //取得量程下限

T #Value_Project

JU Perc

LimU: L #Value_Project

L DBD [ AR2 , P#16.0 ] //取得量程上限

>=R

JCN Perc

L DBD [ AR2 , P#16.0 ] //取得量程上限

T #Value_Project

Perc: L #Value_Project

T DBD [ AR2 , P#0.0 ] //送往工程值

// 新百分比

//=(工程值-量程下限)/(量程上限-量程上限)*100.0

L DBD [ AR2 , P#16.0 ] //取得量程上限

L DBD [ AR2 , P#12.0 ] //取得量程下限

-R

T #Sub_Limit

L #Sub_Limit

L 0.0e+0

==R

JCN Per

L 0.0e+0

T DBD [ AR2 , P#4.0 ] //送往百分比

JU Judg

Per: L DBD [ AR2 , P#0.0 ] //取得工程值

L DBD [ AR2 , P#12.0 ] //取得量程下限

-R

L #Sub_Limit //取得量程上限下限差

/R

L 1.0e+2

*R

T #Value_Percentage

L #Value_Percentage

L 0.0e+0

<=R

JC Per1

L #Value_Percentage

T DBD [ AR2 , P#4.0 ] //送往百分比

JU Judg

Per1: L 0.0e+0

T DBD [ AR2 , P#4.0 ] //送往百分比

//报警判断

Judg: L DBD [ AR2 , P#28.0 ] //取得报警信息

T #Alarm_Message_Old

CLR

O DBX [ AR2 , P#32.0 ] //报警允许状态

JC Aler

L 0.0e+0

T DBD [ AR2 , P#28.0 ] //清报警信息

JU Done

Aler: CLR

L DBD [ AR2 , P#0.0 ] //取得工程值

L DBD [ AR2 , P#20.0 ] //取得报警下限

<=R

JCN Al_1

L -1.0e+0

T DBD [ AR2 , P#28.0 ] //置报警信息:-1

S #Alarm_Lamp_Temp //输出灯光报警

JU Al_D

Al_1: L DBD [ AR2 , P#0.0 ] //取得工程值

L DBD [ AR2 , P#24.0 ] //取得报警上限

>=R

JCN Al_2

L 1.0e+0

T DBD [ AR2 , P#28.0 ] //置报警信息:1

S #Alarm_Lamp_Temp //输出灯光报警

JU Al_D

Al_2: L 0.0e+0

T DBD [ AR2 , P#28.0 ] //清报警信息

// ( 0)->( 0) 不处理

// ( 0)->(<>0) 置声音报警,请求消音

// (<>0)->( 0) 不处理

// (<>0)->(<>0) 置声音报警

Al_D: SET

// ( 0)->(<>0) 置声音报警,请求消音

A(

L #Alarm_Message_Old

L 0.0e+0

==R

)

A(

L DBD [ AR2 , P#28.0 ] //取得报警信息

L 0.0e+0

<>R

)

JCN Al_X

S #Alarm_Voice_Temp //置声音报警

S %DBX0.2 //置报警消音

JU Done

Al_X: SET

// (<>0)->(<>0) 置声音报警

A(

L #Alarm_Message_Old

L 0.0e+0

<>R

)

A(

L DBD [ AR2 , P#28.0 ] //取得报警信息

L 0.0e+0

<>R

)

JCN Done

S #Alarm_Voice_Temp //置声音报警

//计算工程值下一路地址

Done: +AR2 P#34.0

//计算采样值下一路地址

+AR1 P#2.0

L 2

L #Sample_Address

+I

T #Sample_Address

L #Sample_Address

L #Sample_End_Address

<=I

JC Top

//报警消音处理

CLR

O #Alarm_Voice_Temp

A %DBX0.2 //与报警消音状态

= #Alarm_Voice_Temp //输出声音报警

//报警输出

CLR

O %DBX0.0 //或报警灯光输出

O #Alarm_Lamp_Temp

= %DBX0.0 //得报警灯光输出

CLR

O %DBX0.1 //或报警声音输出

O #Alarm_Voice_Temp

= %DBX0.1 //得报警声音输出

BEU


//欢迎工控爱好者一起交流成长,该程序可直接使用,是用指针做的模拟量读取转存至DB块中,通知DB块的地址便宜多了一些上下限、报警等;

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接