主頁 >  其他 > C#與PLC通信開發之松下FP系列PLC

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

2020-09-11 16:13:31 其他

這里寫自定義目錄標題

  • 前言
  • 松下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/qita/6169.html

標籤:其他

上一篇:2020年9月程式員工資統計,平均14469元

下一篇:華為聯合教指委發布《物聯網實踐系列教材》

標籤雲
其他(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)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more