通信控件论文

2024-09-26

通信控件论文(精选6篇)

通信控件论文 篇1

摘要:在工业控制中经常用到看门狗定时器, 对其进行通信则是实现工控的首要问题。该文主要介绍利用VC++6.0中的MSComm控件实现ADAM-4050的串口通信。文中详细讲解了ADAM通信需要注意的问题, 并给出了实现的关键技术。

关键词:VC++,ADAM-4050,串口通信

ADAM-4050为研华的数字量I/O模块。ADAM-4050作为工控器带有7路数字量输入和8路数字量输出。它的数字量输出为集电极开路的晶体管开关,可由主机进行控制。还可以使用它来控制固态继电器,利用固态继电器的闭合来控制热电器、泵或其他电力设备。主机可以利用模块的数字量输入来检测行程开关、安全开关或远程数字量信号。因此常作为看门狗定时器。

1 ADAM-4050命令语法及其含义

对ADAM-4050通信的实质是通过命令来读取,修改或是存储他的数字量输入与输出的状态。只有使用正确的命令才能与其通信。以下为ADAM-4050的命令语法及其含义:

对ADAM-4050通信要使用正确的命令, 如果模块检查到发送的命令有语法错误或是通信错误或者指定的地址不存在, 则无响应。

2 设备的连接

通用的PC机的串口为RS-232接口,而ADAM-4050为RS-485接口。因此设备连接时需要RS-232/RS-485转换器。在测试通信时,不需要连接DI(数字量的输入),DO(数字量输出)端口,只需连接DATA+(数据输入)和DATA-(数据输出)端口。连接如图1所示。其中DATA+,DATA-,+Vs, GDN分别连接模块上的“ (Y) DATA+”“ (G) DATA-”“ (R) +Vs”“ (B) GND 10”端口。

3 编程实现

利用VC++6.0中的MSComm控件很容易实现串口编程。添加MSComm控件方法为“Project->Add To Project->Components and Controls->Registered Activex Controls”,然后选择控件:Microsoft Communication Control, version 6.0 (Microsoft Comm Control 6.0)插入到当前的工程中。这样就将类CMSComm的相关文件mscomm.cpp和mscomm.h一并加入到了工程中。编程时只需将控件对话中的MSComm控件拖至工程的应用对话框中就可以使用。

利用MSComm的对象m_Com我们很容易实现一些初始化工作。例如:

