V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nbhec2
V2EX  ›  PHP

OHSCE 入门教程(三)-PHP 串口通信、构建高可靠性的总线应用

  •  
  •   nbhec2 · 2016-12-21 11:05:40 +08:00 · 2008 次点击
    这是一个创建于 2896 天前的主题,其中的信息可能已经有所发展或是发生改变。

    转发,这是个用 PHP 做控制、物联网、智能化的东西(串口通信、串行总线通讯、 SOCKET 通信、 WINDOWS 进程守护)

    (写于 OHSCE_V0.1.25 )

    终于等到这篇文章了吧,其实之所以先写了 TCP/UDP 的是因为在现在的环境下它俩是相辅相成的,其实在控制领域我们所说的 TCP/UDP 和串口总线应用非常接近,和普通的互联网网络应用还是有着很大区别的,毕竟绝大部分网络控制产品都是从总线控制产品升级而来或沿袭了可靠的设计而产出的,本质上基本是一样的(这也就是为什么在使用 OHSCE 完成您的需求能够让您“稀里糊涂”的顺利躲过了很多使用其它办法时的坑)。控制领域是个很宽的领域,它包含了或有交集于时下热门的物联网万物互联、工业 4.0 智能制造、行业智能化、人工智能、各种与控制相关的云等云云种种。

    有人表达说"控制的世界没有异步",这句话说来也对也错,一个继电器或是开或是闭同一时间只有一种状态,每一步逻辑都是缜密的,工艺越复杂系统越庞大对可靠性的要求越高。随着系统集成的需求越来越深,互联网+的概念侵入和发展,事情被诠释的越来越多元化。不过话又说回来,对高可靠性的要求是永远一成不变的,毕竟是控制。虽然现在一些诸如采集手环,随身血压采集等物联网应用因业务场景简单所以一些不可靠的问题暂时不会酿成事故,但随着业务复杂度的提升和系统集成度的提高开发者很快就会意识到这个道理。

    一、 OHSCE 中的封装函数。
    
    主要分为封装函数和基础函数,绝大多数的需求使用封装函数即可完成,但是 OHSCE 也提供给您了操作更接近底层的基础函数库。
    
    Ohsce_eng_serial_X 是您在构建串口总线应用时主要应用的封装函数。
    

    绝大多数情况,任何串口设备或总线网络在上位机 /网关的角度上看,通信的门就是那几个电气接口首先你先要高清你使用的是哪个串口,我们演示使用 COM7 (由 USB 转发 485 )。

    (*设备上常见直接有的接口:RS232<俗称 9 针>、 RS485 、 RS422 、 USB<通用串行总线基本是机器都有>、 TTL (常见于单片机)等等等等等....)

    想使用 OHSCE 中的所有函数很简单,只需要引入 OHSCE 的加载文件即可。
    
    函数参考 Ohsce_eng_serial_creat(&$OHSCESerial,$com,$flags="1",$mode=0,$baud=9600,$parity='n',$data=8,$stop=1,$fc='none',$xon='off',$to='off',$octs='off',$odsr='off',$idsr='off',$dtr='on',$rts='on',$space=0) 当您创建完成这个资源的时候其实默认载入了 3ms 的发送延迟,这是一个全局值,在创建时被写入资源。若要改变这个间隔除了改变 space 参数外(注意为 0 时失效),需要使用 Ohsce_eng_serial_setspace 函数( 0 值有效)。但是不建议您消除这个间隔,近乎任何情况下它的存在只会有益无害。 三、打开一个串口资源并占用这个接口 非常简单的一行,就可以让您的进程打开一个资源并占用所指定的串口。 Ohsce_eng_serial_open (内置函数) Ohsce_eng_serial_open($hscecom); 值得注意的是,一般情况下一个串口同一时间只能被一个资源所占用,当您需要在两个进程之间交替时需要先使用 close 释放。(_M_X 系版本提供的多进程共同占用一个串口实际上是提供了一个缓冲进程做到,本质上还是一个由一个进程占用。) 四、写与读的操作 大部分总线设备均是上位机轮询的模式,虽然也有一些设备是主动上报但是我们认为轮询的模式设计更为合理故我们演示的也是先写后读。 此时我们演示一次在 RS485 总线上使用 MODBUS-RTU 协议读取设备保持寄存器的操作。 Ohsce_eng_serial_write($hscecom,"01030001000415c9",true); 向串口设备发送数据,后面的 true 表示是以 16 进制发送。(这个以 16 禁止发送的意思是您发送的数据输入的是 16 进制格式的"01030001000415c9"而不是"100000011000000000000000100000000000001000001010111010000"的意思。) 读取设备的返回。 usleep(3000); Ohsce_eng_serial_read($hscecom,$data,null,true); 读取串口数据 返回数据长度为未知 以 16 进制返回。其中$data 变量中存的就是返回的数据。 五、记得关闭您的串口资源。 Ohsce_eng_serial_close($hscecom); 关闭一个资源并不会将这个资源清空删除,只是释放了此串口的控制权方便另一个进程继续调用使用此串口。当然如果您需要让您的这个进程保持占有此接口的话就不要调用这个函数啦。 六、花絮函数 Ohsce_eng_serial_comwr -进行一次连续的写读操作 Ohsce_eng_serial_npcomwr-使用额外的全新的进程进行一次连续的写读操作(基础环境必须运行中)。操作结束后额外的进程会立即结束。 ( OHSCE 的 PRO 扩展也会带来一些函数如 ohsce_ext_modbus_x ohsce_ext_profibus_x 等等,我们会在扩展的说明书详细阐述。) 七、打磨您的工艺细化您的控制流程,并保持更新您的 OHSCE 框架至最新的稳定版本。 OHSCE 愿每一名控制工程师都可以搭上互联网+的翅膀,每一名 PHPWEB 工程师都可以冲在物联网的前言,我们的程序是您可靠的基石。 官方网站:http://www.ohsce.org & http://www.ohsce.com 开发者 QQ 群: 374756165 GITHUB:https://github.com/OpenIBC/Ohsce 手册地址:http://www.ohsce.com/index.php/book/
    1 条回复    2016-12-21 11:11:57 +08:00
    kancloud
        1
    kancloud  
       2016-12-21 11:11:57 +08:00
    v 站写教程可读性差了点 推荐写到看云吧 ^_^
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:09 · PVG 04:09 · LAX 12:09 · JFK 15:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.