找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
转帖:
一个简单的例子:
下面就来讲解一下如何实现冒泡排序(冒泡原理,学过语言的人都应该知道,如果不知道,请上网找一个吧,到处都是):
假定十个数据,放在DB1中,安放顺序如下:
DBD0
DBD4
…
DBD36
下面是西门子的程序
OPN DB 1 /////打开DB1这个数据块
L 10 ////装载10到MB0中,因为有十个数据,要进行十次排序,9次也可以的
LL0: T MB 0
L P#0.0 ////装载地址指针,这是关键,不要搞错了
LAR1
L 9
LL1: T MB 2 ////内部循环,进行9次,直到把最大值排到最后
L DBD [AR1,P#0.0]
L DBD [AR1,P#4.0]
<R
JC LL2 ////比较前后两个值,如果前面大于后面的,则前后数据交换
L DBD [AR1,P#0.0]
T #m_temp
L DBD [AR1,P#4.0]
T DBD [AR1,P#0.0]
L #m_temp
T DBD [AR1,P#4.0]
LL2: +AR1 P#4.0 ////指针自动进行加4,因为是浮点数,所以要跳过4个字节
L MB 2
LOOP LL1 ///这个指令自动的将A寄存器里的值减1
L MB 0
LOOP LL0
L 8 //DB块里数据的总数
next: NOP 0
T #loop_counter
L #loop_counter
L 20
*I
T #data_word_address
CALL FC 1 //子程序
Address :=#data_word_address
Motor_No:=#loop_counter
L #loop_counter
LOOP next
2。子程序
net1:
OPN DB 1
net2:
L #Address
ITD
SLW 3
LAR1
net3:
A DBX [AR1,P#1.2] //1.2就是偏移量
JC end
STRUCT
usernumber : INT := 100;
data : ARRAY [1 .. 100 ] OF "Table";
END_STRUCT ;
BEGIN
usernumber := 100;
data[1].Index := 0;
data[1].ID := 0;
data[100].username[30] := B#16#0;
END_DATA_BLOCK
FUNCTION FC 1 : VOID
TITLE =
//查找相应ID对应的密码
VERSION : 0.1
VAR_INPUT
ID : INT ;
END_VAR
VAR_OUTPUT
Index : INT ;
password : DWORD ;
END_VAR
VAR_TEMP
count : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
L "userdb".usernumber;
_001: T #count; //表格项的偏移量
L 38;
*I ;
L 2; //表头处usernumber固定偏移量
+I ;
SLD 3;
LAR1 ;
OPN "userdb";
L DBW [AR1,P#2.0]; //表格内部偏移量
L #ID;
==I ;
JC _002;
L #count;
LOOP _001;
L 0;
T #Index;
T #password;
BE ;
_002: NOP 0;
OPN "userdb";
L DBW [AR1,P#0.0];
T #Index;
L DBD [AR1,P#4.0];
T #password;
END_FUNCTION
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!