C语言能干啥?
这个题目有点大,写这篇感想的原因是常常看到论坛里面有人对C语言能干啥产生疑惑,对自己能在C语言上走多远感觉困惑。所以我想就我这些年的开发经验,就C语言能干啥说点自己的想法。C语言与其它语言一样,都是工具,只有结合实际的问题才能产生魅力,而C语言自身的特点决定了它可以偏向底层,出色地完成实时数据处理与控制的任务。我从2002年开始接触控制系统课程,同时接触了单片机,那个时候还是用汇编在51上写代码。当时单片机上的代码纯粹是为了演示的,比如IO口点灯,AD和DA转换以及数码管显示等,而控制理论上就是一堆传递函数分析,bode图,根轨迹图等,感觉两者完全不相关。后来到了2005年,我开始用单片机开发直流电器的控制器,这个时候用上了C语言,并且实现了根据不同的PWM占空比来获得不同的电机转速,这个时候,才让我感觉C语言原来可以和控制系统开发结合在一起。虽然还是开环控制,但是总算把两者联系到了一起。
再往后,我参与了计算机数据采集与控制的项目,就是在计算机PCI插槽上扩展一块IO板卡来实现对外设控制,当然现在PC机上很少见到PCI插槽了,但是工控机上还是有不少的PCI和ISA。PC机上都被USB占领了,并且随着USB技术本身的发展,数据吞吐量不断加大,也完全可以取代原来的PCI板卡。这个时候,我发现原来在计算机上增加IO板卡后,然后用VC写个界面,就可以做个闭环控制系统了,基本要素就是采集被控对象的位移信号,跟设定位置作差,然后推动执行机构运动。这时,感觉c语言体现在控制系统开发的各个方面了。
可以说,用c开发一整套控制系统,需要个人长期的能力积累,除了语言本身外,还要掌握底层硬件、控制理论等,可能基于此,一些公司将c写的控制系统软件封装,推出了控制系统快速开发的软件,比如MATLAB/xpc,Labview等,这些图形化编程可以简单拖几个框图,不用写任何c代码就完成了一个闭环控制系统的快速开发,真的比较有吸引力。但这些环境的成本都不低,并不适合任何控制系统的开发,而且实际的控制系统往往是复杂的,复杂体现在对各种突发状况的处理,同时代码本身应该有很强的扩展性,用别人封装好的模块,难以达到很好的扩展效果。并且由于是定制好的图形,里面的算法与数据细节很多是隐藏的,不利于开发者提高自身能力。
庆幸的是,在现在的工作岗位上,整个控制算法完全是用c和汇编搭建起来的,这时,发现控制理论完全用c在实际的控制系统中体现,也终于理解了控制理论上的各种Z变换怎么变成差分方程,然后得到离散信号序列之间的关系,从而进一步变成代码的过程。
我建了一个群,如果论坛有人对c开发控制系统有疑问,或有技术上的问题想找人探讨,欢迎在群里发言,群号是299042155,如果我知道的,会不吝和大家分享,共同进步。