C# 如何读取PLC数据?PLC协议是什么

一叶无秋 2020-02-12 03:59:56
主要通过C#通过以太网读取三菱PLC数据。
我了解第三方的dll 有HslCommunication,MX,和“LFL工控的博客”http://blog.sina.com.cn/s/blog_16d7d3ecb0102x6wj.html,提供的dll 。HslCommunication需要收费,MX需要电脑安装才能使用,“LFL工控的博客”也需要付费,底层代码都未开放。
C# 要使用socket同行PLC,那么有关于三菱协议,比如MC这是什么协议? 这协议只是指发送数据需要按照特殊排列格式而定义的协议吗?求大神说说明下,关于协议是什么。
大神能提供有关于通信三菱PLC源代码,学习下。
...全文
2642 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
B_168 2020-06-17
  • 打赏
  • 举报
回复
一般情况下,用OPC比较多。
下位机-OPC-上位机。
三菱PLC的协议里边应该有关于OPC的一些资料。
上位机OPC环境配置OK之后,OPC扫描工具扫描一下,如果可以读到三菱PLC的相关数据。
就可以进行上位程序的开发了。
C#连接OPC,百度例子很多。
良朋 2020-03-05
  • 打赏
  • 举报
回复
OPC也是收费的,有破解版,但配置起来也麻烦。很多PLC都提供了DLL库,不过还是不如自己按照说明书自己写,直接访问其继电器和寄存器,三菱的和松下的都比较好写,欧姆龙的麻烦一下。自己写的好处是以后用起来方便。西门子的也可以自己写,不过西门子提过了一个免费的S7函数库,直接用更简单。
Bridge_go 2020-03-05
  • 打赏
  • 举报
回复
链接:https://pan.baidu.com/s/1CiIPdpMmGv8FNQ_nlnACXQ 提取码:0w0t 三菱PLC的通讯文档,可以根据里面的形式自己写
  • 打赏
  • 举报
回复
引用 13 楼 一叶无秋 的回复:
[quote=引用 10 楼 兔子家族-二哥 的回复:]
就用串口控件获取数据即可,然后根据协议解析即可,我曾用此设备读取过M0的信号,第一次接触硬件把我弄惨了。
byte[] byteBuffer = new byte[] { 0x02, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x03, 0x35, 0x35 };
serialPort1.Write(byteBuffer, 0, byteBuffer.Length);

这是发送读取信号。

byte[] rs = new byte[serialPort1.BytesToRead];
serialPort1.Read(rs, 0, rs.Length);
bool info = false;
string qsss = "";
for (int i = 0; i < rs.Length; i++)
{
qsss += rs[i].ToString("X2") + " ";
if (rs[i].ToString("X2").Equals("31") || rs[i].ToString("X2").Equals("34"))
{
info = true;
}
}


返回值中 含有 31 或者 34为OK信号,执行其他操作
是不是PLC返回的数据都要十六进制数据?[/quote]

有硬件给你对接你找硬件工程师,没得你就去官网找你API文档。
jamsunyue 2020-03-05
  • 打赏
  • 举报
回复
三菱这么高端的设备一般都会支持 modbus 或 opc 的上层协议,至于底层通信要么 RS232/RS485 要么 TCP/IP,如果支持modbus 或 opc 采用他们提供的 dll 就好了,如果没有就需要从寄存器读数据分析。楼主可以下载 modbus 或 opc 模拟器,里面就是相关的 dll ,另再恶补一下二进制流、串口及socket 的读写,基本上就都明白了。
jzdcf 2020-03-04
  • 打赏
  • 举报
回复
大部分plc都支持modbusTCP,我现在就在用。再下个帮助类dll就能读到
一叶无秋 2020-03-03
  • 打赏
  • 举报
