主题:有关Visual FoxPro 9.0访问com串口通讯的问题
yyg_205
[专家分:0] 发布于 2007-04-16 14:04:00
请问能用VisualFoxPro 9.0 访问com串口通讯端口吗???
它本身有这样的函数吗?????
回复列表 (共6个回复)
沙发
cbl518 [专家分:57140] 发布于 2007-04-16 18:12:00
用vfp9中的,低级函数就行了。
板凳
dhh_lr [专家分:40] 发布于 2007-05-01 22:14:00
在Foxpro for DOS下要通过串口发送数据,首先需要设置串口的波特率,然后才可以发送数据。
程序如下:
Run MODE COM1 9600,N,8,1 &&设置串口波特率
COM=FOPEN(‘COM1’,2) &&初始化串口COM1
Str=”FoxPro Printer on COM1”+CHR(13) &&设定X内容为送数据
DATA=FPUTS(COM,Str) &&向串口送出X的内容
DATA=FCLOSE(COM)
这个程序向串口发送数据” FoxPro Printer on COM1”。
dos下我是这样的,win下没试过
3 楼
yyg_205 [专家分:0] 发布于 2007-09-16 15:15:00
谢谢大家关心,我已在微软官方网站找到了一个相关代码,已经圆满解决问题。
为感谢大家的帮助,特将源码奉上,希望对大家有帮助:
原文如下:
如何传输和接收二进制数据通过 VFP MSComm32 控件
概要
本文阐释一些技术用于接收和通过 RS-232 电缆传输二进制数据 (无需调制解调器) 使用 Visual FoxPro 3.0 Communications (MSComm) 控件。
更多信息
通过串行端口其中只包含字符到传输缓冲区字符串是允许通过传输和接收的数据通讯控件, MSCOMM32.OCX, 提供了串行通讯为应用程序。 此功能限制您来传输只基于文本文件 -。
本文说明如何使用 MSComm 控件来传输和接收二进制数据使用 RS-232 电缆。 本文中技巧 (将还可以与调制解调器。 二进制数据必须转换一个字节次到字符并且再传输。 数据接收, 时必须从字符转换回二进制数据一个字节一次。
DBCS - 启用 (运行操作系统软件使用之一双字节字符集), 操作系统上如果二进制值之一匹配 DBCS 领导字符将损坏二进制数据。 MSComm 控件将解释该字节和以下字节作为一个双字节字符并返回仅一个字节的等效 ASCII 字符。 要解决此问题, 您需要一个字节转换为 ASCII 大小领导字符保留三个字符。
示例代码
以下代码阐释此过程。
警告 OF 参加 SAMPLE CODE PROVIDED IN 本文 IS AT YOUR OWN RISK USE。 Microsoft 提供此示例代码 " 按原样 " 担保的任何类型, 任何明示或暗示, 包括但不限于适销性和/或用于特定目的适用性的暗示保证。
/*
源码详见下文
*/
事件驱动技术生成的 OnComm 事件有字符输入缓冲区中等待时。 还, CommEvent 属性将包含数值 2。 必须为非零值设置为 OnComm 事件来触发, Rthreshold 属性 (其默认)。 最常见设置用于 RThreshold 属性是表示该事件触发如果正在输入缓冲区中等待一个字符少于 OnComm 1,。 由于一次 3 字符都被发送本文, 3 被用作 RThreshold 属性的值。
4 楼
yyg_205 [专家分:0] 发布于 2007-09-16 15:17:00
源码如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* Transmitter Code.
* 发送代码
* INIT event of Comm OLE control
* Comm OLE 控件的 INIT 事件
* 28800 baud, no parity, 8 data, and 1 stop bit.
* 波特率 28800,无奇偶校验,数据位 8,停止位 1
* In RS-232, maximum speed of 28800 baud can be used
* 在 RS-232 中能够使用的最大波特率为28800
This.Settings = "28800,N,8,1"
This.InputLen = 1
This.CommPort = 1
This.PortOpen = .T.
* ONCOMM event of Comm OLE Control
* Comm OLE 控件的ONCOMM 事件
* The following code is needed to make sure that next set of characters
* 下面代码需要确定下次发送的字符串
* can be transmitted (CommEvent = 2 is triggered from the receiver side)
* 能够被发送(CommEvent=2 是触发接收方的信号)
IF This.CommEvent = 2
This.input
IF gnTop <= gnEnd
gcString = FREAD(gnFileHandle, 1) && Store to memory
q=asc(gcstring)
* change ASCII to character (size of 3) to preserve the lead char
thisform.olecontrol1.output = str(q,3)
gnTop = gnTop + 1
ENDIF
ENDIF
* INIT event of form
* 表单的 INIT 事件
PUBLIC gnFileHandle
PUBLIC gnEnd
PUBLIC gnTop
PUBLIC q
* You should replace 'c:\sample.hlp' with your own binary file
STORE FOPEN('c:\sample.hlp') TO gnFileHandle && Open the file
STORE FSEEK(gnFileHandle, 0, 2) TO gnEnd && Move pointer to EOF
STORE FSEEK(gnFileHandle, 0) TO gnTop && Move pointer to BOF
gntop=1
q=""
-----------------------
Property of OleControl1
OleControl1 的 属性
RThreshold = 1
* triggers when at least one char is on the buffer
* 当缓冲区中有一个字节时触发
SThreshold = 3
-----------------------
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* Receiver Code.
* 接收代码
* INIT event of OleControl1
* OleControl1 的 INIT 事件
* 28800 baud, no parity, 8 data, and 1 stop bit.
* 波特率 28800,无奇偶校验,数据位 8,停止位 1
This.Settings = "28800,N,8,1"
This.InputLen = 3
This.CommPort = 1
This.PortOpen = .T.
* OnComm event
* OnComm 事件
IF This.CommEvent = 2 AND This.InBufferCount > 0
qq=CHR(VAL(This.Input))
=FWRITE(gnFileHandle,qq)
this.output = CHR(26)
ENDIF
* INIT event of form
* 表单的 INIT 事件
PUBLIC gnFileHandle
* You should replace 'c:\sample.hlp' with your own file name
IF FILE('c:\sample.hlp') && Does file exist?
gnErrFile = FOPEN('c:\sample.hlp',12) && If so, open read-write
ELSE
gnErrFile = FCREATE('c:\sample.hlp') && If not, create it
ENDIF
= FCLOSE(gnErrFile) && Close the file
STORE FOPEN('c:\sample.hlp',1) TO gnFileHandle && Open the file
* CLICK event of button
* 按钮的 CLICK 事件
*This tells the transmitting side to start sending the file
Thisform.Olecontrol1.output = CHR(26)
-----------------------
Property of OleControl1
OleControl1 的属性
RThreshold = 3
-----------------------
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
源代码结束
以上代码并非完整的 “.prg” 代码。需要自己创建表单并添加相应时间代码(上面代码以给出)。
5 楼
bigyoung [专家分:0] 发布于 2009-05-29 14:46:00
http://support.microsoft.com/kb/154741/zh-cn
6 楼
zfh630528 [专家分:130] 发布于 2009-05-30 08:26:00
参考本人的贴子:
http://bbs.pfan.cn/post-300836.html
我来回复