使用C#编程语言编写PLC上位机软件(源码在文章最后)
本程序使用WPF做界面,C#做逻辑,为了界面美观使用了老外的一个开源皮肤框架,逻辑代码为了和S7-1200通讯使用了行内一位大神的库。
借鉴大神的框架在文章后面会提到(这里也是为了尊重原创作者的劳动成果)。
下面来看看界面,再一一介绍下程序框架:
主界面(使用一个win窗口来作为显示,界面左侧有弹出菜单,界面内容通过菜单按钮调用Page来实现界面内容转换)
控制界面使用了按钮和滑动条,按钮模拟了HMI的工作模式,弹起和按下事件分别置位复位PLC变量,滑块是自己做的一个Style,WPF这点还是很方便的。
参数输入界面模拟了 HMI的 IO域,编辑时不刷新变量,输入完成后写入变量,再更新变量里的内容;右边配方功能也是模拟的西门子HMI里配方功能,保存参数到序列化文件,读取的时候反序列化写入PLC变量
曲线记录界面使用了DynamicDataDisplay 开源控件来做为曲线显示,此控件比较强大。在曲线显示的同时后台还要记录数据,在此使用了list来缓存数据并保存到序列化文件,在记录完成后反序列化一次性写入access数据库。
数据查询界面利用日历控件来作为搜索access数据的条件,筛选出零件编号,再把零件编号的对应数据以曲线方式呈现出来,同时也可以以表格方式呈现
故障报警界面使用listbox控件做为显示,利用的消息队列来排序故障信息
更改皮肤颜色界面是这个UI框架附带的功能,效果蛮好。
下面来介绍下程序
界面初始化时连接PLC
PLC连接方法
建立一个实体类,作为需要读取的PLC变量,一次性读取多个变量数据。
曲线刷新使用了多线程,关于数据全部在后台线程里进行,不影响界面运行
曲线数据更新到list使用了linq语法来筛选出需要的数据进行读和写
序列化数据内容,写入到access,当时试过一遍读取数据一遍写入数据库,发现耗时很长,后来想到序列化,缓存再一次性写入,速度提高很多。
目前就介绍到这里,有需要做类似项目的同行可以在下面评论联系,相互学习。
QQ:8300877 QQ群:923525781
本程序源码github地址
如果喜欢可以star或是fork。
这里介绍一下PLC通讯库
HslCommunication组件库;
NuGet地址:
/packages/HslCommunication/
Material DesignXamlToolKit 皮肤框架源码
github地址
/MaterialDesignInXAML/MaterialDesignInXamlToolkit