发送命令和接收响应时需要调用SetOutput和GetInput函数。但是在发送命令的同时, 需要注意正确语法格式。因为每个命令 (“#**”命令除外) 后面都要加上“cr” (回车符) , 而我们在手工输入命令的字符串时是无法在字符串的最后添加上回车符的。因此, 在发送命令之前, 我们需要通过添加代码来为命令字符串的末尾添加上回车符。在这里假设代发的命令字符串用command表示, 我们只需添加代码“command+=13” (因为回车符的ASCII码为13) , 就可以使其成为正确的命令。

测试用例:命令$016 (cr) , 返回值为!112200 (cr)

该命令要求指定的地址01的模块返回数字输入通道的状态和输出通道的回读值

由返回值可以知道该命令有效, 并且返回了相应的值, 其中11h (00010001) 表示输出通道0, 4处于高电平, 1.2.3.5.6.7处于低电平, 22h (00100010) 表示输入通道1, 5为高电平, 0.2.3.4.6.7低电平

4 总结

使用VC++6.0中的MSComm控件可以很方便的实现对ADAM-4050的串口通信。在实现过程中最关键的是要发送语法格式正确的命令,否则模块就无响应,即没有任何返回值。因此可以在发送命令前检验要发送的命令格式是否正确,若检查到错误的命令格式则显示错误信息以便修改。

参考文献

[1]张宏霖.精通Visual C++串口通信技术与工程实践[M].3版.北京:人民邮电出版社, 2002.

[2]周韧研, 商斌.Visual C++串口通信开发入门与编程实践[M].北京:电子工业出版社, 2009.

[3]杨坤明.现代高速串行通信接口技术与应用[M].北京:电子工业出版社, 2010.

通信控件论文 篇2

本文设计的这个例子是这样的:在表单激活时(Activate事件),采用类似vb控件数组的处理方式在循环语句中为各个标签设置属性,如下图1;在命令按钮的click事件中,通过单击将5个标签的caption属性值依次显示出来,如下图2;

图1

图2

制作步骤如下:

一、新建表单,将其AutoCenter属性值设置为.t.,保存为“表单1.scx”。

二、向表单上添加5个标签控件label1~label5,将它们的caption属性值依次设置为“编”、“程”、“入”、“门”、“网”。

三、向表单上添加一个命令按钮command1,将其caption属性值设置为“显示字符”。

四、适当调整各控件的位置,如下图:

五、添加事件代码:

1、表单的Activate事件代码:

public top,nlocal fs,fb,fcn=1top=thisform.label1.topfor i=1 to 5 t=“label”+str(i,1)+“.top” fs=“label”+str(i,1)+“.fontsize” fb=“label”+str(i,1)+“.fontbold” fc=“label”+str(i,1)+“.forecolor” thisform.&t=-50 &&依次把5个标签的top属性值设为-50,实际是把它们隐藏起来 thisform.&fs=12 &&依次把5个标签的fontsize属性值设为12 thisform.&fb=.t. &&依次把5个标签的fontbold属性值设为.t. thisform.&fc=rgb(255,0,0) &&依次把5个标签的forecolor属性值设为rgb(255,0,0)endfor

2、命令按钮command1的click事件代码:

t=“label”+str(n,1)+“.top”if thisform.&t<=top-50 thisform.&t=top n=n+1 if n=6 n=1 this.enabled=.f. messagebox(“字符已经全部显示完毕!”) return endifendif

六、运行“表单1.scx”,

通信控件论文 篇3

目前,随着现代信息技术的发展,计算机串口通信技术已日趋成熟。由于微机性能价格比高、分析处理能力强、处理速度快以及单片机抗干扰能力强、使用灵活等特点,利用PC机作为上位机,单片机作为下位机的主从工作方式在工业控制领域中被广泛采用。数据采集过程实质上是信息的采集、传递和处理以及对数据采集器控制的过程。由于串行通信具有所用的传输线少,成本低,传输距离近等特点,现实中通常采用以PC机为主机,通过线缆连接,以RS232/485串行接口为通信通道,对数据采集器进行控制,并接收采集到的数据和采集器的状态信息。S3C44B0 ARM7开发板350元单片机开发系统498元无忧单片机实验开发板238PC机与下位机的通信可以采用高级语言编程实现,如Delphi、VC等。Delphi是新一代面向对象的可视化开发工具,提供了良好的界面设计能力,在PC机的串口通信方面也有很强的功能。它具有功能强大、简便易用和代码执行速度快等特点,越来越在构架企业信息系统方面发挥着重要作用。由于Delphi这些显著特点,利用Delphi开发工业控制系统软件成为越来越多的开发人员的选择,而实现系统监测控制和信息处理的关键是解决PC机与单片机之间的串口通信问题。

2 Delphi环境下串口通信实现方法

Delphi下编制串行通信程序,可利用Windows标准API串行通信函数,也可利用为简化Windows下串行通信编程的Active X控件,如Microsoft CommunicationsControl(MSComm)或者Delphi的第三方控件如Spcom来实现。前者程序设计相对复杂,不易掌握,但可以实现功能强大、应用广泛、复杂的低层次通信程序。而后者则相对简单,上手快,开发工作量少。Delphi第三方控件是Object Pascal类,它遵循一定的规则,并通过面向对象的概念得以继承和扩充,为Delphi的应用开发提供了丰富的资源。Delphi开放式的控件支持环境,使得成千上万的Delphi用户能够为Delphi编写大量的第三方控件,并通过Internet发布,形成巨大的共享资源。

3 Delphi环境下串口通信组件简介

用Delphi实现串口通信,常用的方法有:使用控件,如Mscomm和Spcomm控件等;使用API函数;在Delphi中调用其它串口通信程序。使用API方法的优点是比较适合于编写较为复杂的低层次通信程序,但缺点是编写串口通信程序较为复杂,需要掌握大量通信知识。Mscomm控件是微软的Visual Basic中提供的一个串口控件,使用简单、性能良好。它通过串行端口传送和接收数据,为应用程序提供基本的串行通信功能,使得程序员不必花时间去了解较为复杂的API函数,该控件具有丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作,且编程简单、通用性强、可移植性好,所以得到了广泛应用。

在Delphi7.0中安装Mscomm串口通信控件的方法为:选择Delphi7.0的“Component”菜单,点击“Import Active X Control...”菜单项,然后在弹出的Into existing package属性页中Unit file name输人框中选择SPCOMM.pas文件,单击两次“OK”按钮后,就可以将Spcomm控件安装到Delphi7.0的System组件页上。用户可以在已经注册的Active X控件的列表中选中“Microsoft Comm Control”控件,单击“install”按钮,在弹出的对话框中确认相关参数后再单击“OK”按钮,这样Mscomm控件就作为一个组件出现在Active X组件面板上了,其图案为一个电话的形状。

4 Mscomm控件串口通信的实现

4.1 Mscomm控件的基本属性、方法和事件。

MSComm控件具有丰富的与串口通信密切相关的属性,提供了对串口进行的多种操作,进而使串行通信变得十分简便。MSComm的控件属性较多,常用的属性如下:

4.1.1 Comm Port:设置或返回串行端口号,缺省为1。4.1.2 Setting:设置或返回串口通信参数,格式为“波特率,奇偶校验位,数据位,停止位”。例如:MSComm1.Setting:='9600,n,8,1'。4.1.3Port Open:打开或关闭串行端口,格式为:MSComm1.Port Open:={True|False}。4.1.4 InBuffer Size:设置或返回接收缓冲区的大小,缺省值为1024字节。4.1.5 In Buffer Count:返回接收缓冲区内等待读取的字节数,可通过设置该属性为0来清空接收缓冲区。4.1.6 RThreshold:该属性为一阈值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码为Com Ev Receive的On Comm事件。4.1.7SThreshold:该属性为一阈值,它确定当发送缓冲区内的字节个数少于该值后就产生代码为Com Ev Send的On Comm事件。4.1.8 Input Len:设置或返回接收缓冲区内用Input读入的字节数,设置该属性为0表示Input读取整个缓冲区的内容。4.1.9 Input:从接收缓冲区读取一串字符。4.1.10 Out Buffer Size:设置或返回发送缓冲区的大小,缺省值为512字节。4.1.11 OutBuffer Count:返回发送缓冲区内等待发送的字节数,可通过设置该属性为0来清空缓冲区。4.1.12 Out Put:向发送缓冲区传送一串字符。在通信过程中发生的错误或事件会引发On Comm事件,并由Comm Event属性值反映错误类型,程序根据该属性值来执行不同的操作。Comm Event属性值及其含义如下:a.Com Ev Send:值为1,发送缓冲区的内容少于SThreshold指定的值。b.Com Ev Receive:值为2,接收缓冲区内字符数达到RThreshold指定的值。c.Com Ev Frame:值为1004,硬件检测到帧错误。d.Com Ev RxOver:值为1008,接收缓冲区溢出。e.Com Ev Tx Full:值为1010,发送缓冲区溢出。f.Com Ev Rx Parity:值为1009,奇偶校验错误。g.Com Ev EOF:值为7,接收数据中出现文件尾(ASCII码为26)字符。

4.2 Mscomm串口通信的实现。

下面通过一个实例介绍Delphi利用MSComm通信控件,该串口调试程序利用Mscomm控件通过串行端口发送和接收数据,下面就对Delphi中使用Mscomm进行通信编程进行简单介绍:

4.2.1 初始化并打开串口:

需要选择本次通信使用的串口,确定通信协议,即设置波特率、校验方式、数据位、停止位等属性,打开该串口。示例代码如下:

//初始化并打开串口

串口1,波特率9600bps,奇偶检验无,数据位8,停止位1

MSComm.Comm Port:='1';

Com Setting:='9600,N,8,1';

MSComm.Settings:=Com Setting;

MSComm.Port Open:=True;//打开串口

4.2.2 捕捉串口事件。

Mscomm控件可以采用查询或事件驱动的方法从端口获取数据。由于该控件的On Comm事件通过Comm Event属性能够反映串口当前发生的错误和事件,所以操作串口最简单的方法就是适当地设置控件Rthreshold属性值为一个正数,然后编写其OnComm事件处理的代码。

下面的例子就简单地实现了对串口数据的捕捉。

Tform1.Mscomm Comm(Sender:Tobject)

Begin

If Mscomm.comm Event=2 then

Begin

Memo1.text:=memo1.text+mscomm.input;

End;

End;

4.2.3 串口读写。串口的读写分为两种情况:字符串的读写、二进制数的读写。

如果双方是以二进制形式发送数据,如果一方以字符串形式读写,那么通信就会失败。以二进制给Variant变量Input属性和Output属性赋值,需要熟悉对Variant变量的操作。

从串口读二进制数据。

Var

Serial Input:Variant;

Serial Data Length,I,tmpint:integer;

Begin

Serial Input:=Form1.Mscomm.input;//读取串口数据

Serial Data Length:=Form1.Mscomm.Inbuffer Count;//读取数据的长度

For I:=0 to Serial Data Length-1 do

Begin

Tmpint:=Serial Input[i];

//其它处理代码

End;

End;

向串口写二进制数。

由于串口数据为Byte类型,为了进行匹配需要使用Variant数组对Input属性赋值。

例子中,输出的二进制值临时保存在Integer类型数组tmp Int中,长度为Serial Data Length(>1)

Var

Serial Output:Variant;

Count:Integer;

Begin

Count:=1;

Serial Output:=Var Array Create([1,1],var Byte);

//创建一个代表Byte类型的Variant数组,长度暂为1

Serial Output[count]:=tmp Int[i];

Inc(count);

While(Count

Begin

serial Out Put[Count]:=tmp Int[i];

inc(count);

Var Array Redim(Serial Output,Count);//动态地增加Variant数组的长度

End;

Form1.Mscomm.output:=temp Var;//串口赋值输出

End;

4.2.4 关闭串口。

在系统开发中,应注意在不使用串口时应及时关闭串口,释放系统资源,否则可能会影响系统的其它应用。关闭串口的代码如下:

procedure TForm1.Form Close(Sender;TO-bj ect:var Action:TCIose Action);

begin

Mscomm.port Open:=false;

end;

4.2.5 试验结果。实现串口数据的发送和接收。

结束语

在以上介绍了在Delphi程序设计中用MSComm控件实现串口通讯的方法。实际上,无论用何种语言编写串行通信程序,其过程一般均可分下列四步,即打开串口、配置串口、发送或接收数以及关闭串口。Delphi中亦可用汇编语言直接对UART端口进行访问实现串行通信,这种方法经常用在实时性要求较高的场合。实践证明,利用Mscomm串行通信控件在Delphi7.0中开发串口通信程序,具有灵活、方便、高效的特点。创新点是在认真分析多个基于计算机串口通讯的基础上,分析了利用Mscomm控件实现PC机与单片机之间串口通信的方法,研究了Mscomm串口通信的关键技术问题。在实际应用中取得了较好的应用效果,具有一定的实践指导意义。

摘要:利用Delphi开发工业控制系统软件成为越来越多的开发人员的选择,而串口通信是这个过程中必须解决的问题之一。在对几种常用串口通信方法分析比较的基础上,着重讨论了Delphi开发环境下利用Mscomm控件实现PC机与单片机之间串口通信的方法,研究了Mscomm串口通信的关键技术问题,并通过一个实例给出了Mscomm控件在Delphi7.0串口通信中的应用。

关键词:串口通信,Delphi7.0,Mscomm控件

参考文献

[1]范逸之.Visual Basic与RS-232串行通信控制[M].北京:中国青年出版社,2000.

Android 输入控件 篇4

今天天气不错虾米 来讲解 Android中输入的控件 在 Android中输入控件是常见的 随处可见 今天又时间 写一篇Android中输入控件的集合 了解他们的相同处和不同处,下面是Android系统中我们常用到的输入控件 好 废话不多 开始:

Android已经为接受来自用户的输入多种不同的输入控件的支持,

 

Android 输入控件

。常见的输入控件包括:

ButtonsText FieldsCheckboxesRadio ButtonsToggle ButtonsSpinnersNumberPicker Date and Time Pickers

Android 将一个输入控件添加到您的用户界面非常简单 ,将xml元素添加到xml布局.

Buttonsvc3Ryb25nPgo8c3Ryb25nPiAgICAgICBBbmRyb2lkudm3vb3iys2jurC0xaW0+rHt0ru49rC0xaWyv7z+oaO/ydLUsLTPwrC0xaUsu/LV37Xju/cs08nTw7unwLTWtNDQ0ru49rav1/eho9K7uPa15NDNtcQgICAgICAgIMq508PSu7j2u+62r72rz8LD5rXEsLTFpTo8L3N0cm9uZz4KPHN0cm9uZz4gICAgICAgIDxCdXR0b248YnI+CiAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPQ==”@+id/button_id“

android:layout_width=”10dp“

android:layout_height=”8dp“

android:layout_gravity=”center“

android:layout_marginRight=”10dp“

android:layout_weight=”1“

android:background=”@drawable/login_input_arrow“ />

public class MyActivity extends Activity { protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.content_layout_id); final Button button = (Button) findViewById(R.id.button_id); button.setOnClickListener(new View.OnClickListener { public void onClick(View v) { // Perform. action on click } }); } }

Text Fields一个文本字段允许用户输入文本到您的应用程序。它可以是一行或多行。触摸一个文本字段位置,光标,并自动显示键盘。除了打字,文本字段允许各种各样的其他活动,例如文本选择(剪切、复制、粘贴)和数据通过自动完成查找。

Android:inputType:输入的类型 允许输入Text(字符串) TextEmailAddress(email的地址) texturi(网址)number(数字) phone(号码) textCansentences() textcapwords()textautocurrect() textpassword() textmultiLine()

For example, here‘s how you can collect a postal address, capitalize each word, and disable text suggestions:

Checkboxscheckboxs 允许用户选择一个或多个 通常 checkboxs是一个列表在一个垂直下拉框中

在一个Activity 判断checkbox是否选中

public void onCheckboxClicked(View view) { // Is the view now checked? boolean checked = ((CheckBox) view).isChecked(); // Check which checkbox was clicked switch(view.getId()) { case R.id.checkbox_meat:if (checked) // Put some meat on the sandwichelse // Remove the meatbreak; case R.id.checkbox_cheese:if (checked) // Cheese meelse // I‘m lactose intolerantbreak; }}

Radio Butons单选按钮允许用户选择一个选项从一组。如果不是必要并排显示所有选项,使用微调控制项。

创建每个单选按钮选项,创建一个RadioButton在你的布局。然而,由于单选按钮是互相排斥的,你必须RadioGroup内它们分组在一起。通过分组在一起,可以选择系统确保只有一个单选按钮。

 

public void onRadioButtonClicked(View view) { // Is the button now checked? boolean checked = ((RadioButton) view).isChecked(); // Check which radio button was clicked switch(view.getId()) { case R.id.radio_pirates:if (checked) // Pirates are the bestbreak; case R.id.radio_ninjas:if (checked) // Ninjas rulebreak; }}

Toggle Buttons切换按钮允许在两种状态之间切换设置您可以添加一个基本的切换按钮与布局切换按钮 对象。的Android 4.0(API等级14)引入了另一种切换按钮,称为它提供了一个滑块控件,您可以使用添加开关交换对象,

电脑资料

(切换按钮) 开关 (Android4.0+)响应点击事件

当用户选择一个切换按钮和开关,对象收到的点击事件。

要定义Click事件处理程序中,添加机器人:的onClick属性的<切换按钮>或<开关>元素在XML布局。该属性的值必须是要在响应click事件调用的方法的名称。该活动举办的布局必须再执行相应的方法。

例如,这里有一个切换按钮与安卓的onClick属性:

public void onToggleClicked(View view) { // Is the toggle on? boolean n = ((ToggleButton) view).isChecked(); if (on) { // Enable vibrate } else { // Disable vibrate }}

SpinnersSpinner提供一个快速的方法来选择一个值从一组。在默认状态,微调器显示当前选择的价值。触摸Spinner与所有其他可用值显示一个下拉菜单,用户可以选择的一个新的。spinner布局

Create a spinner like any view and specify the android:entries attribute to specify the set of options:

特别的string array 的条目在res/values/planets_arrays下

MercuryVenusEarthMars

查看Spinners指南更多细节。注意,定制一个微调控制项的文本需要使用自定义数组适配器和布局文件。

获取和设置多值String str_spinner=spinner.getseletedItem().toString();

public void setSpinnerToValue(Spinner spinner, String value) { int index = 0; SpinnerAdapter adapter = spinner.getAdapter(); for (int i = 0; i< adapter.getCount(); i++) { if (adapter.getItem(i).equals(value)) { index = i; break; // terminate loop } } spinner.setSelection(index);}

自定义ArrayAdapter 资源

Spinner spinner = (Spinner) findViewById(R.id.spinner);// Create an ArrayAdapter using the string array and a default spinner layoutArrayAdapteradapter = ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item);// Specify the layout to use when the list of choices appearsadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);// Apply the adapter to the spinnerspinner.setAdapter(adapter);

Multiple Select Spinner

By default, the spinner only allows the user to select one option from the list. Check out the following resources surrounding multiple selection spinners:

MultiSelectSpinner - Simple multi-select library

MultiSelect Tutorial 1

MultiSelect Tutorial 2

Simple Multi Dialog

Note that we can also use a ListView in this case instead to avoid a spinner altogether.

NumberPicker

This is a widget that enables the user to select a number from a predefined range. First, we put the NumberPicker within the layout XML:

Then we must define the desired range at runtime in the Activity:

public class DemoPickerActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo_picker); NumberPicker numberPicker = (NumberPicker) findViewById(R.id.np_total); numberPicker.setMinValue(0); numberPicker.setMaxValue(100);numberPicker.setWrapSelectorWheel(true); }}

Note we set the range with setMinValue and setMaxValue and made the selector wrap withsetWrapSelectorWheel. If you want to listen as the value changes, we can use the OnValueChangeListener listener:

// within onCreatenumberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { Log.d(“DEBUG”, “Selected number in picker is ” + newVal); }});

You can also call getValue to retrieve the numeric value any time. See theNumberPicker docs for more details.

通信控件论文 篇5

一、MSComm控件

串行通信控件Microsoft Comm Control (简称MSComm) , 只要正确设置和监视控件的属性和事件, 就可以实现通信。

1、控件属性

(1) Comm Port:设置并返回通信端口号。

(2) Settings:以字符串设置并返回波特率, 奇偶校验位, 数据位和停止位。

(3) Port Open:设置并返回通信端口的状态。

(4) Input:从接收缓冲区中读数据, 类型为Variant。

(5) Output:向发送缓冲区写数据, 类型为字符串或字节数组。

(6) InputMode:设置从缓冲区读数据的格式。

(7) In Buffer Count:设置和返回接收缓冲区的字节数, 0表示清空缓冲区。

(8) Out Buffer Count:设置和返回发送缓冲区的字节数, 0表示清空缓冲区。

(9) InputLen:设置和返回每次读出的字节数, 0表示读出接收缓冲区中的内容。

(10) Rthreshold:在OnComm发生之前, 接收缓冲区接收的最少字节数。0表示禁止发生串口事件。1表示当接收缓冲区中的字节数≥1时, 产生接收事件。

(11) CommEvent:返回相应的串口事件常数。

2、控件处理接收信息的方式

(1) 事件驱动方式

每当有新字符到达或端口状态改变或发生错误时, M S C o m m控件将产生On Comm事件, 而应用程序在捕获该事件后, 通过检查CommEvent属性可以获知所发生的事件或错误, 从而采用相应的操作。

(2) 查询方式

通过查询InputBufferCount属性值, 处理接收到的信息。执行完某一串口操作后, 将不断检查某一事件是否发生, 所以该方式占用CPU的时间较多。

二、串口通信程序

我们采用事件驱动方式, 计算机作为主机, P L C作为从机, 单击“发送”按钮, 计算机发送数组Array中的数据, 计算机接收到PLC返回的数据后存在数组rcv内, 并在文本框中显示出来。

1、串口及通信参数初始化

2、发送程序

要发送的报文格式, 如表1。

3、接收数据

PLC只有在接收到上位机发送的信息后, 才发送数据, 所以将发送完成后收到的第一个字节作为接收报文的开始, 直到串口无接收事件时认为报文结束。

三、P L C程序

报文格式如表2所示。

CPU模块在接收时检测起始字符和结束字符。校验码为报文中“数据字节数”字节与数据区各字节的异或和, VB90存放CPU计算出的异或校验结果, VB91和VB99分别存放计算机发送来的检验码和数据区字节数。

1、主程序

2、初始化子程序

3、接收完成中断程序INT_0

计算机与PLC组建的实时监控系统开发成本低、实时性好、操作简便、通用性强, 利用计算机易组网功能, 既可做到内部网络互联、信息共享, 又可网络, 使异地信息共享、远程监控变为现实。

参考文献

[1]李淑华.VB程序设计及应用.高等教育出版社

[2]范逸之.VB与RS232串行通信控制.中国青年出版社

[3]廖常初.PLC编程及应用.机械工业出版社

通信控件论文 篇6

Quest 3D与VB的通信, 主要是通过Quest 3D中的“Active X Data”通道和“Active X Event”通道以及VB中的“Quest 3DCtrl4”控件来实现的。

“Active X Data”通道:如果要实现Quest 3D项目文件与其他程序 (例如Internet Explorer, Visual Basic或者其他能够加载Active X控件的程序) 的通信, 就需要用“Active X Data”通道为Quest 3D项目文件预留出一个接口。也就是说当我们要在VB中调用某个已经发布出来的Quest 3D项目文件并要对其进行某一操作时, 在制作Quest 3D项目文件时候, 就需要把要被操作的通道 (一般为表示数值或文本的通道) 连接到“Active X Data”通道上去。

“Active X Event”通道:“Active X Event”通道是一个事件触发通道, 通过此通道, 可以在调用Quest 3D项目文件的其他程序中触发一个事件, 这样Quest 3D项目文件与其他程序的通信才能够开始执行下去。

“Quest 3DCtrl4”控件:VB 6.0中本身并不含有“Quest 3DCtrl4”控件, 我们需要进行一些操作来为VB添加“Quest 3DCtrl4”控件。通过此控件我们可以在VB中调用Ques3D项目文件, “Quest 3DCtrl4”控件包含了一些可以调用的方法用来对Quest 3D项目执行相应的操作, 包括:

“Set Channel Value”:用来设置Quest 3D项目文件中某一特定通道的数值;

“Set Channel Text”:用来设置Quest 3D项目文件中某一特定通道的文本内容;

“Channel Value”:用来获取Quest 3D项目文件中某一特定通道的数值大小;

“Channel Text”:用来获取Quest 3D项目文件中某一特定通道的文本内容。

2 添加VB 6.0“Quest 3DCtrl4”控件

添加VB 6.0“Quest 3DCtrl4”控件的方法如下:

2.1 安装“Quest 3D Web Viewers”插件

1) 在桌面或者开始菜单中找到Quest 3D 4.3程序的图标并右击, 在弹出的快捷列表中选择“属性”, 打开其属性对话框, 点击“查找目标”, 打开Quest 3D 4.3软件的安装文件夹;

2) 在Quest 3D 4.3软件的安装文件夹中找到名字为“Web Installer Exe”的文件夹并打开, 里面包含了一个文本文件和一个exe格式的文件, 此exe格式的文件即为“Quest 3D Web Viewers”插件的安装文件;

3) 双击exe格式的文件, 即可进行“Quest 3D Web Viewers”插件的安装。

2.2 对Quest 3D active X控件进行注册

1) 打开Quest 3D 4.3软件的安装文件夹 (方法同上) , 找到一个名字为“Quest 3DActive X4.dll”的应用程序扩展文件;

2) 在“开始”菜单中选择“运行”, 输入“regsvr32”, 用鼠标点击“Quest 3DActive X4.dll”文件并将其拖动到“运行”窗口的输入框内, 如图1所示, 点击确定, 系统就会出现已成功注册了Quest 3D active X控件的提示。

通过以上两个步骤, 我们就成功地为VB 6.0软件添加了一个名为“Quest 3DCtrl4”控件, 下面我们就可以制作Quest 3D项目文件, 然后在VB中利用“Quest 3DCtrl4”控件来调用Quest 3D项目文件并进行编辑。

3 制作Quest 3D场景文件

1) 打开Quest 3D4.3, 在Templates>Scene列表中拖动一个“Simple Scene”模板到通道编辑界面中, 并把“Start3Dscene”通道作为程序开始执行的首通道。运行程序, 切换到项目摄像机视图, 可以发现场景中包含了一个简单的平面物体和一个三维的文本物体, 此文本物体的字样为“3D Text!”。当此项目在运行过程中, 文本物体的位置是没有办法改变的, 我们通过下面的操作, 最终可以实现在VB中任意改变文本物体在X轴方向上的位置。

打开Quest 3D4.3, 在切换到通道编辑界面中, 从Templates>System>Viewers>Active X列表中拖动一个“Active X Data”通道到通道编辑界面中, 把其连接到“Start3Dscene”通道的下面。从Templates>Variables>Value列表中拖动一个“Value”通道, 替换掉表示文本物体X轴坐标值的通道, 更改其通道名称为“Xvalue”, 对其创建一个快捷方式, 并连接到“Active X Data”通道的下面。

2) 从Templates>System>Viewers>Active X列表中拖动一个“Active X Event”通道到通道编辑界面中, 并把其连接到Start3Dscene通道的下面 (如图2所示) 。

3) 更改项目通道组的名称为“test”, 把项目文件命名为“test”后保存为一份.cgr格式的文件, 最后再把项目发布为Quest 3D viewer格式 (也就是q3d格式) 的文件, 此文件的名称也命名为“test”。

