第一篇:VB实现PC与欧姆龙PLC通讯的串口编程
Private Sub Form_Load()
Dim i As Integer'OPEN COM1
If ComTrue(1)= 0 Then
If ComOpen(1, 38400, 7, 1, 1, “sjh”)= 1 Then 'MsgBox(“已注册”)'sjh为你的注册账号Call SetDelayNum(64)
End If
End If
jisu
jisu1
jisu2
End Sub
第二篇:VB中串口通讯的实现
VB中串口通讯的实现.txt VB中串口通讯的实现
------------------
一、概述
串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC间的通讯以及PC和单片机之间的通讯之中。提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。
实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB中,一样能够实现串口通 讯,甚至其实现方法和C、汇编相比,要更加快捷方便。下面,笔者就介绍一下在VB中实现串口通讯的方法。
在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控件。我们只要通 过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。下面,笔者就简要地介绍一下
MSComm控件的使用方法。
二、MSComm控件的主要属性、事件
1、MSComm的属性
由于MSComm控件属性很多,在此笔者仅介绍与实现串口通讯密切相关的核心属性。
Commport:设置通讯所占用的串口号。如设成1(默认值),表示对Com1进行操作。
Setting:对串口通讯的相关参数。包括串口通讯的比特率,奇偶校验,数据位长度、停止位等。其默认值 是“9600,N,8,1”,表示串口比特率是9600bit/s,不作奇偶校验,8位数据位,1个停止位。
Portopen:设置串口状态,值为True时打开串口,值为False时关闭串口。
Input:从输入寄存器读取数据,返回值为从串口读取的数据内容,同时输入寄存器将被清空。
Ouput:发送数据到输出寄存器。
InBufferCount:设置输入寄存器所存储的字符数,当将其值设为0时,则输入寄存器将被清空。
InputMode:设置从输入寄存器中读取数据的形式。若值为0,则表示以文本形式读取;值为1,则表示以 二进制形式读取。
OutBufferCount:设置输出寄存器所存储的字符数,当将其值设为0时,则输出寄存器将被清空。
RThreshold:设置在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm事件之前要接受的字符 数。
CommEvent属性:返回最近的通讯事件或错误。通过对它具体属性值的查询,我们就可以获得通讯事件和通 讯错误的完整信息。当其值是comEvReceive时表示接收到数据。
2、MSComm的事件
除了公共事件之外,MSComm只有一个OnComm事件。当CommEvent属性值变化时将发生OnComm事件,指示发生 一个通讯事件或错误。当我们设置Rtheshold属性值为0时,将使得捕获comEvReceive事件无效。
三、串口通讯编程实例
在完成了对MSComm控件的简要介绍之后,笔者就以实际程序为例,介绍一下串口通讯的具体实现方法。
1、PC机间的串口通讯
(1)、实现方法:
A、新建一个窗体,在上面放两个Text控件、两个CommandButton控件和两个Label控件(如图1.bmp所示)。
具体见下表:
控件类型 名称 Caption属性 作用
-----------------
Text Text1-------输入所要发送的信息
Text Text2-------显示接收到的信息
CommandButton Command1 发 送---------CommandButton Command2 退 出---------
Label Label1 发送的数据 提示
Label Label2 接收的数据 提示
B、在控件工具箱中的空白处点击鼠标右键,在弹出的菜单中选择“部件”,在弹出的窗口中的控件列表中 找到“Microsoft Comm Control”,将其选中,在点击“应用”、“关闭”,在控件工具栏中就会出现一个电 话的小图标。
C、用串口线将两台电脑连接起来。您可以使用Com1对Com1的对应连接,也可以使用Com1和Com2的交叉连接。
本程序使用的是Com1对Com1的连接。
D、输入以下代码:
Private Sub Command1_Click()
'...发送数据
MSComm1.OutBufferCount = 0 '...清空输出寄存器
MSComm1.Output = Text1.Text '...发送数据
End Sub
Private Sub Command2_Click()
'...退出
Unload Me
End Sub
Private Sub Form_Load()
'...初始化
MSComm1.CommPort = 1 '...使用Com1口
MSComm1.Settings = “9600,n,8,1” '...设置通讯参数
MSComm1.PortOpen = True '...打开串口
End Sub
Private Sub Mscomm1_Oncomm()
'...通讯事件发生
Select Case MSComm1.CommEvent
Case comEvReceive '...有接受事件发生
Text2.Text = MSComm1.Input '...接受显示数据
MSComm1.InBufferCount = 0 '...清空输入寄存器
End Select
End Sub
2、PC机与单片机之间的通讯
PC机与单片机之间的通讯被广泛的用于工业、医疗测控等领域之中。在应用中,我们通常将单片机作为“感 受器”和“效应器”,负责数据采集、响应计算机发出的指令对电路进行控制,有时也进行一些简单的运算,最后再将执行数据反馈给计算机处理。本程序将实现在PC机上输入一个0-255之间的整数,将此数据发送到单片 机,单片机接收到数据后,将数据在显示管上显示,再将此数除以2,将得数返回给PC机。(运行效果如图 3.BMP所示)其实现方法如下:
A、同PC机间通讯的实现方法A-B。
B、连接电脑和单片机。注意!由于PC机端的RS232电平与单片机端TTL的并不不匹配,故应注意电平转换。
C、在VB中输入以下代码:
Private Sub Mscomm1_Oncomm()
'...通讯事件发生
Dim indata As Variant
Dim bte(0)As Byte
Select Case MSComm1.CommEvent
Case comEvReceive '...有接受事件发生
indata = MSComm1.Input
'...注意!要通过MSComm控件发送或接收二进制数据必须用Variant类型的变量对二进
'...制Byte类型的变量进行转换!
bte(0)= AscB(indata)
Text2.Text = bte(0)
MSComm1.InBufferCount = 0 '...清空输入寄存器
End Select
End Sub
Private Sub Command1_Click()
'...发送数据
Dim Num As Integer
Dim outbte(0)As Byte
Num = Val(Text1.Text)
outbte(0)= CByte(Num)
MSComm1.OutBufferCount = 0 '...清空输出寄存器
MSComm1.Output = outbte(0)'...发送数据
End Sub
Private Sub Command2_Click()
'...退出
Unload Me
End Sub
Private Sub Form_Load()
'...初始化
MSComm1.CommPort = 1 '...使用Com1口
MSComm1.Settings = “9600,n,8,1” '...设置通讯参数
MSComm1.PortOpen = True '...打开串口
End Sub
D、单片机工作方式置于1,比特率设为9600bit/s。在单片机上,我们只得使用汇编语言编写,并且调用中 断实现对串口数据的收发工作。源代码如下:
PUSH PSW ;将程序状态字压入堆栈
PUSH ACC ;将累加器压入堆栈
CLR EA ;关闭系统中断
CLR RI ;清除中断标志位
MOV A,SBUF ;从接收寄存器中读取数据
MOV 70H,A ;分解数据百、十、个位并显示
MOV B,#100
DIV AB
MOV 52H,A ;分解百位,送入存储器52H
MOV A,B
MOV B,#10
DIV AB
MOV 51H,A ;分解十位,送入存储器51H
MOV 50H,B ;分解个位,送入存储器50H MOV A,70H
MOV B,#2
DIV AB;将接受的数据除以2
MOV SBUF,A ;将得数发送到输出寄存器
ACALL DL1 ;延时保证数据完整发送
ACALL DL1
CLR RI ;清除中断标志位
SETB EA ;打开系统中断
POP ACC;累加器出栈
POP PSW ;程序状态字出栈
RETI ;中断程序返回
3、编程环境
以上程序在Windows 2000 Professional,Visual Basic 6.0企业版,AT89C52型单片机下调试通过。
四、总结
从以上程序可以看出,在VB中利用MSComm控件,可以快速开发出串口通讯程序,从而大大提高编程效率。
演讲稿
尊敬的老师们,同学们下午好:
我是来自10级经济学(2)班的学习委,我叫张盼盼,很荣幸有这次机会和大家一起交流担任学习委员这一职务的经验。
转眼间大学生活已经过了一年多,在这一年多的时间里,我一直担任着学习委员这一职务。回望这一年多,自己走过的路,留下的或深或浅的足迹,不仅充满了欢愉,也充满了淡淡的苦涩。一年多的工作,让我学到了很多很多,下面将自己的工作经验和大家一起分享。
学习委员是班上的一个重要职位,在我当初当上它的时候,我就在想一定不要辜负老师及同学们我的信任和支持,一定要把工作做好。要认真负责,态度踏实,要有一定的组织,领导,执行能力,并且做事情要公平,公正,公开,积极落实学校学院的具体工作。作为一名合格的学习委员,要收集学生对老师的意见和老师的教学动态。在很多情况下,老师无法和那么多学生直接打交道,很多老师也无暇顾及那么多的学生,特别是大家刚进入大学,很多人一时还不适应老师的教学模式。学习委员是老师与学生之间沟通的一个桥梁,学习委员要及时地向老师提出同学们的建议和疑问,熟悉老师对学生的基本要求。再次,学习委员在学习上要做好模范带头作用,要有优异的成绩,当同学们向我提出问题时,基本上给同学一个正确的回复。
总之,在一学年的工作之中,我懂得如何落实各项工作,如何和班委有效地分工合作,如何和同学沟通交流并且提高大家的学习积极性。当然,我的工作还存在着很多不足之处。比日:有的时候得不到同学们的响应,同学们不积极主动支持我的工作;在收集同学们对自己工作意见方面做得不够,有些事情做错了,没有周围同学的提醒,自己也没有发觉等等。最严重的一次是,我没有把英语四六级报名的时间,地点通知到位,导致我们班有4名同学错过报名的时间。这次事使我懂得了做事要脚踏实地,不能马虎。
在这次的交流会中,我希望大家可以从中吸取一些好的经验,带动本班级的学习风气,同时也相信大家在大学毕业后找到好的工作。谢谢大家!
第三篇:三菱PLC与PC上位机VB通讯
三菱PLC通讯
三菱PLC与PC上位机VB通讯
三菱PLC:FX1N + FX1N-232-BD
FX2N + FX2N-232-BD 计算机:Windows XP中文企业版 + Visual Basic 6.0中文企业版
Windows 98中文版 + Visual Basic 6.0 中文企业版
两者之间连接使用的是FX-232CAB-1电缆线(2-3,3-2,4-6(8),5-5)
一.三菱PLC的设置
三菱FX PLC在进行计算机链接(专用协议)和无协议通讯(RS指令)时均须对通讯格式(D8120)进行设定。其中包含有波特率、数据长度、奇偶校验、停止位和协议格式等。在修改了D8120的设置后,确保关掉PLC的电源,然后再打开。
此外,对于采用RS485形式1:N计算机链接的还必须对站点号(D8121)进行设定。设定的范围从00H到0FH(即0到15)。在这里对D8120采用下述设置: b15 b0 0110 1000 1000 1110 6 8 8 E 即数据长度为7位,偶校验,2位停止位,波特率为9600bps,无标题符和终结符,采用计算机链接(RS-232C),自动添加和校验码,采用专用协议格式1。同时设定站号为0。具体设定如下所示:
FX PLC进行计算机链接时可用的专用协议有两种:格式1和格式4。两种格式的差别在于是否在每一个块上添加了CR + LF,其中添加了CR + LF的是格式4。在这里采用格式1。
二.上位机程序的编制
这里采用Microsoft公司的Visual Basic 6.0中文企业版编制上位机程序。Visual Basic中提供了一个名为MSComm的通信控件便于设计串行通信的程序。MSComm控件的主要属性有: 1. CommPort属性
CommPort属性用于指定所要使用的串行端口的号码。虽然Windows操作系统可以容纳最多256个串行通信端口,不过Visual Basic的MSComm控件则仅限于16个端口。2. Settings属性
Settings属性用于设置初始化参数。以字符串的形式设置波特率、奇偶校验、数据位、停止位等4个参数。其格式为“BBBB,P,D,S”,其中BBBB表示波特率,P表示奇偶校验位检查方式,D表示数据位数,S表示停止位数。一般情况下,欧美仪器习惯使用“9600,n,8,1”当成设置值;而日本仪器则习惯使用“9600,e,7,2”作为设置值。Settings设置完成之后,所传输及接受的字符串便以此设置为准,使用RS-232通信的双方,Settings必须完全一样,彼此才能顺利地通信,否则双方将无法正确接收到彼此所传输的信号。所以,该属性的设置必须和三菱PLC中D8120的相关设置保持一致。在这里,统一采用“9600,e,7,2”的设定。
三菱PLC通讯
3. PortOpen属性
PortOpen属性用于设置通信连接端口的状态。在使用串行端口之前必须先将要使用的串行端口打开。在上位机程序中应进行如下设定: Private Sub Form_Load()'窗体载入事件 MSComm1.CommPort = 1 '选择端口号 MSComm1.Settings = “9600,e,7,2” '设置端口属性 MSComm1.PortOpen = True '打开端口 End Sub 4. Output属性
MSComm控件的Output属性提供了发送的功能,当从计算机向可编程控制器写入数据或从可编程控制器读取数据时,上位机应当先发出以下格式(格式1)的指令字符串: ENQ 站号 PC号 命令 消息等待时间 字符区域A 和校验代码
其中站号为在D8121中的设定值,这里是:00,PC号对于FX系列为:FF。
因为ENQ,ACK,NAK等通信控制字符是不可见字符,所以先用Chr函数对其进行赋值: ENQ=Chr(5)ACK=Chr(6)NAK=Chr(&H15)然后在上位机程序中写入以下代码即可发出指令:
MSComm1.Output=ENQ &“00FF<命令><消息等待时间><字符区域A><和校验代码>” 5. Input属性
与Output属性相反,Input属性提供了接收数据的功能。它将对方传到输入缓冲区中的数据读进程序中,并清除缓冲区中已被读取的数据。
a.如果是从计算机向可编程控制器写入数据时,接收到从可编程控制器返回的应该是以下格式的字符串:
ACK 站号 PC号
或者
NAK 站号 PC号 错误代码
前一种表示可编程控制器已经正确接收到从计算机发来的指令,后一种表示可编程控制器未正确接收到从计算机发来的指令。
b.如果是从计算机向可编程控制器读取数据时,接收到从可编程控制器返回的应该是以下格式的字符串:
STX 站号 PC号 字符区域B ETX 和校验代码 或者 NAK 站号 PC号 错误代码
如果要连续读取数据可以利用Timer控件。将Output和Input放在Timer控件的Timer事件中即可。程序会以Timer控件的Interval属性中设置的间隔去发送指令和接收数据。对于MSComm控件的其他一些属性使用VB的默认值即可。
在串行通信传输的应用中,经常使用的Visual Basic中的字符串处理函数如下: Chr函数:返回含有特定ANSI或DBCS字符码的字符串。Asc函数:返回字符串第一个字符的ANSI或DBCS字符码。
Len函数:返回以字符数为单位的字符串长度。
Mid函数:取得字符串中特定数量的字符,可指定开始获取的位置和长度。Left函数:取得字符串的左边固定字符数的字符串。
Right函数:取得字符串的右边固定字符数的字符串。
Val函数:把字符串转换为数值,可以将8进制或16进制的字符串转换为10进制。Hex函数:返回以十六进制数值表示的字符串。
三菱PLC通讯
RS指令应用一
三菱PLC与计算机利用RS指令进行通讯(通讯手册9-14例)三菱PLC:FX1N + FX1N-232-BD 计算机:Windows XP中文企业版 + Visual Basic 6.0中文企业版
Windows 98中文版 + Visual Basic 6.0中文企业版
两者之间连接使用的是FX-232CAB-1电缆线(2-3,3-2,4-6(8),5-5)
一.三菱PLC的设置
三菱FX PLC在进行计算机链接(专用协议)和无协议通讯(RS指令)时均须对通讯格式(D8120)进行设定。其中包含有波特率、数据长度、奇偶校验、停止位和协议格式等。在修改了D8120的设置后,确保关掉PLC的电源,然后再打开。在这里对D8120采用下述设置: b15 b0 0000 0100 1000 1111 0 4 8 F 即数据长度为8位,偶校验,2位停止位,波特率为9600bps,无标题符和终结符,没有添加和校验码,采用无协议。PLC程序如下:
二.上位机程序的编制
完整程序代码及注释如下:
Private Sub cmd1_Click()
'发送按钮
lbl1.Caption = “" If txt1.Text = ”“ Then
'若发送数据栏中未键入指令则提示键入指令 lbl1.Caption = ”Please input data“ Else MSComm1.Output = txt1.Text
'发送指令 Timer1.Enabled = True
'触发延时接收 End If
三菱PLC通讯
End Sub Private Sub Form_Load()
'窗体载入事件 MSComm1.CommPort = 1
'选择端口号 MSComm1.Settings = ”9600,e,8,2“ '设置端口属性 MSComm1.PortOpen = True
'打开端口 End Sub
Private Sub Timer1_Timer()
'延时500ms接收 NAK = Chr(&H15)If MSComm1.InBufferCount > 0 Then txt2.Text = ”“ a = MSComm1.Input txt2.Text = a
'在接收数据栏中显示接收到的数据 Else lbl1.Caption = ”No response" End If Timer1.Enabled = False End Sub
三菱PLC通讯
RS指令应用二
三菱PLC与仪表之间通讯
三菱PLC:FX1N + FX1N-232-BD 仪表(称重器)
两者之间连线该仪表仅提供3线式的简化RS-232C口,即只有:RXD,TXD和GND,于是采用2-3,3-2,5-5的三线接法。
1. 对D8120进行设置并使其与仪表中的设置一致,对其中的控制线设置成使用无硬件握手方式,即(b12,b11,b10)=(0,0,0)。根据仪表说明书上对通讯的要求,设置如下:
b15
b0 0000 0000 1000 0110
0 0 8 6 2. 根据仪表说明书所述,该种仪表有两种工作方式:连续发送和指令状态。这里设置成指令状态,即仪表根据发来的指令返回相应的数据。在此使用READ指令,根据指令协议,输入的指令必须以
注:发送数据点数和接收数据点数必须按指令协议进行设置,否则通讯不能正常进行。PLC程序如下:
三菱PLC通讯
参考资料
1.三菱FX通讯用户手册(RS-232C,RS485)2.《Visual Basic与RS-232串行通信控制(最新版)》清华大学出版社
第四篇:《VB编程实现文字闪烁》教案
《VB编程实现文字闪烁》教案
授课课题:VB编程实现文字闪烁 授课时间: 授课地点: 授课班级: 授 课 人: 教学目的:
一、认知目标
1、理解文字闪烁程序的设计思想和设计方法
2、理解Select case语句构造多分支程序的方法和实现的技巧
3、理解RGB()函数和RND()函数配合,动态随机生成颜色的方法
二、技能目标
1、熟练使用VB中的Label控件构造程序界面
2、熟练使用格式工具对控件进行排列设置
3、熟练使用编程工具对程序代码进行编写和简单的调试
三、情感目标
1、培养学生的自学能力、自主创意、分析解决问题的能力
2、培养学生的团队合作精神,互相协作完成任务的能力
教学重点:
1、熟练使用VB中的Label控件构造程序界面
2、理解文字闪烁程序的设计思想和设计方法
3、理解Select case语句构造多分支程序的方法和实现的技巧
教学难点:
1、理解文字闪烁程序的设计思想和设计方法
2、理解Select case语句构造多分支程序的方法和实现的技巧
教学方法:直观演示法、案例教学法、分层教学法和兴趣激励法 教学用具:VB开发工具、VB程序案例、多媒体演示系统
学情分析:高二的学生上课纪律较好,比较能够配合教师进行教学;通过大半学期的VB学习,对项目教学法也已经比较熟悉;但大部分学生由于基础知识和学习方法的限制,学习还比较死板,学习方法还只停留在教师教学生学的层面上;学生也不太主动通过摸索、调试自己解决问题。所以本课准备先讲后练,步步引导,并协调好学生自主学习和教师辅助学习的关系,提高学生的主观能动性。
教学过程:
【引入】演示原来讲解过的文字变色的例子和今天要讲解的文字闪烁的例子;提问学生:这两个案例有什么不同。可以调节闪烁的时间,让学生仔细观察。
【预测】学生通过观察大部分都能过发现两个实例的区别。(5分钟)【演示】开始新课,教师先演示Label控件排列文字的方法。
【预测】学生可能有疑问,为什么8个汉字要用8个Label控件呢,这个问题教师主动提出来,学生可以思考以后马上解答,也可以设计完程序以后解答。【讲解】教师讲解核心代码和代码设计思想。该过程是学习程序构造算法的关键,教师有目的地进行引导讲解。该过程以教师讲为主,根据学情进行难度适中的提问,力求让大部分学生理解程序的基本设计思路。(10分钟)
【预测】大部分学生应该能初步理解程序的设计思路。在学生自己练习时让学生自己再去体会。
【摸索】学生开始进行设计,也可以在设计过程中进行简单的学生之间的交流和讨论。
【巡视】教师巡视,视学生的设计情况决定是否终止摸索而再次进行教师统一讲解教学。
【预测】由于学生有实习计划和程序代码,大部分学生都应该能够进行设计,但学..生对程序的理解可能要困难的多。提高程序设计的方法只有两条:多阅读别..............人的优秀程序;自己大胆尝试程序设计。
【建议】成绩比较优秀的学生应该能够完成任务,有部分学生在设计时回出现教学前教师不可预见的错误,如果大部分学生完成任务顺利而教学时间充足,应该把学生中常见的错误和完成好的实例进行展示讲解。教师应该走到学生中去辅助教学。
【练习】尽量能让学生在教师小节前做完设计。
【建议】该过程是学生提升技能,形成能力的关键,应要求学生人人动手,努力设计。(25分钟)
教学评价:
【小节】学生应上传作品和上缴实训报告,教师应结合学生作品对本节内容进行总结。
【预测】有部分学生在设计时会出现教学前教师不可预见的错误,如果大部分学生完成任务顺利而教学时间充足,应该把学生中常见的错误和完成好的实例进行展示讲解。教师应该走到学生中去辅助教学。
【作业】文字闪烁程序的修改版——跳跃文字闪烁(5分钟)
第五篇:对编写单片机与欧姆龙PLC串口通信遇到问题做一些小结
对编写单片机与欧姆龙PLC串口通信遇到问题做一些小结
2011-07-15 11:28:31|分类:|标签: |字号大中小 订阅
1,程序发的数据包太多了,并且数据包的定义是RAM的,很容易造成单片机的RAM不够,因为单片机默认的RAM是128个字节,不过可以扩展高的128个字节,范围在80H-FFH,定义是这样定义的,char idata
XX[]:
如果这样不够的话就只能在想办法来解决这个问题,找一些规律啊,或是改成查表的形式,定义成code 类
型:uchar code XX[]:
2.程序中的要对一些数据进行掉电保存,我这里用到了单片机内部自带的EEROM,在编写程序中也遇到
一些问题,只能保存一个数据,后面:后面调了一下程序:发现一个问题,就是每个对数据进行更新的话,都要对你定义的所以地址的内
容进行,然后在写入,单对某个地址的话就是不行,:
//=======================对保存的四个数据位进行清除扇区
Sector_Erase(add1);
Sector_Erase(add2);
Sector_Erase(add3);
Sector_Erase(add4);
_nop_();_nop_();_nop_();//===小延时一下
//=====================写入要保存的数据位,也是一次要保存好4个数据,不能单一进行了,不然就
会只能保存一个数据
Byte_Program(add1,key_count);
Byte_Program(add2,(char)CLAMP_flag);
Byte_Program(add3,(char)CONV_flag);
Byte_Program(add4,(char)MODE_flag);
3,我这里的PLC用的通信协议是:9600BPSN 7 2
也就是:一个起启位,7个数据位,两个停止位,无校验的形式;
这个我在单片机中用的通信协议是:9600BPSN 8 1
也就是:一个起启位,8个数据位,一个停止位,无校验的形式;
这些两个协议就不对了,哪就要去兼容了,根据数据的原理,我们只在发的数据的最高位是1(也就是一
个停止位)就可以兼容这种PLC的通信协议的形式了: