回 帖 发 新 帖 刷新版面

主题:求教: VFP 控制 COM 外围电路的方案

或许汇编更合适,但如果外围电路成本不差钱的情况下,用VFP...探讨一下。

我想用VFP控制外围电路的16个开关,可行吗?(如果要求每个开关都有一次动作,总时间能控制在4秒内吗)

回复列表 (共19个回复)

11 楼

[quote]楼主:

Mscomm.ocx 在VFP60是自带的是在安装目录\PVFP60\OS\SYSTEM\下面(的客户现在都一直在用,都很正常。。。。)

VFP90没调成因时间关系我就没再搞,一直在用VFP60。[/quote]

你的意思是V6可以用这个控件, 用 V9会不正常?

12 楼

Vfp9.0中的mscomm.ocx可以用,我就是在Vfp9.0下实现的串口与单片机通信的。只是串口发送出去的是Ascii码,接收的也是。在Vfp下编程发送前,要用适当的函数把字符转换为Ascii码,且0——255范围内的Ascii可以发送和接收。不像“老狐狸”说的那样只能接收打印码。

13 楼

到底 mscomm.ocx 与 mscomm32.ocx 是不是同一个东西? 6 和 9 用都没有问题?

14 楼

mscomm.ocx 与 mscomm32.ocx 是同一个东西。但是,我只在Vfp9.0中用过,其它没有试验,不能妄加评论。

15 楼

Many thanks

9没问题就好,我用6的试。

16 楼

[quote]Vfp9.0中的mscomm.ocx可以用,我就是在Vfp9.0下实现的串口与单片机通信的。只是串口发送出去的是Ascii码,接收的也是。在Vfp下编程发送前,要用适当的函数把字符转换为Ascii码,且0——255范围内的Ascii可以发送和接收。不像“老狐狸”说的那样只能接收打印码。

[/quote]


我试过超出127时发送会产生变异,如发送167,接收到的码变成了134之类的,而接收就没试过收到错的

17 楼


我试过超出127时发送会产生变异,如发送167,接收到的码变成了134之类的,而接收就没试过收到错的[/quote]

18 楼


19 楼

Vfp9的Mscomm.ocx控件传递数据时需要使用二进制字符型数据。在 Visual FoxPro 中,二进制数据可以包含在字符串中。但 ActiveX 控件和 OLE 对象中的字符串 (OLE VT_BSTR 数据类型) 不能包含二进制数据。ActiveX 控件和 OLE 对象通过 VT_UI1 类型数组与 Visual FoxPro 传递二进制形式的数据。

ActiveX 控件和 OLE 对象通过 VT_UI1 类型的数组将二进制数据传递给 Visual FoxPro后。Visual FoxPro 自动将它转换为 Visual FoxPro 字符串的形式,但 Visual FoxPro 内部会把由 ActiveX 控件和 OLE 对象传递来的字符串标记为二进制字符串。当需要把数据传回 ActiveX 控件和 OLE 对象时,Visual FoxPro 再自动将它们转换为 VT_UI1 类型的数组。

如果您需要把一个 Visaul FoxPro 字符串传递给 ActiveX 控件和 OLE 对象,您必须首先使用 CRETEBINARY()函数将它转换为二进制字符串形式。


Vfp9的Mscomm.ocx控件,对Ascii码0——255的发送与接收的方法:

发送端:如发送Ascii码为167的字符,
......................
Thisform.olecontrol1.Output=Createbinary(CHR(167))
......................

接收端:
......................
cString=transform(This.Input)
?cString    && 显示167的十六进制字符“A7”
......................

我来回复

您尚未登录,请登录后再回复。点此登录或注册