4 VB与Quest 3D的通信

4.1 给VB工具箱添加“Quest 3DCtrl4”控件

VB中一共有3类控件, 即标准控件、Active X控件和可插入对象。其中标准控件是在启动VB后就会显示在工具箱中可以直接使用的。Active X控件在使用之前是需要添加到工具箱中去的, 否则不能在窗体中使用, “Quest 3DCtrl4”控件就属于这类控件。

打开VB 6.0, 弹出其工作界面, 在工具箱窗口的空白处右击, 然后在弹出的快捷列表中选择“部件”选项, 弹出“部件”对话框, 选择“部件”对话框中的“控件”选项, 则会出现一个包含了各种Active X控件的列表, 在此处, 勾选“Quest 3Dactive X4 1.5 Type Library”选项, 单击确定按钮, 就为VB的工具箱添加一个可用于调用q3d文件的“Quest 3DCtrl4”控件。

4.2 创建VB工程文件

1) 打开VB 6.0, 建立一个标准的EXE工程文件, 此工程包含一个默认的窗体Form1。给窗体Form1添加一个标签控件、一个文本框控件、一个命令按钮以及一个“Quest3DCtrl4”控件。

2) 设置各个控件的属性值如下:

“Quest3DCtrl4”控件属性中的名称项设为:“Quest3D”。

