当前位置:首页 » 编程软件 » 编程DBD

编程DBD

发布时间: 2023-03-07 14:18:12

㈠ 在博途1500中,编程可以直接用DB块数据,为什么还有个plc变量,这两者有什么区别吗

现在回过头来才发现,以前的“答非所问”,现在弥补一下啊

  1. PLC变量是用来定义I/O信号使用的.

    例如:外部数字量、模拟量输入信号,还有模拟量输出信号

    i0.0、i0.1 Q0.0 Q0.1

    还有内部M区继电器,定时器,计数器等,非DB块的寄存器都需要在PLC变量表中定义变量名称。

    =============================================

  2. 两者的关系就是直接寻址和符号寻址的关系

  3. 例如DB1.DBW0这个是直接寻址

如果DB块比较少,DB块内部的变量也比较少,这样是没啥问题的

但是如果DB块和DB块内部的变量多了,再使用这种绝对寻址方式就很不方便了。不容易区分哪个变量是做什么用的。

3.可以给每个DB块定义一个有含义的名字

1). 例如DB1是用来控制输送带1的可以取名为 Motor_01

DB1.DBX0.1 :是电机启动命令,取名为 Start_CMD

DB1.DBX0.2 :是电机停止命令,取名为 Stop_CMD

DB1.DBD2 :是电机速度设定,取名为 Speed_Set

这样在程序中写Motor_01.Start_CMD就是 DB1.DBX0.1

Motor_01.Stop_CMD就是DB1.DBX0.2

2).如果DB2是第二条输送带那么就可以取名为Motor_02

3).这样就是类似与面向对象的编程。

这里就不详细展开了,这个编程思路和方法需要慢慢揣摩了

这些方法都是在编写中大型程序时才能体现出它们的作用。

4. PLC变量是用来定义I/O信号使用的.

㈡ 西门子plc300中的编程中db1.dbd4是什么意思

数据块1的第四个地址开始的一个双整数型数据占用4个字节地址即DB1.DBB4,DB1.DBB5,DB1.DBB6,DB1.DBB7,

㈢ PLC ENT指令可以用什么指令替代

不可以用任何指令代替,ENT是入累加器堆栈指令,对于400来说,PLC有4个运算累加器,进入堆栈是将ACC3复制给ACC4,把ACC2复制给ACC3,这样的复制可以操作将运算结果暂存。可以加快部分运算的运算速度。
由于300只有2个运算累加器,因此ENT指令压堆栈是不可行的,所以,对于300来说,只能采取传出传入数据的方式来保存部分临时变量。。
例如这个实例
STL
解释
L
DBD0
//从数据双字DBD0中将值载入ACCU
1。(该值必须以浮点格式表示)。
L
DBD4
//将值从ACCU
1复制到ACCU2。从数据双字DBD4中将值载入ACCU
1。(该值必须以浮点格式表示)。
+R
//将ACCU
1和ACCU
2的内容作为
浮点数
(32位,IEEE
754)相加,并将结果保存到ACCU
1中。
L
DBD8
//将值从ACCU
1复制到ACCU
2,并从数据双字DBD8中将值载入ACCU
1。
ENT
//将ACCU
3的内容复制到ACCU
4。将ACCU
2的内容(中间结果)复制到ACCU
3。
L
DBD12
//从数据双字DBD12中将值载入ACCU
1。
-R
//从ACCU
2的内容中减去ACCU
1的内容,并将结果保存在ACCU
1中。将ACCU
3的内容复制到ACCU
2。将ACCU
4的内容复制到ACCU
3。
/R
//将ACCU
2
(DBD0
+
DBD4)的内容除以ACCU
1
(DBD8
-
DBD12)的内容。将结果保存在ACCU
1中。
T
DBD16
//将结果(ACCU
1)传送到数据双字DBD16。
对于这个实例,如果是在300的时候,ENT是不能用的,因此在L
DBD8的之前将结果传出,也就是例如T
LD20之类的。然后再载入运算。。不知道您是否明白了
也就是如果要改写例子上的400程序
应该这样改写
L
DBD0
L
DBD4
+R
T
LD40
L
DBD8
L
DBD12
-R
L
LD40
TAK
/R
T
DBD16
由于传入传出是要内存、
数据块
或者是临时存储区写操作和读操作,因此指令的执行时间将会比在寄存器中操作要慢一些,上段程序的执行时间将比原来的程序长,但是由于300没有四个寄存器操作,因此临时结果只能放在内存区、数据块或者临时存储区中了。
注意这里使用了TAK交换累加器指令,也就是说,当-R后,DBD8-DBD12的结果是放在ACC1里面的,载入LD40之后,ACC1的内容为LD40(也就是DBD0+DBD4),ACC2的内容是DBD8-DBD12,由于这时候如果用直接浮点数除法的指令,那么就变成了(DBD8-DBD12)÷(DBD0+DBD4)与原程序不符,使用了TAK指令后,ACC1内容将和ACC2的
内容交换
,也就似乎ACC1的内容进入了ACC2,ACC2的内容进入了ACC1,这样再用浮点数除指令的时候,就相当于分子和
分母
对调,与原题目就吻合了。这里使用TAK指令的目的,就是为了使得DBD8-DBD12的结果不必输出到临时变量或者是临时存储区等,保证了性能不进一步下降。这在语句表编程中相当常见,语句表编程一定要掌握累加器中的值的存储和传送方式。特别对于西门子S7
400这个有着4个累加器的PLC更是如此。

㈣ 西门子300plc里进行查询怎么编程

你可以这样编: L P#0.0 L MD10 SLD 3 +D T MD 10
OPN "DB1"
这样db1.dbd[md10]就是你想要的指针值了。比如MD10=4,那就是DB1.DBD4.
之后 L MD 10 L P#4.0 +D
那么db1.dbd[md10]就向后挪了一个双字变为DB1.DBD8。

希望采纳!

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:742
制作脚本网站 发布:2025-10-20 08:17:34 浏览:1006
python中的init方法 发布:2025-10-20 08:17:33 浏览:712
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:874
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:773
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1120
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:346
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:224
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:910
python股票数据获取 发布:2025-10-20 07:39:44 浏览:869