主頁 > 資料庫 > C#與PLC通信開發之松下FP系列PLC

C#與PLC通信開發之松下FP系列PLC

2020-09-12 02:18:08 資料庫

這里寫自定義目錄標題

  • 前言
  • 松下FP系列PLC
  • 通信協議
    • 幀格式
    • BCC的計算
    • 指令
    • 常用指令舉例
  • 結語

前言

首先,C#與PLC通信的開發,要和PLC程式開發區分開,C#與PLC通信的開發,是上位機軟體開發,PLC程式開發,是撰寫在PLC里運行的程式,是PLC程式猿的事情,我最初接觸PLC的時候,不是很清楚,畢竟搞軟體開發的,硬體都不怎么熟悉,第一次碰到需要和PLC打交道的專案時,曾經一度差點放棄,找不到方向,迫于專案時間的壓力,只能在網路上盲目的尋找資料,甚至買了一本PLC編程的書籍來看,結果完全看不懂,后來才知道,那本書介紹的是如何撰寫PLC里面運行的程式的教程,需要一定的電子電氣方面的基礎,是PLC程式猿看的書,而我需要的,是C#如何與PLC進行通信方面的資料,完全搞錯了方向,

一般來說,自動化設備的專案,有一個上位機程式猿和一個PLC程式猿一起合作,C#寫上位機軟體,PLC程式猿寫PLC程式,不過不要指望可以從PLC程式猿那里獲取更多的資訊,因為一般PLC程式猿對上位機軟體開發也是一竅不通,他不可能教你怎么和PLC通信,因為他也不會,不過他可以告訴你,有沒有通信上,結果正確不正確,作為一個上位機軟體開發,我們不需要深入了解PLC,只要能知道一些概念,能和PLC程式猿正常溝通就行了,重點是怎么和PLC通信,

PLC有眾多的品牌,國外的有西門子、ABB、三菱、松下這些,國內也有不少,比如臺達、永宏、匯川等等,同一品牌的PLC又有多種型號,不同的型號,通信方式有的也不一樣,所以做專案一般要先問清楚:什么品牌的PLC,具體是什么型號?

所謂和PLC通信,就是讀寫PLC的存盤區,或者是給PLC發送命令,上位機和PLC的物理介面,有的是串口,比如松下和三菱系列的PLC,還有的是網口,比如西門子的PLC,所以和PLC通信,涉及到串口編程和網路編程,如果您沒有串口編程的基礎,可以參看我的另一個專欄:C#完全掌握串口通信開發

C#與PLC通信的開發,最大的障礙是硬體,這也是上位機開發的一個問題,如果手頭上沒有硬體的話,寫出來的程式是對是錯也沒辦法驗證,不過幸運的是,這個專欄里的PLC,都是我專案中遇到的,經受過實際硬體的驗證,可以確保程式的正確性,我把這些整理出來,讓大家少走一些彎路,減少專案開發的時間,

松下FP系列PLC

松下FP系列PLC與工控機之間的通信方式可以采用串口通信,與工控機連接的RS232電纜必須按照松下的產品手冊所給的連線圖進行制作,否則通信將無法實作,一般這根線PLC程式猿會制作好,電纜連線圖如下:
RS232電纜連線圖
既然是串口通信,那么在通信前,要問清楚PLC程式猿波特率、奇偶校驗位、停止位這些重要的串口通信引數,在撰寫代碼前,可以先使用串口除錯助手來檢查是否能正常通信,我們可以給PLC的串口發送這串16進制資料來驗證是否能正常通信(注意:以16進制形式發送):

2530312357435352303031323132300D

注:這條指令是往觸點R12寫入1

暫時先不要管這條資料的含義,如果可以和PLC正常通信,那么PLC是有反饋的,串口除錯助手可以收到資料,如果PLC沒有反饋,那么可以根據以下順序檢查問題:

  1. 確保串口號是正確的,
  2. 確認波特率、奇偶校驗位、停止位這些引數是一致的,
  3. 跟PLC程式猿確認RS232電纜的接線是正確的,

通信協議

與PLC能正常進行串口通信之后,接下來就是根據通信協議來收發資料,進行通信,松下PLC與工控機之間的通信是遵照松下電工的專用通訊協議:MEWTOCOL來實作的,松下官方有關于這個協議的完整的描述檔案,網上到處都可以找得到,我這里也有一份,不過說實話,這個檔案說的不是很詳細,看完這個檔案,很多要緊的地方還是稀里糊涂的,比如指令的內容具體該怎么填寫,BCC(指令校驗)到底該怎么計算才是正確的,這也是我寫這篇文章的目的,我曾經走了不少彎路,浪費了不少時間和精力,后來總算搞清楚了,所以我建議,大家結合我這篇文章來看那個檔案,就會很清楚了,本文也不會完全復制官方的檔案,畢竟有30多頁,只是結合我的體會,概述的講講,具體的指令,大家還是下載官方的檔案來看,
官方檔案下載地址:松下通信協議檔案下載地址