标签控件属性中的Caption项设为:“文本物体的X轴坐标值为:”。

文本框控件属性中的名称项设为:“Text”, 属性中的Text项为空白。

命令按钮控件属性中的项设为“确定”。

合理调整各控件的大小及位置。最后新建一个文件夹, 把创建好的VB工程文件保存到此文件夹中, 并把之前做好的Quest3D场景文件 (即cgr格式文件和q3d格式文件) 也放置到此文件夹中。

4.3 代码编辑

接下来我们需要编写代码, 使得“Quest3DCtrl4”控件能够调用已经做好的Quest3D场景文件并为“确定”按钮添加一个事件过程, 这样Quest3D场景文件就可以通过“Quest3DCtrl4”控件在VB中显示出来并且场景文件中文本物体的X轴坐标值与文本框控件中所输入的数值相关联起来。

双击窗体Form1, 弹出其代码窗口, 在Form_Load () 函数内输入代码:

Quest3D.Url=App.Path&"Start Group.q3d"

此代码的意义为使得“Quest3DCtrl4”控件能够获取Quest3D场景文件的地址并进行调用。

双击“确定”按钮, 弹出命令按钮的代码窗口, 对命令按钮添加事件响应的程序代码为:

Quest 3D.Set Channel Value"test", "Xvalue", Val (Text.Text)