回复
引用 10 楼 兔子家族-二哥 的回复:
就用串口控件获取数据即可,然后根据协议解析即可,我曾用此设备读取过M0的信号,第一次接触硬件把我弄惨了。 byte[] byteBuffer = new byte[] { 0x02, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x03, 0x35, 0x35 }; serialPort1.Write(byteBuffer, 0, byteBuffer.Length); 这是发送读取信号。 byte[] rs = new byte[serialPort1.BytesToRead]; serialPort1.Read(rs, 0, rs.Length); bool info = false; string qsss = ""; for (int i = 0; i < rs.Length; i++) { qsss += rs[i].ToString("X2") + " "; if (rs[i].ToString("X2").Equals("31") || rs[i].ToString("X2").Equals("34")) { info = true; } } 返回值中 含有 31 或者 34为OK信号,执行其他操作
是不是PLC返回的数据都要十六进制数据?
程序yy 2020-03-02
  • 打赏
  • 举报
回复
引用 8 楼 一叶无秋 的回复:
[quote=引用 6 楼 程序yy 的回复:] 三菱的FX3U系列用网线连接的话,可以用Interop.ActProgTypeLib ,很简单的,几行代码就能搞定了 。 可以搜一下ActProgTypeLib
MX不支持64位。[/quote] 编译成32位的啊
一叶无秋 2020-02-26
  • 打赏
  • 举报
回复
引用 6 楼 程序yy 的回复:
三菱的FX3U系列用网线连接的话,可以用Interop.ActProgTypeLib ,很简单的,几行代码就能搞定了 。 可以搜一下ActProgTypeLib
MX不支持64位。
relink 2020-02-26
  • 打赏
  • 举报
回复
PLC厂家应该会提供协议和函数接口,这个直接问厂家技术人员最好解决。
  • 打赏
  • 举报
回复
就用串口控件获取数据即可,然后根据协议解析即可,我曾用此设备读取过M0的信号,第一次接触硬件把我弄惨了。
byte[] byteBuffer = new byte[] { 0x02, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x03, 0x35, 0x35 };
serialPort1.Write(byteBuffer, 0, byteBuffer.Length);

这是发送读取信号。

byte[] rs = new byte[serialPort1.BytesToRead];
serialPort1.Read(rs, 0, rs.Length);
bool info = false;
string qsss = "";
for (int i = 0; i < rs.Length; i++)
{
qsss += rs[i].ToString("X2") + " ";
if (rs[i].ToString("X2").Equals("31") || rs[i].ToString("X2").Equals("34"))
{
info = true;
}
}


返回值中 含有 31 或者 34为OK信号,执行其他操作
土土 2020-02-26
  • 打赏
  • 举报
回复
PLC与上位机通信有很多种协议,可以使用自定义协议,也可以使用PLC专用的协议,如MODBUS等等,专用协议需要参考PLC的协议格式。
Bridge_go 2020-02-22
  • 打赏
  • 举报
回复
有通信文档,按照文档中的格式发送和接收就可以了,很简单
程序yy 2020-02-21
  • 打赏
  • 举报
回复
三菱的FX3U系列用网线连接的话,可以用Interop.ActProgTypeLib ,很简单的,几行代码就能搞定了 。 可以搜一下ActProgTypeLib
threenewbee 2020-02-20
  • 打赏
  • 举报
回复
dde opc modbus,有很多种
一叶无秋 2020-02-20
  • 打赏
  • 举报
回复
引用 2 楼 一线Jon 的回复:
可以使用OPC
OPC 不需要在乎协议吗? OPC是通过接口获取数据?不需要知道PLC协议?
smnoo700qq 2020-02-17
  • 打赏
  • 举报
回复
看PLC自己的手册,每个PLC都有自己的协议格式
一线Jon 2020-02-16
  • 打赏
  • 举报
回复
可以使用OPC
by_封爱 版主 2020-02-12
  • 打赏
  • 举报
回复
直接插电脑上 基本就是串口. 不需要第三方插件 直接用串口接收就行. 如果是连别的电脑上了.. 那么你直接无法读取.. 可能需要串口服务器之类的 可以设置是tcp/ip模式或者是其他模式. 至于协议.要根据设备实际的情况来看. 其实也就是一堆byte数据 某位代表什么意思..

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