主要通過C#通過以太網讀取三菱PLC資料。
我了解第三方的dll 有HslCommunication,MX,和“LFL工控的博客”http://blog.sina.com.cn/s/blog_16d7d3ecb0102x6wj.html,提供的dll 。HslCommunication需要收費,MX需要電腦安裝才能使用,“LFL工控的博客”也需要付費,底層代碼都未開放。
C# 要使用socket同行PLC,那么有關于三菱協議,比如MC這是什么協議? 這協議只是指發送資料需要按照特殊排列格式而定義的協議嗎?求大神說說明下,關于協議是什么。
大神能提供有關于通信三菱PLC源代碼,學習下。
uj5u.com熱心網友回復:
直接插電腦上 基本就是串口. 不需要第三方插件 直接用串口接收就行.如果是連別的電腦上了.. 那么你直接無法讀取.. 可能需要串口服務器之類的 可以設定是tcp/ip模式或者是其他模式.
至于協議.要根據設備實際的情況來看.
其實也就是一堆byte資料 某位代表什么意思..
uj5u.com熱心網友回復:
可以使用OPCuj5u.com熱心網友回復:
看PLC自己的手冊,每個PLC都有自己的協議格式uj5u.com熱心網友回復:
OPC 不需要在乎協議嗎? OPC是通過介面獲取資料?不需要知道PLC協議?uj5u.com熱心網友回復:
dde opc modbus,有很多種uj5u.com熱心網友回復:
三菱的FX3U系列用網線連接的話,可以用Interop.ActProgTypeLib ,很簡單的,幾行代碼就能搞定了 。可以搜一下ActProgTypeLib
uj5u.com熱心網友回復:
有通信檔案,按照檔案中的格式發送和接收就可以了,很簡單uj5u.com熱心網友回復:
MX不支持64位。uj5u.com熱心網友回復:
PLC與上位機通信有很多種協議,可以使用自定義協議,也可以使用PLC專用的協議,如MODBUS等等,專用協議需要參考PLC的協議格式。uj5u.com熱心網友回復:
就用串口控制元件獲取資料即可,然后根據協議決議即可,我曾用此設備讀取過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信號,執行其他操作
uj5u.com熱心網友回復:
PLC廠家應該會提供協議和函式介面,這個直接問廠家技術人員最好解決。uj5u.com熱心網友回復:
編譯成32位的啊
uj5u.com熱心網友回復:
就用串口控制元件獲取資料即可,然后根據協議決議即可,我曾用此設備讀取過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信號,執行其他操作
uj5u.com熱心網友回復:
大部分plc都支持modbusTCP,我現在就在用。再下個幫助類dll就能讀到uj5u.com熱心網友回復:
鏈接:https://pan.baidu.com/s/1CiIPdpMmGv8FNQ_nlnACXQ提取碼:0w0t
三菱PLC的通訊檔案,可以根據里面的形式自己寫
uj5u.com熱心網友回復:
OPC也是收費的,有破解版,但配置起來也麻煩。很多PLC都提供了DLL庫,不過還是不如自己按照說明書自己寫,直接訪問其繼電器和暫存器,三菱的和松下的都比較好寫,歐姆龍的麻煩一下。自己寫的好處是以后用起來方便。西門子的也可以自己寫,不過西門子提過了一個免費的S7函式庫,直接用更簡單。uj5u.com熱心網友回復:
三菱這么高端的設備一般都會支持 modbus 或 opc 的上層協議,至于底層通信要么 RS232/RS485 要么 TCP/IP,如果支持modbus 或 opc 采用他們提供的 dll 就好了,如果沒有就需要從暫存器讀資料分析。樓主可以下載 modbus 或 opc 模擬器,里面就是相關的 dll ,另再惡補一下二進制流、串口及socket 的讀寫,基本上就都明白了。uj5u.com熱心網友回復:
是不是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信號,執行其他操作
有硬體給你對接你找硬體工程師,沒得你就去官網找你API檔案。
uj5u.com熱心網友回復:
一般情況下,用OPC比較多。下位機-OPC-上位機。
三菱PLC的協議里邊應該有關于OPC的一些資料。
上位機OPC環境配置OK之后,OPC掃描工具掃描一下,如果可以讀到三菱PLC的相關資料。
就可以進行上位程式的開發了。
C#連接OPC,百度例子很多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/31314.html
標籤:C#
