实验仪器参数关系表达与传递

实验仪器参数关系表达与传递

原理性描述:

在不同实验仪器之间,实现信号的传递,其实都可以转化为信号参数的传递。因此,各个实验参数的同步与刷新是表述仪器逻辑关系的关键。仪器需要传递的参数可以是string、double、list、bitmap以及自定义的类等等。在这些关系,除了自定义的类、枚举这类信息属于仪器自有特殊类型外(定义在仪器类库中,而不是指公共库),其他参数都具有通用的数据类型,而特殊类型也可以通过公共类型参数进行简介表达,通用数据类型的传递可以通过C#泛型和反射完成接口对接。

由于能量守恒,实验中的任意一个信号不会凭空产生或消失,那么所有的信号都会有起源和终止位置。而我们要研究的信号都是有传递方向的,仿真就是把一个仪器状态的变化引起其他仪器状态变化的过程用计算机表现出来。这种逻辑关系在数学上可以对应于“有向图”,引号表明有区别,因为数学研究的有向图是针对图的路径、权重、拓扑关系,对于图的有向性表达的含义在物理上可以对应到信号传递的方向性上,我们把数学研究的有向图算法当作骨骼,物理信号传递当作血肉,图中的每一个节点都当成一个输入与输出。

信号传递示意图

上图中,这样的关系有些类似于神经网络结构,只是神经网络是通过训练得到参数关系,而我们的节点是直接以物理模型得到参数关系。每一个节点都是一个输入输出模型,对应实际实验仪器,黑色的线表示仪器之间的参数传递关系,箭头表示传递方向。信号的传递可以是单向、双向、环形回路;实验中也会有多个信号源;仪器构成的图,可以是连同图,也可以不连通。为了提高参数刷新效率,我们不需要建立一个实验所有参数的完备集合,每个仪器只要获取到自身完备参数集合即可,即不相关参数不获取。

算法设计思路:

如果仪器的某一个参数由其他仪器获得,则该仪器在使用时,必须在此仪器内部进行该参数的定义,内部定义的这个参数相当于代理参数,由此参数进行实际运算。仪器与场景之间定义的参数接口,目的就是要从源仪器获得数据,用来更新目标仪器的代理参数值,而源仪器需要公开自身对其他仪器的影响参数。我们可以想象在两个节点之间,它们的连接边线就相当于打开一个数据通道,源仪器把参数加入通道,目标仪器从通道中获取参数并加工成新参数,并将加工后的结果按要求进行继续传递。

在算法设计时,首先查出所有的源仪器,然后循环源仪器的目标仪器列表,并将源仪器公开参数列表刷新给目标仪器。需要注意的是源仪器的目标仪器列表是一个动态列表,比如电路中电流的流动方向可看作有向性信号,那么源和目标就取决于仪器的电路连接;光路中光的传播也是有向性信号,源和目标取决于光路的摆放;热力学中的热量传播也是有向性信号,源和目标取决于温度的高低。此外,比如温度计,只能作为目标仪器测量温度,要确定的就是测量的是哪个仪器的温度。根据这些物理规律,我们基本上可以确定仪器之间的参数传递方向。

当然为了模型更加通用,我们可以把源仪器和目标仪器抽象成触发和被触发对象,并且要求传递的参数必须满足一定的触发条件,只有满足触发条件,仪器参数才可以从源传递到目标仪器。在仿真实验中,这种触发条件,通常是仪器的坐标位置关系、连接关系、计时器设置。为了简化算法,我们只考虑坐标位置关系和连接关系两种情况:一、坐标位置关系,两个仪器满足特定的位置坐标时,触发刷新条件。例如,物品放置到载物台上,温度计放置到待测液体中,光学元件放置到光路中等等。 这其中包括:包含关系、并列关系、串联关系;二、连接关系,两个仪器通过一定方式连接起来,表明这两个仪器具有特定的连接关系。这种连接可以是用户用鼠标交互建立的连接,也可以是通过配置文件设定建立的连接。连接关系应用最多的是电路导线,此外,还有一些未被等效为电路的仪器,但是也需要连线才能确定状态的仪器,例如热敏实验中的电炉、连一根线就直接传递信号的示波器等等。

时间: 2024-11-09 03:57:47

实验仪器参数关系表达与传递的相关文章

