磅秤接口程序VB

磅秤接口程序VB,第1张

你看看这个程序,不知道对你有用不?如果有用,那最好了不过了,如果没有用,就算我没发吧!

现有电子秤一台,使用串口与计算机进行通讯。编写VB程序来访问串口,达到读取电子秤上显示的数据。该电子秤为BE01型仪表,输出为RS-232C标准接口,波特率为300-9600、偶校验、7个数据位、2个停止位。所有字符均发送11位ASCII码,一个起始位。在VB中与串口通讯需要引入控件MSComm串口通讯控件(在Microsoft Comm Control 60中)。具体程序如下:控件简称:MSC

Dim Out(12) As Byte '接收var中的值

Dim var As Variant '接收MSCinput中的数值

Dim nRece As Integer '计算MSCinputbuffer的个数

Dim i As Integer, j As Integer '随即变量,计算循环

Private Sub Form_Load()

ClearText

With MSC

CommPort = 1 '设置Com1为通信端口

Settings = "9600,E,7,2" '设置通信端口参数 9600赫兹、偶校验、7个数据位、1个停止位(这里需要进一步说明的是:Setting=”BBBB,P,D,S”。

含义是:B:Baud Rate(波特率);P:Parity(奇偶);D:Data Bit;S:Stop Bit)

InBufferSize = 40 '设置缓冲区接收数据为40字节

InputLen = 1 '设置Input一次从接收缓冲读取字节数为1

RThreshold = 1 '设置接收一个字节就产生OnComm事件

End With

End Sub

Private Sub ClearText()

Text3Text = ""

Text2Text = "5"

Text1Text = ""

End Sub

Private Sub Command1_Click()

ClearText

' nRece = 0 '计数器清零

With MSC

InputMode = comInputModeBinary '设置数据接收模式为二进制形式

InBufferCount = 0 '清除接收缓冲区

If Not PortOpen Then

PortOpen = True '打开通信端口

End If

End With

End Sub

Private Sub MSC_OnComm()

DelayTime ‘用来延续时间

ClearText

With MSC

Select Case CommEvent '判断通信事件

Case comEvReceive: '收到Rthreshold个字节产生的接收事件

SwichVar 1

If Out(1) = 2 Then '判断是否为数据的开始标志

RThreshold = 0 '关闭OnComm事件接收

End If

Do

DoEvents

Loop Until InBufferCount >= 3 '循环等待接收缓冲区>=3个字节

' nRece = nRece + 1

For i = 2 To 12

SwichVar i

Text1Text = Text1Text & Chr(Out(i))

Next

Text1Text = LTrim(Text1Text)

Text2Text = Text2Text & CStr(nRece)

RThreshold = 1 '打开MSComm事件接收

Case Else

' PortOpen = False

End Select

End With

End Sub

Private Sub DelayTime()

Dim bDT As Boolean

Dim sPrevious As Single, sLast As Single

bDT = True

sPrevious = Timer (Timer可以计算从子夜到现在所经过的秒数,在Microsoft Windows中,Timer函数可以返回一秒的小数部分)

Do While bDT

If Timer - sPrevious >= 03 Then bDT = False

Loop

bDT = True

End Sub

(通信传输速率为9600bps,则最快速度104ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均50ms 发送一个字节,连续读取串口数据时要在程序中添加循环等待程序)

Private Sub SwichVar(ByVal nNum As Integer)

DelayTime

var = Null

var = MSCInput

Out(nNum) = var(0)

End Sub

(设置接收数据模式采用二进制形式,即 InputMode=comInputModeBinary,但用Input属性读取数据时,不能直接赋值给 Byte 类型变量,只能通过先赋值给一个 Variant 类型变量,返回一个二进制数据的数组,再转换保存到Byte类型数变量中。)

Private Sub Text1_Change()

Text3Text = CText(Text1Text) - CText(Text2Text)

End Sub

Private Function CText(ByVal str As String) As Currency

If str <> "" Then

CText = CCur(Val(str))

Else

CText = 0

End If

End Function

module

spi_mosi(rst,clk,rd,wr,datain,

spics,spiclk,spido,spidi,dataout);

