MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下的MicrosoftExcel电子表格程序开始引入的,Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。
用AppWizard产生一个MDI工程t(无OLE等支持),AppWizard创建了一系列文件,构成了一个应用程序框架。这些文件分四类:头文件(.h),实现文件(.cpp),资源文件(.rc),模块定义文件(.def),等。
构成应用程序的对象
图1-1解释了该应用程序的结构,箭头表示信息流向。
从CWinApp、CDocument、CView、CMDIFrameWnd、CMDIChildWnd类对应地派生出CTApp、CTDoc、CTView、CMainFrame、CChildFrame五个类,这五个类的实例分别是应用程序对象、文档对象、视对象、主框架窗口对象和文档边框窗口对象。主框架窗口包含了视窗口、工具条和状态栏。对这些类或者对象解释如下。
(1)应用程序
应用程序类派生于CWinApp。基于框架的应用程序必须有且只有一个应用程序对象,它负责应用程序的初始化、运行和结束。
(2)边框窗口
如果是SDI应用程序,从CFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含视窗口;如果是MDI应用程序,从CMDIFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含文档边框窗口。
如果要支持工具条、状态栏,则派生的边框窗口类还要添加CToolBar和CStatusBar类型的成员变量,以及在一个OnCreate消息处理函数中初始化这两个控制窗口。
边框窗口用来管理文档边框窗口、视窗口、工具条、菜单、加速键等,协调半模式状态(如上下文的帮助(SHIFT+F1模式)和打印预览)。
(3)文档边框窗口
文档边框窗口类从CMDIChildWnd类派生,MDI应用程序使用文档边框窗口来包含视窗口。
(4)文档
文档类从CDocument类派生,用来管理数据,数据的变化、存取都是通过文档实现的。视窗口通过文档对象来访问和更新数据。
(5)视
视类从CView或它的派生类派生。视和文档联系在一起,在文档和用户之间起中介作用,即视在屏幕上显示文档的内容,并把用户输入转换成对文档的操作。
(6)文档模板
文档模板类一般不需要派生。MDI应用程序使用多文档模板类CMultiDocTemplate;SDI应用程序使用单文档模板类CSingleDocTemplate。
应用程序通过文档模板类对象来管理上述对象(应用程序对象、文档对象、主边框窗口对象、文档边框窗口对象、视对象)的创建。
构成应用程序的对象之间的关系
这里,用图的形式可直观地表示所涉及的MFC类的继承或者派生关系,如图1-2所示意。
图1-2所示的类都是从CObject类派生出来的;所有处理消息的类都是从CCmdTarget类派生的。如果是多文档应用程序,文档模板使用CMultiDocTemplae,主框架窗口从CMdiFarmeWnd派生,它包含工具条、状态栏和文档框架窗口。文档框架窗口从CMdiChildWnd派生,文档框架窗口包含视,视从CView或其派生类派生。
构成应用程序的文件
通过上述分析,可知AppWizard产生的MDI框架程序的内容,所定义和实现的类。下面,从文件的角度来考察AppWizard生成了哪些源码文件,这些文件的作用是什么。表1-1列出了AppWizard所生成的头文件,表1-2列出了了AppWizard所生成的实现文件及其对头文件的包含关系。
表1-1 AppWizard所生成的头文件
头文件 | 用途 | |
stdafx.h | 标准AFX头文件 | |
resource.h | 定义了各种资源ID | |
t.h | #include "resource.h"定义了从CWinApp派生的应用程序对象CTApp | |
childfrm.h | 定义了从CMDIChildWnd派生的文档框架窗口对象CTChildFrame | |
mainfrm.h | 定义了从CMDIFrameWnd派生的框架窗口对象CMainFrame | |
tdoc.h | 定义了从CDocument派生的文档对象CTDoc | |
tview.h | 定义了从CView派生的视图对象CTView |
表1-2 AppWizard所生成的实现文件
实现文件 | 所包含的头文件 | 实现的内容和功能 |
stdafx.cpp | #include "stdafx.h" | 用来产生预编译的类型信息。 |
t.cpp | # include "stdafx.h"# include "t.h"# include "MainFrm.h"# include "childfrm.h"#include "tdoc.h"#include "tview.h" | 定义CTApp的实现,并定义CTApp类型的全局变量theApp。 |
childfrm.cpp | #inlcude "stdafx.h"#include "t.h"#include “childfrm.h” | 实现了类CChildFrame |
childfrm.cpp | #inlcude "stdafx.h"#include "t.h"#include "childfrm.h" | 实现了类CMainFrame |
tdoc.cpp | # include "stdafx.h"# include "t.h"# include "tdoc.h" | 实现了类CTDoc |
tview.cpp | # include "stdafx.h"# include "t.h"# include "tdoc.h"# include "tview.h" | 实现了类CTview |
从表1-2中的包含关系一栏可以看出:
CTApp 的实现用到所有的用户定义对象,包含了他们的定义;CView 的实现用到CTdoc;其他对象的实现只涉及自己的定义;
当然,如果增加其他操作,引用其他对象,则要包含相应的类的定义文件。
对预编译头文件说明如下:
所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。
因此,所有的CPP实现文件第一条语句都是:#include "stdafx.h"。
另外,每一个实现文件CPP都包含了如下语句:
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
这是表示,如果生成调试版本,要指示当前文件的名称。__FILE__是一个宏,在编译器编译过程中给它赋值为当前正在编译的文件名称。
头文件 | 用途 | |
stdafx.h | 标准AFX头文件 | |
resource.h | 定义了各种资源ID | |
t.h | #include "resource.h"定义了从CWinApp派生的应用程序对象CTApp | |
childfrm.h | 定义了从CMDIChildWnd派生的文档框架窗口对象CTChildFrame | |
mainfrm.h | 定义了从CMDIFrameWnd派生的框架窗口对象CMainFrame | |
tdoc.h | 定义了从CDocument派生的文档对象CTDoc | |
tview.h | 定义了从CView派生的视图对象CTView |
实现文件 | 所包含的头文件 | 实现的内容和功能 |
stdafx.cpp | #include "stdafx.h" | 用来产生预编译的类型信息。 |
t.cpp | # include "stdafx.h"# include "t.h"# include "MainFrm.h"# include "childfrm.h"#include "tdoc.h"#include "tview.h" | 定义CTApp的实现,并定义CTApp类型的全局变量theApp。 |
childfrm.cpp | #inlcude "stdafx.h"#include "t.h"#include “childfrm.h” | 实现了类CChildFrame |
childfrm.cpp | #inlcude "stdafx.h"#include "t.h"#include "childfrm.h" | 实现了类CMainFrame |
tdoc.cpp | # include "stdafx.h"# include "t.h"# include "tdoc.h" | 实现了类CTDoc |
tview.cpp | # include "stdafx.h"# include "t.h"# include "tdoc.h"# include "tview.h" | 实现了类CTview |
由异氰酸酯与多元醇及其配合助剂合成的聚氨酯材料,以其优异的性能、繁多的品种、广阔的用途,在众多的合成材料中独树一帜,成为当今发展速度最快的材料之一。作为合成聚氨酯材料的主要原料一异氰酸酯,于20世纪30年代末,由德国化学家o.Bayer及其同事首次开发出二异氰酸酯的合成方法及加工工艺。
二苯基甲烷二异氰酸酯MDI;Diphenyl-methane-diisocyanate
【中文名称】4,4`-二苯基甲烷二异氰酸酯;亚甲基双(4-苯基异氰酸酯);二苯甲烷-4,4`-二异氰酸酯
【英文名称】4,4`-diphenylmethane diisocyanate
【结构或分子式】 图片是黑色,点击一下即看到【相对分子量或原子量】250.26
【密度】1.19(50℃)
【熔点(℃)】36~39
【沸点(℃)】190(667帕)
【闪点(℃)】202
【毒性LD50(mg/kg)】
本品有毒,刺激眼睛、粘膜,空气中允许浓度为0.02E-6。
【性状】
白色或浅黄色固体。
【溶解情况】
溶于苯、甲苯、氯苯、硝基苯、丙酮、乙醚、乙酸乙酯、二恶烷等。
【用途】
本品的初级品广泛用于聚氨酯涂料,此外,还用于防水材料、密封材料、陶器材料等;用本品制成的聚氨酯泡沫塑料,用作保暖(冷)、建材、车辆、船舶的部件;精制品可制成汽车车挡、缓冲器、合成革、非塑料聚氨酯、聚氨酯弹性纤维、无塑性弹性纤维、薄膜、粘合剂等。
【制备或来源】
以苯胺为原料,与甲醛反应,在酸性溶液中缩合,用碱中和,然后蒸馏,可制得二氨基二苯甲烷,然后与碳酰氯反应可制得,再精馏精制。
【其他】
本品含有异氰酸酯基(-N=C=O),在合成树脂或涂料过程中,与涂料或树脂中的羟基起反应而固化。
CAS No.: 101-68-8
MDI是4,4'二苯基甲烷二异氰酸酯(纯MDI)、含有一定比例纯MDI与多苯基多亚甲基多异氰酸酯的混合物(聚合MDI)以及纯MDI与聚合MDI的改性物的总称,是生产聚氨酯最重要的原料,少量MDI应用于除聚氨酯外的其它方面。聚氨酯既有橡胶的弹性,又有塑料的强度和优异的加工性能,尤其是在隔热、隔音、耐磨、耐油、弹性等方面有其它合成材料无法比拟的优点,是继聚乙烯、聚氯乙烯、聚丙烯、聚苯乙烯和ABS后第六大塑料(现已经超越ABS成为第五大塑料),已广泛应用于国防、航天、轻工、化工、石油、纺织、交通、汽车、医疗等领域,成为经济发展和人民生活不可缺少的新兴材料。
MDI和TDI互为替代品,都是生产聚氨酯的原料。MDI的价格略低一些, 且毒性比TDI低,但是在生产泡沫时密度比TDI体系大,MDI形成的聚氨酯产品的模塑性相对较好。
化学名称:二苯基甲烷二异氰酸酯
产品分类:纯MDI、聚合MDI、液化MDI、改性MDI等。
物理性质:
纯MDI:常温下为白色到微黄色晶体,储藏温度为5度以下,保质期为三个月,包装一般为250公斤铁桶充氮包装(槽车充氮为10天保质期)。
聚合MDI:棕褐色透明液体,常温保存,保质期两年,包装一般为250公斤铁桶充氮包装。
现有技术:全球流行的MDI生产方法基本是以苯胺为原料,经光气法以后再还原形成粗品的MDI产品,再经分馏装置,分离出纯MDI和聚合MDI。
最新技术:由于光气其巨大的危害性,所以许多工厂都在积极研制新的合成工艺以取代光气法生产,如碳酸二甲酯法,但是这些方法还只是在小试车间内有成功的案例,根本无法应用于大规模的生产。
主要供应商:
欧美企业 :巴斯夫、拜耳、亨斯迈、陶氏、亚松
日韩企业:日本聚氨酯、三井、锦湖三井
国内企业:万华化学
应用领域:
纯MDI:浆料、鞋底原液、氨纶、TPU、聚脲喷涂等等
聚合MDI:硬泡、CASE领域
MDI销售模式:
纯MDI:中间商(极少)、下游工厂
聚合MDI:中间商(杂而多)、硬泡组合料工厂、下游工厂
MDI客户开发:
纯MDI:浆料、鞋底原液、氨纶和TPU
聚合MDI:
中间商:
组合料工厂:
硬泡下游:冰箱冰柜厂、集装箱、冷藏车、太阳能热水器和电热水器、消毒柜、仿木家具、PU板材等等。
CASE:胶粘剂、密封剂、涂料等
【生产工艺】
目前,MDI的生产方法主要有光气化法和非光气化法两种。
1 光气化法
用苯胺与甲醛在酸性情况下进行缩合反应是国外生产MDI完全成熟的技术路线,反应物用碱中和后进行蒸馏,得到二苯基甲烷二胺(MDA)。将MDA用溶剂溶解后,再进行光气化反应制成多苯基多异氰酸酯4,4-MDI,2,2-MDI或混合PMDI,再进行蒸馏精制,得纯MDI
光气化法是目前国内外普遍采用的工业生产方法,但缺点是需使用剧毒的光气,且反应过程中生成氯化氢,对设备腐蚀严重,而且纯MDI的收率和质量也较低。
拜耳、亨茨曼、巴斯夫等少数几个跨国化工巨头拥有该产品生产的核心技术。
2 非光气化法
非光气化法污染较小,收率高,大多处于研究阶段,未能完全实现工业化生产。
美国孟山都公司已发表了专利。采用胺、二氧化碳和脱水剂等非光气法生产TDI和MDI。反应在近乎常压和较低的压力下先生成氨基甲酸酯,再用五氧化二磷和三乙胺做脱水剂脱水生成异氰酸酯。从整个反应来看,今后的主导方向是催化羰基合成氨基甲酸酯后再热解成MDI。据报道,德国BASF公司在比利时和美国建有氨基甲酸酯法的工业生产装置。朝日公司报导的数据显示,非光气法较光气法生产成本降低20%。
氨基甲酸酯法是将苯胺与氨基甲酸酯先制成苯胺基甲酸酯,再与硝基苯在硫酸存在下生成MDI的混合物,再经蒸馏得成品。
苯胺先与一氧化碳,乙醇和氧气反应生成苯胺基甲酸乙酯(EPC)。然后EPC与甲醛液进行浓缩生成双核甲撑二苯二氨基甲酸乙酯(MDV),产物再经热解生成MDI及乙醇,再循环进行羰基化反应。
在反应过程中,苯胺的存在可减少硝基苯的羰基化反应使生成氨基甲酸酯的产量增加。为使反应顺利进行。通常使甲醇过量。原料投料比为:甲醇:苯胺:硝基苯:催化剂13.5:1.0:1.0:0.002,在CO压力为6.87Mpa和160℃下反应3.5h,生成EPC。采用的催化剂为新羰基化物,反应液快速排出送往下部的转鼓。
过量的一氧化碳和副产二氧化碳送往搅拌反应器内促进溶液和有机物混合,反应采用电感应线圈加热,在甲醛液/硫酸层和EPC/有机层界面反应,控制反应温度75℃,在常压下生成中间产物MDV/PMDV。
反应物随后进入有机物/溶液分离器,分出绝大部分H2SO4催化剂循环使用。有机层水洗除去残余的硫酸和未反应的甲醛。
反应混合物中包含未反应的EPC、MCV/PMDV、有机溶剂和反应中间体、从有机/溶液分离器流出物与液体催休剂,进入第二浓缩反应器内于75℃和在常压下用大约20min时间转换成MDV/PMDV。
生成的MDV/PMDV经提纯进入降解器内,在隋性溶剂存在下,控制反应湿度250℃,压力20Pa,滞留时间1h,连续通入氮气,从反应器中脱除过量甲醇。底部产物送往MDI萃取塔,分出MDI和副产物聚异氰酸酯。
安全注意事项
MDI正常贮存条件下为液态, 蒸气压较低【40℃蒸气压<10-4mmHg】, 在呼吸吸入和皮肤吸收方面毒性较低;低的挥发性,使之在通常条件下短时间暴露接触(如:少量泄漏、撒落)所产生的毒害性很少。
尽管如此,由于 MDI为二苯基甲烷二异氰酸酯系化合物,仍存在一定毒性,可导致中度眼睛刺激和轻微的皮肤刺激,可造成皮肤过敏。 MDI在空气中最大允许浓度(TLV)为0.02ppm。
但必须注意的是,当物料温度被加热到40℃以上时(如熔化时)或是工作环境通风不良,将会增加其蒸气毒害性,另外采用喷涂工艺施工作业的场所,会导致空气中悬浮粒子浓度增加而产生毒害。在类似环境中作业应佩戴防毒面具和呼吸器,否则,反复吸入超标浓度的蒸气会引起呼吸道过敏。
即使在正常条件下,由于 MDI活泼的化学性质, 在操作时应小心谨慎。
MDI的全称 Medium Dependent Interface ,网络上给的翻译是介质相关接口(个人认为翻译较准确)。在 hub 或 switch 中有两种接口,分别叫 MDI port和 MDI-X port, MDI port 也叫做级联端口( uplink port ),是 hub 或 switch 之间相互连接的端口。 MDI port和 MDI-X port 之间最大的区别在于, MDI port内部发送数据线和接收数据线没交叉, 而MDI-X port 内部发送数据线和接收数据线是交叉的,这个X代表交叉的意思。
内部发送数据线和接收数据线交叉又是什么意思呢?下图示意了hub或switch内部的结构,transmit代表发送数据线,receive代表接收数据线,两者在内部交叉着。
有了上面的基础知识,我们就知道了为什么某些设备间要用交叉线,为什么有些设备间要用直通线。
计算机和交换机的连接要用直通线,见下图,nic代表网络接口卡(就是平常说的网卡,这里代表一台计算机)。
交换机和交换机之间的连接要用交叉线,见下图。
接下来介绍一下 Automatic MDI/MDI-X port(我给的翻译是MDI/MDIX自适应端口),作用是无论设备间用的是交叉线还是直通线,端口都可以自动匹配,实现通信。
MDI:Media Delivery Index. 媒体传输质量指标,是由思科公司和IneoQuest共同提出的,对视频流在IP网络传输质量进行评估的测量指标。
对于video测试中,
MDI为 媒体流丢失率和延迟的组合评价指标
MDI(Media Delivery Index)媒体传输质量指标是由思科公司和IneoQuest共同提出的,对视频流在IP网络传输质量进行评估的测量指标。作为IP视频流传输质量测试的行业标准,MDI测量指标广泛地应用于IPTV和IP有线数字电视网络质量评估和监测。
对IP视频流的传输质量用RFC 4445 MDI标识为: DF:MLR。
MDI包括了两个参数:
● Delay Factor(延迟因素,简称DF):该数值表明被测试视频流的延迟和抖动状况。DF的单位是毫秒(ms)。DF将视频流抖动的变化换算为对视频传输和解码设备缓冲的需求。被测视频流抖动越大,DF值越大。当网络设备和解码器的缓冲区容纳的视频内容时间不小于被测视频流DF读数时,将不会出现视频播放质量的下降。因为网络节点需要分配不小于DF值的缓冲用于平滑视频流抖动,所以DF的最大值为视频内容通过该网络节点的最小延迟。
● Media Loss Rate(媒体丢包速率,简称MLR):MLR的单位是每秒的媒体封包丢失数量。该数值表明被测试视频流的传输丢包速率。由于视频信息的封包丢失将直接影响视频播放质量,理想的IP视频流传输要求MLR数值为零。因为具体的视频播放设备对丢包可以通过视频解码中进行补偿或者丢包重传,在实际测试中MLR的阈值可以相应调整。
读者可以从IETF网站下载RFC 4445 MDI的标准文档。
MDI=Model Drive Integration,即模型驱动集成。
通过在企业IT软件业务空间,对信息资源建立统一的数据模型,实现信息系统之间消息传输和会话内容格式的标准化和语义一致性,实现异构系统之间无缝集成。
MDI=metered dose inhaler,压力式定量气雾装置。
一种将药物定量,雾化后经口吸入肺内,治疗哮喘等肺部疾病
MDI使用要点
1、打开保护盖。
2、摇匀。
3、深呼气。
4、按规定方向手持气雾器,用嘴唇咬住喷嘴。
5、以适中的速度深吸气,同时按动开关,此时释放了一喷,继续吸气动作,确保药物全部吸入体内。
6、屏住呼吸数秒钟,确保药物有足够的时间沉积在气道中。
7、移开气雾器喷嘴,缓慢呼气。
8、如需第二喷,请重复上述动作。
储雾瓶
MDI对呼吸配合要求比较高,作为改进,可在喷雾口上套一个储雾瓶(spacer),喷出的药液在此得以缓冲,然后再吸入。
优点:雾滴速度降低,患者吸气更从容。同时,吸入效果得到提升,口腔沉积量减少。
缺点:体积大;塑料瓶身可能产生静电,吸引雾滴导致部分药物损失。
Manual Data Input 手动输入程序控制模式
机床的工作方式分为:手动,MDI,自动
工作在MDI方式下通过手动输入代码后按循环启动键,进行代码执行。