工业级开发中的一些常识

这是一个朋友问我的问题,说实话,我没看清他想问什么,不过看来他对工业现场开发的一系列开发知识,术语,习惯不是很了解,干脆,我讲讲好了。
原文如下:
肖老师您好,今天面试接到这样一个问题,采集设备的数字信号或模拟信号,并且处理之后放到数据库;主要是温度,和空气质量的数据
  老师能否给点意见,最好是Java;是否是有某些硬件会接收那个设备的数字信号,然后我们就可以调用那个接收信号设备的接口得到数据;
还说要知道什么传输协议呢?
我的回答:
这个实际上应该算数字电路和模拟电路这两本书的知识了。
不过呢,我做过一点工业控制软件,了解一点,我讲讲我的看法哈,讲得不好,叫做我学艺不精,回去学习再来过哈,呵呵。
在工业现场,有各种设备,如一个开关的状态,嗯,门是开着的还是关着的,还有温度啊,压力啊,转速啊什么的,是求值的。大家看着很乱,很多设备的,有的大型设备,一台就有几千个量,都要采集,大家说乱不乱?
呵呵,其实不乱的,一点都不乱,因为前人早就把工业现场能看得见的参量,归大类,总结为两类输出:
1、开关量:就是前面说的开关状态,注意哦,有很多开关不止两种状态的,但大面上看,都在这几种状态中变来变去,这种变量就叫开关量。嗯,有笔记本的朋友,你们打开合上屏幕,屏幕会变黑,这就是一个开关在起作用,这也是开关量采集。没有笔记本的,嗯,台式机的肚几眼,就是电源开关啦,那个也是开关量,嗯Reset也是,这些都是双状态开关量。多状态例子也有啊,家里有老实电风扇的没有,那几个按钮,1、2、3档风速,多状态,明白了吧。
2、模拟量:就是前面采集的温度、压力啊,转速什么的。这种参量的采集,有个鼎鼎有名的称谓,A/D转换,大家听说过没有,就是把外部模糊的电压、电流,转换为具体的整形数。当然,还有D/A转换,就是把整形数再转换回去,获得控制电流和电压什么的。
不过,这些都是硬件工程师的事情,我们软件工程师呢,其实获得数据一般都是在某个硬件设备的端口读数字了,前面的转换细节,无需我们关心的。这个读口,可以是PC机的IO地址段(去看看汇编语言),其实arm等嵌入式设备也有类似的设计,开发说明书都有读口和打口的方法,硬件工程师只要把线接上,我们就能读出状态变化。
当然,如果对端设备够智能,比如人家内嵌单片机,也可以是从串口读,甚至从网卡读,都可以的。嗯,多说一点哈,网卡其实也是一个开关量设备,最底层的驱动,其实是把网卡从网络上接收到的电平,翻译成数字0,1,经过协议层层转换,才是我们看到的协议报文什么的。
开关量相对简单,比如我们预设低电平是0,那么,当外部总线是+5V或者-5V(取决与硬件工程师设计啊),那么,我们读到的就是1,如果是0V,就是0,就这么简单,当然,如果系统是12V工作,12V来做1也可以啦。
我当年被人弄过一次,有个硬件工程师把线接错了,两根线接到同一根电源5V端子上,而且都带着负载,这下完蛋了,由于这根端子带不起两个并联负载,电压被拉低,除2,只有2.5V。可怜我的程序,一晚上都在0~1之间跳变,屏幕上一个红灯老是闪个不停。
我熬了一个通宵都找不到问题,最后,第二天人家上班,另外一个硬件工程师过来,5秒钟就找到问题了。这个通宵算白熬了。我倒!这叫硬件不出手,软件急的像条狗,呵呵,想起来都郁闷。
模拟量就复杂多了,因为这里面有个很重要的问题,就是采样精度。记得我当年用的比较多的是8235这块片子,它精度是12bits的,就是可以把一个电压量程,细分4096个段,应该是0~FFF,也就是说,不管外面怎么连接,我们读到的数字,是0~4095这个区间的。
这当然是unsigned int了,至于这个数字代表温度多少度,还是压力多少帕,根据前级采样的设备量程自己换算去。硬件也有不行的时候,呵呵,它没办法传单位过来,这要我们软件来转换的。
比如说,我以前买了一个红外线温度探头,它量程是-20~1000度,6000多块呢,它可以输出电流,也可以输出电压,由于电压只有3.8V,而电流可以是0~12A,显然电流精度大得多,我们当时用的就是电流输入来测的。
我这里读到的0~FFF,对应过去就是0~12A,再对应到现场温度,就是-20~1000这么1020个温度。至于比例换算,自己算去。呵呵,大家觉得乱不乱?
应该说,12bits,在工业应用上,精度已经很高了,因为工业现场没那么高的精度,不过,也有更高精度的采样芯片,那个价格哦,涨的就嗖嗖的了。
一般要是16bits精度的,应该就是军用级了。像导弹制导上面的,我估计精度更高。呵呵。
有个例子,像现在高端的数码相机,一般就采用14bits的采样精度,就牛叉得很了,像宾得的K10D,主要卖点就是14bits采样,人家称为中端典范,旗舰产品,牛吧。呵呵。
好了,啰嗦了这么多,其实就是一点工控简单入门的知识啦,也没什么的。
当数据都采集回来了,怎么丢数据库,就不说了吧。一般的关系型数据库都可以,比如说MySQL,SQLServer什么的。
但是,也不能一概而论,工业设备采样有频率要求,一般说来,越精细的设备,频率要求越高。对于太高频的设备,关系型数据库的速度就跟不上了,不能用。
这其实就是我现在正在研究的话题,RTDB,工业级实时数据库。这是另外一大类数据库,特点是功能比较弱,不支持什么SQL访问,但是就是速度快。我们一个基本需求都是20000点/秒的入库速度,还要并发50路查询请求,每个请求还要做插值计算什么的,但是,响应时间不允许超过200ms。Oracel来都都得挂,呵呵。
那怎么办?玩Hash,B+树什么的呗。
Java肯定玩不转,C++都够呛,很多得用纯C,还得在底层自己实现优化。我这段时间光算Olog(2)n,算了几百次,计算书写了几十页,都在算这个效率。
至于协议就简单了,任何时候,通讯双方要传数据,就得遵守一定规约,这个规约就是协议,就是你先说话还是我先说话,咱们怎么同步动作,然后,你先传什么,再传什么,我再来接收,要不要回复你收到没有,什么的,其实很简单。
协议可以自己写,不过,对外的接口,建议尽量靠标准协议,以后好跟别的设备互连啊。说白了,你采集了数据总不能自己拽手里,得拿给大家用不是。嗯,注意哦,一旦数据到了你手里,你就叫采集设备了,上层还可能有其他设备向你要数据的,最后形成一张大网,工业现场的数据管控,运维分析,灾难重演和预防,运营决策分析,就全都展开了。
大家看完晕不晕,呵呵。
嗯,建议大家有兴趣的话,好好学,这个行业是可以轻易产生出百万富翁的。
ok,大家慢慢看哈,有问题再问。
肖舸
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值