input

rst;

//置位信号,低有效

input

clk;

//时钟信号

input

rd;

//接收数据命令

input

wr;

//发送数据命令

input

spidi;

//SPI数据输入信号

input

[7:0]

datain;

//发送数据输入

output

spics;

//SPI片选信号

output

spiclk;

//SPI时钟信号

output

spido;

//SPI数据输出信号

output

[7:0]

dataout;

//接收数据输出

reg

spics;

reg

spiclk;

reg

spido;

reg

[7:0]

dstate,

dsend,dataout,dreceive

;//,cnt;

reg

[1:0]

spistate;

parameter

idle

=

2'b00;

parameter

send_data

=

2'b01;

parameter

receive_data

=

2'b10;

initial

begin

spics

<=

1'b1;

spiclk

<=

1'b1;

spido

<=

1'b1;

end

always

@(posedge

clk)

begin

if(!rst)

begin

spistate

<=

idle;

//

cnt

<=

8'd0;

spics

<=

1'b1;

spiclk

<=

1'b1;

spido

<=

1'b1;

dstate

<=

8'd0;

end

else

begin

case

(spistate)

2'b00:

begin

//

spics

<=

1'b1;

//

spiclk

<=

1'b1;

//

spido

<=

1'b1;

//

if(cnt

==

8'd0)

//

begin

//

cnt

<=

8'd0;

if((wr

==

1'b0)

&&

(rd

==

1'b1))

//发送资料转换

begin

spistate

<=

send_data;

dstate

<=

8'd0;

dsend

<=

datain;

end

else

if((wr

==

1'b1)

&&

(rd

==

1'b0))

//接收数据转换

begin

spistate

<=

receive_data;

dstate

<=

8'd0;

end

else

begin

spistate

<=

idle;

dstate

<=

8'd0;

end

//

end

//

else

//

begin

//

cnt

<=

cnt

+

8'd1;

//

end

end

2'b01:

//发送数据状态

begin

case

(dstate)

8'd0:

//产生片选信号有效

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

1'b1;

dstate

<=

8'd1;

end

8'd1:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

1'b1;

dstate

<=

8'd2;

end

8'd2:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

1'b1;

dstate

<=

8'd3;

end

8'd3:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

dsend[7];

//发送数据最高位

dstate

<=

8'd4;

end

8'd4:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

dsend[7];

dstate

<=

8'd5;

end

8'd5:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

dsend[6];

dstate

<=

8'd6;

end

8'd6:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

dsend[6];

dstate

<=

8'd7;

end

8'd7:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

dsend[5];

dstate

<=

8'd8;

end

8'd8:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

dsend[5];

dstate

<=

8'd9;

end

8'd9:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

dsend[4];

dstate

<=

8'd10;

end

8'd10:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

dsend[4];

dstate

<=

8'd11;

end

8'd11:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

dsend[3];

dstate

<=

8'd12;

end

8'd12:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

dsend[3];

dstate

<=

8'd13;

end

8'd13:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

dsend[2];

dstate

<=

8'd14;

end

8'd14:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

dsend[2];

dstate

<=

8'd15;

end

8'd15:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

dsend[1];

dstate

<=

8'd16;

end

8'd16:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

dsend[1];

dstate

<=

8'd17;

end

8'd17:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

//发送最低位数据

spido

<=

dsend[0];

dstate

<=

8'd18;

end

8'd18:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

dsend[0];

//spiclk的下降沿让最低位数据被读取

dstate

<=

8'd19;

end

8'd19:

//置片选信号无效

begin

spics

<=

1'b1;

spiclk

<=

1'b1;

spido

<=

1'b1;

dstate

<=

8'd20;

end

8'd20:

begin

spics

<=

1'b1;

spiclk

<=

1'b1;

spido

<=

1'b1;

dstate

<=

8'd0;

spistate

<=

idle;

end

default

begin

spics

<=

1'b1;

spiclk

<=

1'b1;

spido

<=

1'b1;

spistate

<=

idle;

end

endcase

end

2'b10:

//接收数据状态

begin

case

(dstate)

//片选信号有效

8'd0:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

1'b1;

dstate

<=

8'd1;

end

8'd1:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

1'b1;

dstate

<=

8'd2;

end

8'd2:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

spido

<=

1'b1;

dstate

<=

8'd3;

end

8'd3:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

dstate

<=

8'd4;

end

8'd4:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

//紧接着上升沿的下降沿数据被读取

dreceive[7]

<=

spidi;

//接收数据最高位

dstate

<=

8'd5;

end

8'd5:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

dstate

<=

8'd6;

end

8'd6:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

dreceive[6]

<=

spidi;

dstate

<=

8'd7;

end

8'd7:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

dstate

<=

8'd8;

end

8'd8:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

dreceive[5]

<=

spidi;

dstate

<=

8'd9;

end

8'd9:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

dstate

<=

8'd10;

end

8'd10:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

dreceive[4]

<=

spidi;

dstate

<=

8'd11;

end

8'd11:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

dstate

<=

8'd12;

end

8'd12:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

dreceive[3]

<=

spidi;

dstate

<=

8'd13;

end

8'd13:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

dstate

<=

8'd14;

end

8'd14:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

dreceive[2]

<=

spidi;

dstate

<=

8'd15;

end

8'd15:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

dstate

<=

8'd16;

end

8'd16:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

dreceive[1]

<=

spidi;

dstate

<=

8'd17;

end

8'd17:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

dstate

<=

8'd18;

end

8'd18:

begin

spics

<=

1'b0;

spiclk

<=

1'b0;

dreceive[0]

<=

spidi;

//接收数据最低位

dstate

<=

8'd19;

end

8'd19:

begin

spics

<=

1'b0;

spiclk

<=

1'b1;

spido

<=

1'b1;

dstate

<=

8'd20;

dataout<=

dreceive;

end

8'd20:

begin

spics

<=

1'b1;

//片选信号无效

spiclk

<=

1'b1;

spido

<=

1'b1;

dstate

<=

8'd0;

spistate

<=

idle;

end

endcase

end

default:

begin

spics

<=

1'b1;

spiclk

<=

1'b1;

spido

<=

1'b1;

spistate

<=

idle;

end

endcase

//对应上面的发送数据情形

end

//对应上面的RST没有按下的情形

end

//对应最上面的always@(posedge

clk)

endmodule

应用程序编程接口,简称API(Application Programming Interface),就是软件系统不同组成部分衔接的约定。在数据封装时,网络分层中的每个层相互之间会用接口进行交互并提供服务,其中应用层与用户之间的接口称之为应用程序接口(API,Application Programming Interface)。API实际上是一种功能集合,也可说是定义、协议的集合,无论是那种集合,它的实质都是通过抽象为用户屏蔽实现上的细节和复杂性。从用户角度看应用程序接口,表现为一系列API函数,用户可以使用这些函数进行网络应用程序开发。从网络角度看,应用程序接口给用户提供了一组方法,用户可以使用这组方法向应用层发送业务请求、信息和数据,网络中的各层则依次响应,最终完成网络数据传输。

接口程序,顾名思义是为了进行不同程序间对接的接口;

举个例子,我需要和组态软件进行连接,用于控制我自己做的DCS的下位机,那么我需要和组态软件的数据库进行交互,这个时候我就需要单独开发一个机遇OPC的数据接口程序,用于把数据库里的内容提取出来转换成我自定义的串行数据发送到485总线上,然后我的单片机接收后再将现场采集到的数据通过总线 发给接口程序,接口程序再将数据按照格式存放到组态软件的数据库里供调用;也就是一个翻译和中转的作用;

public interface F{

public void prt();

}

public abstract class A{

public abstract void prt1();

public void prt2(){

Systemoutprintln("prt2");

}

}

public class Imp extends abs implements F{

public void prt(){

Systemoutprintln("implement");

}

public void prt1(){

Systemoutprintln("abstract");

}

public static void main(){

Imp imp = new Imp();

impprt();

impprt1();

impprt2();

}

}

以上就是关于磅秤接口程序VB全部的内容,包括:磅秤接口程序VB、spi接口的Verilog程序、应用程序接口的介绍等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10123902.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存