我正在寻找一种在 Windows 上与 RS232 串行 COM 端口进行通信的方法。我在网上找到了2个解决方案, 这不是完全免费的(故意延迟该功能)并且 其他 Windows 上的功能有限。后者只能写入 Windows 上的 COM 端口,而不能读取。

我无法查看第一个解决方案的代码,因为它被编译成 .dll (这是有道理的,否则人们可以只编辑延迟而不购买它......)而第二个解决方案似乎只使用 fopen()打开端口,然后使用 fwrite() 对其进行写入,就像对流所做的那样。但显然害怕它没有任何回报。

我知道这是可能的,因为第一个解决方案就是这样做的,尽管它确实需要 Apache 使用 php-cgi 模块而不是 php5module。

有任何想法吗?

有帮助吗?

解决方案

上述每个解决方案要么效率低下,要么工作量太大。

你可以只使用 PHP-DIO 库 (dio_fcntl,dio_open,dio_read,dio_write,dio_seek,...)。它也在 PHP 手册中 DIO 的条目:

默认情况下,此 PECL 包不可用。如果您拥有高于 5.2.6 的 PHP 5.2.x,要获取 Windows 版本,您可以将其作为 ZIP 的一部分下载:

这两个链接都可以在以下位置找到 http://www.deveblog.com/index.php/download-pecl-extensions-for-windows/

这是 Linux 上的构建, ,只需获取它并执行 phpize/configure/make/make install 即可。

我不知道它是否应该在 Apache 会话中使用,但是就用吧。

其他提示

解决这个问题的最简单方法是用另一种语言(如C ++)编写程序,然后使用 system()从php脚本执行它。在C ++中进行Comm I / O是微不足道的。

这假设您有足够的访问权限来配置它以允许可执行文件由php等运行。

另一种可能的方法是使用Win32 API,例如 w32api_register_function() ffi 然后使用串行通信调用,以使其在Windows下运行。

我遇到了同样的问题,当我遇到这个受Arduino开发人员欢迎的解决方案时,我已经考虑编写自己的php扩展了 - 'serproxy'(在很多地方找到它,即。 http://www.lspace.nildram.co.uk/freeware.html )设置tcp堆栈到/从串口并允许我使用php套接字函数与它通信。

您需要使用类似DOS的命令设置com端口。

例如,以下行通过php执行命令:

$output = `mode COM1: BAUD=115200 PARITY=N data=8 stop=1 XON=off TO=on`;

要显示您可以使用的结果:

echo "$output"; 

创建资源ID:

$fp = fopen('COM1', 'r+');

if (!$fp)
{
      echo "Port not accessible";
}
else
{
     echo "Port COM1 opened successfully";
}

写入端口:

$writtenBytes = fputs($fp, "Hello");

echo"Bytes written to port: $writtenBytes";

从端口读取:

$buffer = fgets($fp);

echo "Read from buffer: $buffer";

也许有人可以帮我解决 fgets 问题。如果 TO = on ,它会在那里堆叠一分钟,如果 TO = off ,它会永远堆叠在那里。它似乎是一个“ MODE COM ”选项也许DOS专家可以提供帮助。

也许应该使用 fgetc 代替 fgets ,因为 fgets 会捕获到 newline ,而 fgetc 捕获单个字符。如果没有遇到新行,它可能会阻塞直到有一行或直到刷新缓冲区。一分钟的延迟可能是窗口在一段时间内刷新缓冲区。

另一种选择是在Windows上通过ActiveX使用对象。 Windows上的COM有几个主要是商业串行对象。您还可以公开基于.Net的对象并将其注册以供COM使用。当然,这确实假设您可以控制服务器注册COM控件,因为您需要一个串行接口。

如果要通过Web使用,则另一个问题是资源争用。例如,如果这是针对串行打印机的,则打印队列管理器将是您直接通信的最佳选择。

如果你想使用com端口来处理短信,那么这里最着名的是RémySanchez的php串口通信课程谷歌示例代码这是一个包含该主题的主题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top