管窥MVVMLight Command参数绑定和事件传递

前言 由于在实际项目中,业务功能的增加导致软件开发规模在逐渐变大,所以我准备找个Silverlight框架来组织当前项目中的文件,以期能够让后续的业务功能增添和维护更加容易一些.无意中,我在这篇文章中看到了当前Silverlight下所有的框架的评测:Discover and compare existing MVVM frameworks !,当我看到MvvmLight toolkit在各方面都比较完备的时候,于是决定选择这个框架: 在Codeplex网站上,下载了MVVM Light Too

Java调用函数传递参数到底是值传递还是引用传递

今天翻看微信上有关Java技术的公众号时,看到了一篇关于Java中值传递的问题,文章讨论了在Java中调用函数进行传参的时候到底是值传递还是引用传递这个面试时会问到的问题.之前也接触过类似的问题,但只是知道是值传递,具体到为什么,一直不是太清楚.今天看了一下,算是明白了,写个博客记录一下. 首先先声明一下,在Java中函数传参是值传递,不是引用传递.要弄清楚这个问题之前要先弄清楚什么是值传递,什么是引用传递. 值传递(pass by value):是指在调用函数时将实际参数复制一份传递到函数中,

springMVC通过ajax传递参数list对象或传递数组对象到后台

springMVC通过ajax传递参数list对象或传递数组对象到后台 环境: 前台传递参数到后台 前台使用ajax 后台使用springMVC 传递的参数是N多个对象 JSON对象和JSON字符串 在SpringMVC环境中,@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象.然而在ajax请求往往传的都是Json对象,用 JSON.stringify(data)的方式就能将对象变成字符串.同时ajax请求的时候也要指定dataType: "json",

有关java参数的两种传递机制

值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值.    引用传递:也称为传地址.方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值. a.传递值的数据类型:八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地址,只是string对象和其他对象是不同的,string对象是不能被改

254 在js调用函数时,传递变量参数时, 是值传递还是引用传递

问题: 在js调用函数时,传递变量参数时, 是值传递还是引用传递 理解1: 都是值(基本/地址值)传递 理解2: 可能是值传递, 也可能是引用传递(地址值) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>02_关于数据传递问题</title> </head> <body> <

java方法参数传递方式只有----值传递!

在通常的说法中,方法参数的传递分为两种,值传递和引用传递,值传递是指将实际参数复制一份传递到方法中, 在方法中的改动将不会影响到实际参数本身,而引用传递则是指传递的是实际参数本身,在方法中的改动将会影响到实 际参数本身.但是,在java中只有值传递,没有引用传递!那么,为什么当方法参数是基本数据类型时表现是值传递, 而当是引用类型时表现的是引用传递形式呢? Java内存区域中含有java堆和虚拟机栈两个内存区域(并不是只是将java内存区分为这两个内存区域,此外还有程 序计数器,本地方法栈以及方

js中变量含(参数、数组)作用域传递问题

js没有块级作用域(你可以自己闭包或其他方法实现),只有函数级作用域和全局作用域,函数外面的变量函数里面可以找到使用,函数里面的变量外面无法访问到. 写这个是因为ES6中的一个例子开始的.首先看下例子 var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10 var a = []; for (let i = 0; i < 10; i++) { a[i] =

structs2 jsp页面参数封装成类传递到action

中途切入一个系统的维护,而我又是菜鸟. 系统要实现从前端jsp页面输入查询条件,传入后台action进行处理.根据原来的系统本身的代码大概明白是jsp里ognl表达式传参数过去,但是一直不成功.百度各种办法,找到下面方法都试过,好像都不行.找耳挠腮搞半天才发现,我ognl表达式里的值得大小写和action里的类实例名不一致,真是不能更二咯-.- 对齐了jsp里的ognl表达式和action里的类实例名后,问题解决了.把我搜到的structs2 jsp传参数到后台action的方法记录下来,抄一遍

hibernate学习(5)——一对多关系表达

一对多实现 1. 实现类 package com.alice.hibernate02.vo; import java.util.HashSet; import java.util.Set; public class Customer { private Integer id; private String name; // 一对多:一个客户(当前客户) 拥有 [多个订单] // * 需要容器存放多个值,一般建议Set (不重复.无序) // * 参考集合:List.Map.Array等 // *