【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
工业自动化领域其实是非常大的一个市场。只要有工业生产,有工厂,那自然就离不开非标,离不开自动控制。传统的自动控制一般就是基础的电工电气、plc编程、电气图设计、电机伺服和步进电机驱动、组态屏、c# wpf或者c# form上位机开发、机器视觉这些内容。可以明显感觉到,这里面easyx&lua可以做的很多,特别是那些不涉及功能安全的领域,easyx有很大的市场。

1、传统的plc价格高
一般的plc都是依据点数和功能收钱。比如多少gpio,有没有232、485,有几个,支不支持can,支不支持网络,这些都是决定价格的重要原因。
2、组态屏
所谓的组态屏,就是上位机把基本的图形架构写好,烧入到tf卡。这样组态屏启动后,可以直接加载。中间需要做的,就是把前期ad、da、232、485、gpio读取到的数据渲染到屏幕上。当然中间也有可能会涉及到人机交互的一部分工作,主要是串口协议、485协议为主。
3、上位机开发
工控的上位机开发还是以c# wpf为主,用qt的并不多。毕竟qt以c++为主,对于开发人员要求较高,并不一定能满足项目开发的需求。所以,早期的时候,大部分上位机都是c# form开发为主,后期wpf出来之后,大家发现用wpf开发更容易,界面设计也更美观,所以就出现了很多c# wpf为主的开发方案。
4、重点的plc开发
**plc是承上启下的重要环节。**对下,它涉及到电子电气,比如开关按钮、比如继电器,还比如变频器、电机控制,部分plc还需要通过232、485控制组态屏。而对上的话,很多时候plc需要通过网络和上位机进行通信,也就是刚才说的c# wpf开发,所以plc本身还是非常关键的。早期的时候,plc不涉及算法,用梯形图还是比较容易做的,用套路就可以解决问题。只不过,现在随着产线要求越来越高,一部分plc也需要写一点算法和判断逻辑,用st语言开发,帮助上位机分担一点工作,尤其是电机控制的工作。如果希望用plc做一点复杂的事情,势必会涉及到电机、变频器、pwm方波、232/485交互、can通信、网络交互这些内容。
5、新兴的机器视觉和AI
机器视觉其实出现很早,在工业上用的也比较多。只是现在国内供应商慢慢崛起,此外ai模型也开始普及,所以很多的机器视觉设备、软件、上位机也开始慢慢出现在产线上面,帮助解决一些实际问题。这些虽然也是属于纯软的一环,但是本身也需要和其他非标设备一起联动的,比如agv、rgv、机器人手臂,或者电机控制等等,并不是单独存在的。
6、web前后端展示
运行过程中的数据处理、分析、展示,都是可以通过web前后端的技术来完成的。比如前端用layui、vue,后端用自己熟悉的语言和框架,例如python、c#、java、golang、perl,这些都是可以的。
7、我们能做什么
**不管是plc也好,还是c# wpf也罢,甚至是机器视觉,这里面easyx、lua、c++能做的都非常多。**因为本身plc、c# wpf、机器视觉从功能上面来说,很多都是满足的。但是从细分市场和成本考虑,很多的设备又是不满足的,所以这里面总是会有需求,有降成本的压力。哪怕是机器视觉,也会有个性化需求、或者是长尾市场、小众市场,这里面其实都是机会。
8、用easyx & lua模拟一个彩色球
很多的非标场合,其实未必需要plc,用普通的arm mcu做成板子,借助于脚本语言开发,其实一样可以满足要求,而且成本及其有优势的。比如,我们看一下,一个彩色球,如果是脚本语言开发,应该怎么做,
-- file: demo.lua
-- author: feixiaoxing
-- email: feixiaoxing@163.com
-- date: 2025-10-23
initgraph(640,480)
local angle = 0
local red = 0x0000aa
local blue = 0xaa0000
local green = 0x00aa00
local gray = 0xaaaaaa
local option = 1
local state = 0
BeginBatchDraw()
while true do
cleardevice()
if _kbhit() == 1 then -- check input box
if state == 0 then
state = 1
end
end
if state == 1 then
if option == 1 then
setfillcolor(red)
fillcircle(250, 200, 100)
outtextxy(500, 100, 0x31) -- 1
option = 2
elseif option == 2 then
setfillcolor(blue)
fillcircle(250, 200, 100)
outtextxy(500, 200, 0x32) -- 2
option = 3
elseif option == 3 then
setfillcolor(green)
fillcircle(250, 200, 100)
outtextxy(500, 300, 0x33) -- 3
option = 4
else
setfillcolor(gray)
fillcircle(250, 200, 100)
outtextxy(500, 400, 0x34) -- 4
option = 1
end
else
setfillcolor(red)
fillcircle(250, 200, 100)
outtextxy(500, 100, 0x31) -- fixed image
end
FlushBatchDraw()
sleep(1000)
end
EndBatachDraw()
closegraph()
注:
如果是没有屏幕的场合,一般就需要lighttpd+fastcgi来处理了。这个时候就可以写一个fastcgi程序来处理对应的配置。前端的话,选择一个类似于layui这样的程序即可。lighttpd擅长处理静态文件。后端的动态需求,最终还是fastcgi处理,毕竟每一个fastcgi都是一个小程序。