該協議由以下特點:

  1. 資料傳輸采用ASCII的形式,
  2. 應答式協議,首先由工控機發送指令,然后PLC會自動對指令進行回應,也就是說,不需要撰寫任何PLC程式,只要PLC和工控機連接正常,工控機給PLC發送指令,都能得到PLC的回應回復,

幀格式

指令是以幀為單位進行,工控機向PLC發送命令幀,然后PLC作出回應,向工控機發送回應幀,

命令幀格式
命令幀格式
其中:

  1. %為起始碼,這是固定不變的,
  2. AD(H)和 AD(L)是目標站號的高位和低位,一般如果只有一個PLC的話,那么就填寫01,高位是0,低位是1,
  3. #也是固定不變的,
  4. 指令代碼,每個指令會有不同的指令代碼,后面會講,
  5. 文本代碼,指令的內容,不同的指令,內容也不同,
  6. BCC(H)和BCC(L),是幀的資料校驗的高低位,資料校驗范圍是BCC前面的所有字符,
  7. CR,回車鍵,ASCII為0x0D,不可見字符,

回應幀格式
回應幀有兩種,一種是正確回應,一種是錯誤回應,也就是說,如果工控機給PLC發送的指令是正確的,那么PLC就會回傳正確的回應幀,否則就回傳錯誤的回應幀,
回應幀格式
可見,可以從第4個字符來判斷是正確回應,還是錯誤回應,

BCC的計算

BCC校驗碼的計算方式是將指令中的各個ASCII字符的16進制(00~FF)進行異或求和后生成的. 該校驗碼也以兩個ASCII碼字符表示(高位在前,低位在后),
例如這條指令:

%01#RCSX00001DCR
注意:CR不是兩個字符,是一個字符,回車鍵,但是是不可顯示字符,所以這里用CR來表示,

計算方式:
BCC的計算方法
代碼如下:

        public static string Bcc(string cmd)
        {
            cmd = cmd.Trim();
            
            byte bcc = 0;
            byte[] cmdArr = System.Text.Encoding.ASCII.GetBytes(cmd);
            for (int i = 0; i < cmdArr.Length; i++)
            {
                bcc = (byte)(bcc ^ cmdArr[i]);
            }
			
			return bcc.ToString("X2")
        }

引數cmd為指令的前半部分,也就是去掉bcc和CR的部分,例如指令為:%01#RCSX00001DCR,則cmd引數為:%01#RCSX0000

指令

工控機可以給PLC發送的指令一共有20多種,不過我們常用的指令一般有9種,
所有指令
常用指令

常用指令舉例

例1:寫入單觸點狀態(指令代碼:WCS)
寫入單觸狀態命令
例如我們往觸點R12寫入1,則命令幀為:

%01#WCSR0012120CR

拆開成各個部分:% 01 # WCS R 0012 1 20 CR
正常通信情況下,PLC會回傳正確的回應幀:

%01$WC14CR

例2:讀取單觸點狀態(指令代碼:RCS)
讀取單觸點狀態
例如我們讀取觸點R12的值,則命令幀為:

%01#RCSR001214CR

拆分成各個部分:% 01 # RCS R 0012 14 CR
正常通信情況下,假如R12觸點的值為1,那么PLC回傳的回應幀為:

%01$RC120**CR

例3:寫入資料暫存器值(指令代碼:WD)
寫入資料暫存器值
例如我們寫入字數值到PLC的 DT1到DT3,其中:DT1=05H,DT2=1507H,DT3=900H,則命令幀為:
命令幀
這里需要注意的是:

  1. 寫入的數值是按字寫入,也就是說,每個值占2個位元組,
  2. 低位在前,高位在后,
  3. 寫入的字符是16進制的,

所以,需要代碼進行處理,例如此處的DT2=1507H,1507H的10進制值是5383,則處理步驟為:

  1. 先將5383轉換為16進制的字符1507
  2. 將字符轉換順序,低位在前,高位在后,也就是轉換成:0715

我們寫一個函式來進行處理:

        private string ConvertShortToPlcFormat(short value)
        {
            string temp = value.ToString("X4");
            return temp.Substring(2, 2) + temp.Substring(0, 2);
        }

正常通信情況下,PLC的回應幀為:
PLC回應幀

結語

在這篇文章里,我概述了如何使用MEWTOCOL協議與松下FP系列PLC進行串口通信,詳細講解了幾個常用的指令和BCC的計算,相信通過閱讀本文,再結合松下官方的協議檔案,掌握C#工控機與松下FP系列PLC的通信開發不再是難事了,

我曾經在幾個專案里面和松下的PLC打過交道,一個掃碼稱重+按快遞公司分揀的流水線專案,另一個是掃碼列印貼標+掃碼剔除的專案,目前兩個專案都在穩定的運行中,其中,前一個專案讀碼相機采用的是海康的智能讀碼套件MV-PD010003-21IH,后一個專案讀碼相機采用的是得利捷的300N,PLC都是采用的松下PLC,

掃碼稱重快手臺+分揀專案截圖:
專案軟體運行圖
掃碼列印貼標+掃碼剔除專案截圖:
掃碼貼標和剔除系統

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/9460.html

標籤:其他

上一篇:Oracle自動存盤管理ASM

下一篇:阿里云&云棲大會----云棲盲盒

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more