上述代码中Quest3D是所创建的Quest3DCtrl4控件的名称;Set Channel Value是为Quest 3DCtrl4控件所添加的一个方法, 通过这个方法可以对Quest3D程序里面的特定通道改变数值大小;“test”是之前所创建的Quest3D场景程序的通道组名称;“Xvalue”即是表示三维文本物体X轴坐标值的通道的名称, 也就是Quest3D项目文件中需要被操作通道的名称;Val () 是VB中的函数, 作用是把输入到Text文本框控件内的字符串类型变量转换为数值类型变量;Text.Text中前一个“Text”是我们创建的文本框控件的名称, 后面一个“Text”表示的是文本框控件的属性, 使用Text.Text可以来获取文本框控件内所输入的字符串信息。

至此, 这个简单的场景程序就制作好了。下面运行程序, 就会出现如图3所示的效果。在文本框内输入一个数值, 点击确定, 就会发现三维文本物体的位置在X轴上做出了相应的改变。

当然, 物体位置的改变只限于我们所设置的X轴方向上, 要使物体在其他两个轴向上做出改变, 只需在Quest 3D中添加两个Active XData通道, 并把表示物体Y轴和Z轴坐标值的通道创建快捷方式, 连接在上述的两个Active XData通道中, 最后在VB编程中添加相应的控件和事件过程即可。

摘要:VB是一种功能丰富、语法灵活的程序语言, 已经在建模仿真领域得到了十分广泛的应用。但随着计算机仿真技术的发展, VB仅仅能做二维仿真的这一缺点已经不能适应市场的需求。Quest 3D是一种功能强大的虚拟仿真软件, 它融合了当今先进的数字图像处理、计算机图形学、自动控制及各类传感器技术等多个分支领域的信息技术来模拟一个虚拟的三维空间, 可以使用户无限制地感受三维空间内的事物。这篇文章通过制作一个简单的例子, 详细地介绍了一种通过ActiveX控件把Quest 3D 4.3与VB 6.0这两个软件之间建立起通信的方法, 以便于我们充分利用这两个软件的长处, 制作出更加令人满意的效果。

关键词:Quest 3D 4.3,VB 6.0,ActiveX控件,数据通信

参考文献

[1]路朝龙.Quest 3D从入门到精通[M].北京:中国铁道出版社, 2012.

[2]尼春雨, 舒雄.Visual Basic基础与案例开发详解[M].北京:清华大学出版社, 2009.

[3]杨忠宝, 康顺哲.VB语言程序设计教程[M].北京:人民邮电出版社, 2009.

上一篇:海外上市风险下一篇:建模方法与数学解题