DB数据块中的数据如何赋值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DB数据块中的数据如何赋值相关的知识,希望对你有一定的参考价值。
我目前看到一个程序,里面有个DB1块,DB1.DBD24、DB1.DBD28所赋的初始值是0,程序里面也没有赋值的程序,而是直接写了一句LDB1.DBD24,而再在线看时DB1.DBD24有数,不是0,这个数是从哪儿写进去的,我始终没看明白,特向各位大侠请教,谢谢。
1、打开MCGS组态工程软件,点击实时数据库界面。
2、点击新建对象,名称为时间,数据类型为数值型。
3、添加完成后如下图所示。
4、图中变量表没有DB块变量,所以需要自行增加设备通道。
5、因为是和DB10中的第一个变量关联,所以为V寄存器,32位浮点数,地址是10,个数为1。
6、在显示输出界面中关联变量,设置数据类型为浮点数,小数点等其他格式都按需求设置。
参考技术A 那倒不见得。你先看看此DB是否为背景DB;然后就是搞明白寻址方式。 参考技术B DB数据块除了初始值赋值外,在STEP7标准库自带的功能块(加锁)你是看不里面的程序,里面是否赋值你可能不知道.另外,采用符号名进行赋值,采用间接寻址方式赋值,PLC之间通过通讯进行赋值,上位机系统或触摸屏里赋值等等,你都有可能看不到直接的赋值. 参考技术C 建立数据块,定义数据结构,在初始值栏目中给出数值即可,在线监控该数据块就可看到初值和实际数值的变化情况 参考技术D 程序中有地方调用了DB块的地址,存在数据存取.如果没使用的空地址区,没赋初始值的话可能存在的是随机数.异常块中的事务 - 如何?
【中文标题】异常块中的事务 - 如何?【英文标题】:Transaction in an exception block - how? 【发布时间】:2017-02-02 11:04:11 【问题描述】:请哪位好心的人指出这是错误的地方吗? 我正在尝试运行一个非常简单的事务测试,但甚至无法运行该语句。我正在尝试在 PG Admin 的 SQL Query 窗口中运行它。没有其他与数据库的连接。
DO $$
BEGIN
START TRANSACTION;
UPDATE IsolationTests SET Col1 = 2;
perform pg_sleep(5.0);
ROLLBACK;
EXCEPTION WHEN division_by_zero THEN
BEGIN
END;
END $$;
我想玩转事务级别并在代码中开始和结束事务。如果我注释掉“开始交易”和“回滚”,则语句运行良好。取消注释它们,我得到了
"ERROR: cannot begin/end transactions in PL/pgSQL HINT: Use a BEGIN block with an EXCEPTION clause instead."
嗯?它在 BEGIN ... EXCEPTION 块中,不是吗??
【问题讨论】:
在 PL/pgSQLBEGIN ... END
中不是关于事务的。这是一个语法块。就像 Java 或 C++ 中的 ...
一样,DO
块是一个匿名函数,您不能在 Postgres(或 SQL Server 中)的函数中进行事务控制。不幸的是 Postgres 没有存储过程,所以你总是需要在调用代码中管理事务
它不喜欢 PlPgSql 中的START TRANSACTION;
,不在异常块中开始
@a_horse_with_no_name - 好的,谢谢。为了确保我清楚这一点:唯一的方法是使用 C# 库打开连接,在该连接上发出“开始事务”语句,然后在终止连接之前发出“回滚”或“提交”?
基本上是的。如果我没记错的话,你可以在函数中拥有的唯一“事务控制”是保存点
【参考方案1】:
回答您的问题 - 指出这是错误的地方:START TRANSACTION;
而不是 EXCEPTION
块中的 BEGIN
语句...
我不确定你想做什么。这是回滚事务的示例(表 t 已创建,但未提交 => 不存在),但异常 (/0) 已捕获并已处理(引发的信息):
t=# begin;
BEGIN
Time: 0.124 ms
t=#
t=# DO $$
t$# BEGIN
t$# begin
t$# create table t (i int);
t$# end;
t$# perform 1/0;
t$# EXCEPTION WHEN division_by_zero THEN
t$# BEGIN
t$# raise info '%','exc catched';
t$# END;
t$#
t$# END;
t$# $$
t-# ;
INFO: exc catched
DO
Time: 10.288 ms
t=#
t=# rollback;
ROLLBACK
Time: 0.152 ms
t=#
t=# \dt+ t
No matching relations found.
t=# ;
Time: 0.062 ms
【讨论】:
感谢您的回复,Vao。我认为 a_horse_with_no_name 已经回答了我的问题。以上是关于DB数据块中的数据如何赋值的主要内容,如果未能解决你的问题,请参考以下文章
西门子PLC中的DB块,如何使用有啥作用?数据类型有啥,可以在程序中发挥啥作用呢?新人无法理
如何使用从 Swift 3 中的滑块中选择的 JSON 数据更新 tableviewcell?
在verilog HDL语言中的阻塞赋值和非阻塞赋值究竟有啥不同?同一变量在不同的过程块中(同时触发)又是如
您好,刚开始接触verilog 请问,是否reg型信号必须在always块中,而always块的输出可以不是reg型数据