因公司软件产品需要和POS机进行通信,所以笔者研究了一下PB串口编程的实现方式。
PB是一个非常好的数据库管理系统的开发工具,但在web和计算机接口通信等方面PB就不是很好用了。幸好我们有ole和com这些很牛的技术,可以让我们非常容易的使用一些组件的功能,而不用自己去开发去关心底层的业务逻辑。使用PB进行串口编程有两种途径,一种是使用微软提供的通信控件(MScomm控件),另一种是用Win32 API函数。下面主要讲解使用MScomm控件实现串口编程的方法。
串行通信控件Mscomm32.ocx(简称MSComm)是 Microsoft公司提供的Windows下串行通信编程的32位ActiveX控件。该控件将串行通信的大部分操作都封装到控件的内部,提供了一系列通信命令的接口属性和事件,它允许建立串行口连接,可以连接到其他通信设备(如Modem)、还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工的事件驱动的通信程序。MSComm控件提供两种处理通信的方式:事件驱动方式和查询方式。查询方式通过检查CommEvent属性值来确定通讯事件和错误。事件驱动方式在串口接收到或发送完指定数量的数据时或状态发生改变时,MSComm通信控件捕获到这些事件和错误,触发OnComm事件,通过检查MSComm控件的 CommEvent属性的值来获得所发生的事件和错误代码值,从而执行相应的处理。
1、Mscomm32.ocx的注册
我们可以单独制做一个注册程序,并打包到您的应用程序中。如果需要安装的目标计算机已经有“Mscomm”控件,则不需要进行任何工作。如果没有“Mscomm”控件,则需要运行这个注册程序。
程序的PB编码如下:
RegistrySet("HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905","",RegString!,"kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun")
run("regsvr32 mscomm32.ocx")
messagebox('提示','请重新启动计算机')
这只是简单的编码,并且mscomm32.ocx文件在当前运行目录,注册成功即出现系统消息。为了使界面更友好,您可以做一步修饰,例如“run("regsvr32/s mscomm32.ocx")”,这样就可以使屏幕上不出现系统消息了。
您还可以利用API函数,通过“ExitWindowsEx”函数(user32.dll)可以实现重新启动Windows系统。
2、使用Mscomm32控件进行串口通信
Mscomm32控件的常用属性如下:
CommPort:设置或返回串行端口号,缺省为1
Setting:设置或返回串行端的波特率、奇偶校验位、 数据位数、停止位。缺省值为"9600,N,8,1"。
PortOpen:设置它为True则打开端口,设置它为False则关闭端口。
InBufferSize:设置或返回接收缓冲区的大小,缺省为1024 字 节。
InBufferCount:返回接收缓冲区内的等代读取的字节个数,设属性为0清除接收缓冲区。
OutBufferSize:设置或返回发送缓冲区,缺省为512字节。
OutBufferCounter:返回发送缓冲区内等待发送的字符数,可用0来清空缓冲区。
Output:向发送缓冲区传送数据
RThreshold: 该属性确定当接收缓冲区内字节个数达或超过该值后就产生代码为ComEventReceive
的OnComm事件,设置位0,则不产生OnComm事件。
CommEvent:有通讯错误或事件发生时产生OnComm事件,CommEvent事件的值可以用来确定引
发OnComm事件的具体的错误或事件常用的有以下几种(更详细的资料可参考MSComm控件帮助文件)
ComEventbreak:接受到中断信号
ComEventFrame:硬件检测到帧错误。
ComEventRxOver:接收缓冲区溢出。
ComEventTxFull:发送缓冲区溢出。
ComEventReceive:接受到规定的字符数。
InputLen:设置或返回接收缓冲区内用Input读入的个数。若取0,则读取整个缓冲区的内容。
Input:返回并删除接受缓冲区的数据。
3、pb的实例代码
我们可以根据我们程序的需要来设置上面的属性。Mscomm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。由于笔者只需要和POS机进行简单的通信,所以我使用比较简单的查询方式。对于查询方式,我们只要使用PB操作Mscomm32的output和input两个属性就可以了。下面是示例代码:
oleobject i_ole_comm //声明ole对象,用来连接Mscomm控件
i_ole_comm=create oleobject
vresult=i_ole_comm.connecttonewobject('mscommlib.mscomm')
//下面初始化mscomm32的参数,并打开串口
if p_comport=1 then
i_ole_comm.CommPort = 1 //1代表com1口,2代表com2口
elseif p_comport=2 then
i_ole_comm.CommPort = 2
else
i_errcode=-1
i_errtext='uo_rs232ld.f_setdevice:打开串口com'+string(p_comport)+'端口出错,请确认此端口存在且没有被其他程序使用'
return i_errcode
end if
i_ole_comm.Settings="9600,n,8,1" //波特率这里设置成了9600,这个要与pos机设置的波特率一直
i_ole_comm.InputLen=0
i_ole_comm.InBufferSize=90
i_ole_comm.OutBufferSize=60
i_ole_comm.SThreshold=0
i_ole_comm.RThreshold=9
i_ole_comm.Handshaking=0
i_ole_comm.InBufferCount=0
i_ole_comm.DTREnable=true
if not i_ole_comm.PortOpen then
i_ole_comm.PortOpen=True
end if
//向串口发送报文
i_ole_comm.OutPut=“Hello world”
//接受串口报文,循环等待接收pos机上传的报文,超时则返回
Do while true
Yield()
sleep(20)
vinput +=i_ole_comm.Input //从Com端口取数据
if Pos(vinput,vend) > 0 then exit //如果存在消息结束符,则推出循环
loop
相关推荐
本文将详细讨论如何使用PowerBuilder(PB)实现串口通信程序,以及如何借助Windows API函数来实现这一功能。 首先,我们需要理解PowerBuilder是一种可视化的编程工具,主要用于开发企业级的应用系统。它具有强大的...
PB串口控件是PowerBuilder(PB)编程环境中用于实现串行通信功能的组件。它为开发者提供了一种简便的方法来访问和控制计算机的串行端口,如COM1、COM2等,允许应用程序发送和接收数据。串口通信在各种工业自动化、...
PB串口通讯用户对象是PowerBuilder(PB)编程中用于实现设备间串行通信的一种工具。在编程领域,串口通信是一种常见的数据传输方式,它允许计算机与其他硬件设备(如打印机、扫描仪、调制解调器等)通过串行接口进行...
标题 "pb完整串口编程代码" 指的是使用PowerBuilder(PB)开发的一个串口通信的完整程序代码。PowerBuilder是一种可视化的、面向对象的编程工具,常用于企业级应用开发,尤其在数据库应用程序中广泛应用。在这个项目...
PB串口通讯是编程领域中一个重要的知识点,尤其在工业自动化、嵌入式系统和设备通信中广泛应用。PB,全称PowerBuilder,是一款强大的数据库应用开发工具,它提供了丰富的功能来帮助开发者创建桌面应用程序。在PB中...
《PB串口通信支持16进制:深入理解与应用》 PowerBuilder(简称PB)是一种流行的、基于事件驱动的编程环境,尤其适用于构建数据库应用程序。在PB中,实现串口通信是连接硬件设备或与其他系统进行数据交换的重要手段...
原先的程序数据缓冲区采用String类型,因此无法发送H00,现将数据缓冲区修改为BLOB类型,可以发送任意数据。<br> 在原先程序的基础上,增加了两个...由于所有功能都是PB代码实现的,因此比使用OCX控件访问串口的
### 如何在PB中实现串口编程 #### 知识点一:PB与串口编程基础 - **PB(PowerBuilder)**:一种快速应用开发工具,由Sybase公司(后被SAP收购)开发,主要用于Windows环境下的企业级应用程序开发。 - **串口通信**...
PB串口通讯例子(MsComm32)是一个基于PowerBuilder(PB)的示例项目,它利用MsComm32.ocx控件实现串行通信功能。串口通讯在各种嵌入式系统、设备控制和数据交换中扮演着重要角色,尤其是在工业自动化、仪表监控等领域...
PB串口数据处理是嵌入式开发或者工业自动化领域中常见的一种技术,主要涉及如何使用编程语言Processing Byte (PB) 对串行通信接口的数据进行采集、解析和控制。在这个主题中,我们将深入探讨PB串口数据处理的关键...
《PB串口通讯详解——基于PB6的纯代码实现》 在信息技术领域,尤其是在工业控制、数据采集等应用中,串口通讯(Serial Communication)扮演着至关重要的角色。本文将详细探讨如何使用PowerBuilder(PB)这一强大的...
PB串口,全称可能指的是Progress Bar的串口通信,是一种在编程中实现设备间通信的技术,常用于工业控制、嵌入式系统以及各种需要实时数据传输的应用中。在这个"pb_port.zip"压缩包中,包含的是关于PB串口通信的相关...
"pbcomm_blob_modi_recieve_PB串口发送指令_"这个标题暗示了我们讨论的是关于如何在PowerBuilder 9.0(PB9.0)中实现串口数据的发送和接收。下面我们将详细探讨相关的知识点。 首先,我们需要了解PowerBuilder(PB...
标题 "纯pb的串口通讯的程序" 描述了这是一个使用PowerBuilder (PB) 12.5版本开发的软件,其主要功能是实现串行通信。PowerBuilder是一款流行...对于想要学习PB串口通讯和多线程编程的开发者来说,这是一个宝贵的资源。
PB串口通信(MSCOM)是使用PowerBuilder 8.0(PB8.0)进行串行通信的一种技术。在编程领域,串口通信是一种基本的设备交互方式,尤其在工业自动化、数据采集系统和嵌入式设备中广泛应用。本文将深入探讨PB8.0中的...
在**PB串口助手**中,用户可以执行以下功能: 1. **配置串口参数**:包括选择串口号(COM1-COMn),设置波特率(如9600、19200、38400等),数据位(5、6、7、8位),停止位(1或2位),校验位(无、奇、偶、标记、...
这是一个关于PB编程的串口通讯程序,可以接受RS232的数据
标题中的"PB串口"指的是PowerBuilder(PB)这一编程环境下的串口操作,而"pb串口收数小例子"则是关于如何使用PowerBuilder来实现串口数据接收的一个示例项目。 PowerBuilder是一款强大的快速应用开发(RAD)工具,...
通过深入研究这个模块,开发者不仅可以掌握PB中的串口编程,还能了解如何处理串口通信中的常见问题,如数据同步、错误检测和恢复机制等。这将极大地提高开发效率,特别是对于需要与硬件设备交互的应用程序来说,如...