大家好,我从事的是工业控制行业,计算机程序一般采用组态软件(类似 Builder 的),自由度很低,所以一直想编写一个通过以太网通讯的程序,这个程序的我总结的需求如下描述,开发 Win32 程序实在不是我的强项,正好需求对实时性要求高,与之前的大学同学聊了聊却又都没有相关经验,所以向大家求助。
我们的设备需要和 PLC 通讯,就是嵌入式设备。他可以发出 TCP/IP 包,以 100ms 或 50ms 发送一次数据包(这个可以用 TCP/IP 调试工具模拟),数据长度不超过 32Bytes ,拟采用 win32 桌面程序接收该信号,自定义一个报文,这样可以将 PLC 中的变量传到 PC 中,也可以进行双向通讯,计算机做 server , plc 做 client 。现在的问题是我们的系统目前必须部署在 XP 上,所以打算采用 Visual Studio 2010 sp1 的 C#来编写该程序,有人说 C#的性能欠佳,我也有点担心是否 100ms/50ms 接受相关数据,接受相关程序后再采用写 ini 文件,写 sqlite 或 Access 的数据库,功能逐步迭代演进。
本来想用 C++来写,但是之前参与开发调试的 C++程序总是出现内存泄露问题,而且对 C++不是很熟悉,所以想用 C#来开发,请问大家有别的意见吗?
如果大家知道类似的 C#或其他语言读写 TCP IP 的协议的开源项目,请告诉我名称,我 goolge 一下参考参考,我不想做伸手党,请要告诉名称即可。
诚心求教 非常感谢~
Best Regards.
1
amaranthf 2017-02-15 14:53:49 +08:00 1
C#在 xp 上跑还得要运行库,建议用 go 语言试试,同样不用担心内存泄露等问题。
另外,绝大部分语言都有现成的、内置或者属于标准库内的 TCP/IP 支持,直接搜索语言自身的文档就好。 |
2
lancerliu 2017-02-15 15:14:05 +08:00 1
先问一下,你是要模拟 PLC client 进行通讯,还是直接截取通讯的数据?
|
3
OIseekU 2017-02-15 15:31:18 +08:00 1
这个不难吧,直接安装 winpcap 库,利用 winpcap 提供的 api ,这样可以拿到完整的数据包,然后根据自定义的协议进行解析。另:个人感觉即使 c#性能再差也可以接收 100ms/50ms 的数据包吧
|
4
wevsty 2017-02-15 16:15:41 +08:00 1
PC 上的通信 50ms 一个包无论是什么开发语言基本上都可以满足要求,不必执着于 C++或者 C#,选一门自己熟悉的语言会更有帮助。
必须 XP 是一个坑,设计的时候建议能抛弃 XP 就不要用 XP ,我不明白为什么一定必须使用 XP 。如果是考虑授权问题,那么建议使用 Linux 而不是 XP 。 针对需求,个人理解是直接 PC 上写个 TCP Server 和 PLC 进行通讯,单纯针对这个需求,可能使用 Python 会比较方便(当然,如果使用 XP 就不能使用新版本的 Python ,这又是个坑)。 C#不太了解,不乱说。 C++的话,如果要使用 C++开发,可以考虑使用 Boost 的 ASIO 。 |
5
Andiry 2017-02-15 16:33:14 +08:00 1
50ms ,用任何语言性能都不是问题,选熟悉的就好
|
6
wojiushimogui 2017-02-15 16:39:29 +08:00 via Android 1
三楼提到了 winpcap ,自己使用它做过网口通信,还可以,使用相应的 demo 改改就可以了,这个在 Java 中也有相同的类库
|
7
cchange OP @amaranthf 多谢 实际上 C#与 go 不太熟悉,所以确实可以考虑 go 语言 但是考虑 go 语言是不是集成开发环境比较差,
XP 保留兼容性, 以后必然要切换到 win10 和 win7 上的 多谢 |
9
cchange OP @wevsty 谢谢
我会用比较熟悉的编程语言 必须 XP 是因为有些软件只有 XP 版本,这个是历史遗留问题,我编写这个软件一方面也是想讲软件控制权重新拿回来,替换相关旧的软件。 请问 Python 有什么类库是做这个呢? 告诉我名称即可。 C++的 boost 库里 ASIO 收下了 待会儿就去研究研究 |
10
wevsty 2017-02-15 17:09:23 +08:00
@cchange
Python 的话标准的 TCP 链接用标准库就足够了。 官方文档 https://docs.python.org/3/library/socket.html (这个文档是 Python3 的, Python2 和 Python3 有些区别,推荐使用 Python3 ,但是新版本不能兼容 XP ) 一般来说,应用层的程序直接升级通常不会有太多问题。如果是计划升级 OS ,那么建议一开始就决定好。 对 C++来说,用 Boost 的好处是显而易见的, VS2010 有一部分最新的 C++特性不支持, Boost 可以补足部分, ASIO 封装过的 Socket 后期移植到新系统甚至更换到 Linux 也是比较容易的。 |
11
thomaspaine 2017-02-15 17:55:39 +08:00
@cchange 桌面程序选 Qt 啊,你要的什么数据库支持, socket 支持都有,性能也不错,也支持 xp
用 python 写,写界面的时候还不是用 PyQt …… |
12
mkeith 2017-02-15 22:38:01 +08:00
go 写 tcp 同行很方便的,我现在就是用的 go 写的 tcpsever 内部还嵌了个 webserver 来控制程序
|
15
cchange OP @thomaspaine 好的 我以 Qt 为关键词搜搜看 多谢
|