当前位置:编程学习 > C#/ASP.NET >>

关于利用C#编写窗口程序读取西门子PLC实时数据的问题。

最近公司老总不知道怎么想的,要我们自己折腾无线传感,还利用PLC。现在老板的要求就是10个传感器读取到温度,湿度,电量等多个数据(每个数据都有自己的地址位)然后传到一个集中器上,再通过串口把数据传到PLC,重点来了,要通过网线利用modbus RTU协议读取PLC上的数据,是实时数据,然后在显示到窗口的同时,再存入数据库(SQL2008)中。
折腾了大半天,终于顺利的用PLC收到无线传感器传来的数据了,用一个组态王试了下,PLC也能正常把数据通过以太网传输出去。
但我就是不知道怎么用C#编写程序,做出一个能够接收PLC发过来的多个实时数据(500毫秒间隔),在窗口上显示的同时,再存入数据库里。由于以前只用组态软件,C#以前也学过,但通信方面并没有深入涉及。
主要问题就是用MODBUS 通过以太网读取PLC数据再存入数据库。希望大家能给我点思路,能有示例最好。
还有,组态软件老总不让用,再此郁闷下。。 --------------------编程问答-------------------- 求解啊。。。。哪怕是点思路也行。modbus具体怎么利用。。 --------------------编程问答-------------------- 看你介绍的比较玄乎,MODBUS啥的不太清楚,但是不外乎串口通讯吧。我做过Omron的HostLink通讯协议,通讯协议格式你需要查询PLC的通讯文档的,而具体的发送接收跟一般的SerialPort一模一样。
引用楼主  的回复:
最近公司老总不知道怎么想的,要我们自己折腾无线传感,还利用PLC。现在老板的要求就是10个传感器读取到温度,湿度,电量等多个数据(每个数据都有自己的地址位)然后传到一个集中器上,再通过串口把数据传到PLC,重点来了,要通过网线利用modbus RTU协议读取PLC上的数据,是实时数据,然后在显示到窗口的同时,再存入数据库(SQL2008)中。
折腾了大半天,终于顺利的用PLC收到无线传感器传来的……
--------------------编程问答-------------------- C#这边,写个Tcp服务端,接受二进制数据,然后解析为ModBus,得到负载数据,完成!

其实你们这个方案好浪费钱哦,一个PLC就大几千的了。

我们也有类似的方案,在农业自动化上:
终端带有温湿度传感器和无线模块,由电池驱动,可用三年;
终端定时把数据发往主控端;
主控端就是一片很简单的STM32单片机,带有无线模块和以太网模块,主控端就是一个数据中继;
PC通过以太网接受数据,进行处理。

这个方案里面,终端的硬件成本几十块钱,主控端的成本一百多一点。可以用MF做。

.Net Micro Framework结构和特性【英文】
http://www.newlifex.com/showtopic-7.aspx --------------------编程问答--------------------
引用 3 楼  的回复:
C#这边,写个Tcp服务端,接受二进制数据,然后解析为ModBus,得到负载数据,完成!

其实你们这个方案好浪费钱哦,一个PLC就大几千的了。

我们也有类似的方案,在农业自动化上:
终端带有温湿度传感器和无线模块,由电池驱动,可用三年;
终端定时把数据发往主控端;
主控端就是一片很简单的STM32单片机,带有无线模块和以太网模块,主控端就是一个数据中继;
PC通过以太网接受数……

我也觉得好浪费钱啊,不过谁知道老总怎么想的呢。。PLC是库存的,估计老总心血来潮,苦了我了都。 --------------------编程问答--------------------
引用 1 楼  的回复:
求解啊。。。。哪怕是点思路也行。modbus具体怎么利用。。


SerialPort以前用过,但只是和同事两台电脑连着串口线我发一个他收一个,完了还被他说:“你无聊不无聊?”
现在都忘得差不多了,以前做的那个是参考网上的某个资料,现在电脑重装了系统,全没了。
真不知道我毕业怎么就走入工控行业了。。 --------------------编程问答--------------------
引用 3 楼  的回复:
C#这边,写个Tcp服务端,接受二进制数据,然后解析为ModBus,得到负载数据,完成!

其实你们这个方案好浪费钱哦,一个PLC就大几千的了。

我们也有类似的方案,在农业自动化上:
终端带有温湿度传感器和无线模块,由电池驱动,可用三年;
终端定时把数据发往主控端;
主控端就是一片很简单的STM32单片机,带有无线模块和以太网模块,主控端就是一个数据中继;
PC通过以太网接受数……

写个Tcp服务端,接受二进制数据,然后解析为ModBus,得到负载数据
这个具体要怎么折腾呢?因为是实时数据,500毫秒一刷新。 --------------------编程问答--------------------
引用 6 楼  的回复:
引用 3 楼  的回复:

C#这边,写个Tcp服务端,接受二进制数据,然后解析为ModBus,得到负载数据,完成!

其实你们这个方案好浪费钱哦,一个PLC就大几千的了。

我们也有类似的方案,在农业自动化上:
终端带有温湿度传感器和无线模块,由电池驱动,可用三年;
终端定时把数据发往主控端;
主控端就是一片很简单的STM32单片机,带有无线模块和以太网模块,主控端就是一个数……


你的500ms太慢了!这哪里还叫实时呀

你先学习TcpListener类,然后学习ModBus,用C#解析,差不多就可以了 --------------------编程问答--------------------
引用 7 楼  的回复:
引用 6 楼  的回复:

引用 3 楼  的回复:

C#这边,写个Tcp服务端,接受二进制数据,然后解析为ModBus,得到负载数据,完成!

其实你们这个方案好浪费钱哦,一个PLC就大几千的了。

我们也有类似的方案,在农业自动化上:
终端带有温湿度传感器和无线模块,由电池驱动,可用三年;
终端定时把数据发往主控端;
主控端就是一片很简单的STM32单片机,带有无线模……

额。。好的。我看看。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,