成人精品一区二区久久久 I 国产美女永久无遮挡 I 中文字幕+乱码+中文字幕明步 I 国产在视频一区二区三区吞精 I 日韩精品小视频 I 成人性生交大片免费4 I 免费aaa级毛片在线视频 I 一级片毛片 I 大型成人社区 I 国模在线播放 I 欧美大荫蒂毛茸茸视频 I 偷偷色噜狠狠狠狠的777米奇 I www.久久亚洲 I 日日搞夜夜操 I 亚洲成色777777女色窝 I 毛片黄色毛片 I 午夜片在线观看 I 国产一区二区三区中文字幕 I 天天干夜夜骑 I 日韩在线视频一区二区三区 I 久久久无码精品亚洲a片0000 I 写真福利片hd在线播放 I 欧美成人一区二免费视频 I 色噜噜狠狠爱综合视频 I 中文字幕无线码免费人妻 I 国产精品久久久久久久久久不蜜臀 I 欧美综合人人做人人爱 I 1024成人网色www I 国产精品视频一二三区 I 亚洲免费美女视频

夢雨天涯
微信hui530527   &
級別: 網絡英雄
精華主題: 0
發帖數量: 4960 個
工控威望: 8397 點
下載積分: 18533 分
在線時間: 3471(小時)
注冊時間: 2016-10-31
最后登錄: 2025-10-09
查看夢雨天涯的 主題 / 回貼
樓主  發表于: 2025-04-23 11:24
問題是我是一個PLC工程師,想用寫一個上位機程序和三菱FX3U通訊,PLC的IP地址為192.168.0.250,端口號為5551.要求顯示X0到X7,輸出顯示Y0到Y7,還有M0到M9切換按鈕,輸出格式為直接打開的exe文件
以下是使用C#開發的三菱FX3U上位機通信程序實現方案,包含可直接運行的EXE文件生成方法:
一、開發環境配置
‌開發工具‌:
Visual Studio 2022 (社區版)
.NET Framework 4.8
通信參數‌
NuGet包:Mx.Component.Melsec(三菱協議庫)
var config = new MelsecConfiguration {
    ProtocolType = ProtocolType.TCP,
    Host = "192.168.0.250",
    Port = 5551,
    CpuType = CpuType.FX3U,
    ConnectTimeout = 3000
};
二、界面設計(Windows Forms)
<!-- MainForm.Designer.cs -->
this.Controls.AddRange(new Control[] {
    // X0-X7狀態指示燈
    new StatusLight { Name="x0", Location=new Point(20,20) },
    // ...重復創建x1-x7
    
    // Y0-Y7狀態顯示
    new StatusLight { Name="y0", Location=new Point(120,20) },
    // ...重復創建y1-y7
    
    // M0-M9切換按鈕
    new ToggleButton { Name="m0", Text="M0", Location=new Point(220,20) },
    // ...創建m1-m9
    
    // 狀態欄
    new StatusStrip {
        Items = {
            new ToolStripStatusLabel { Name="lblStatus" }
        }
    }
});
三、核心通信代碼
public partial class MainForm : Form {
    private MelsecFxPLC plc;
    
    // 初始化PLC連接
    private void ConnectPLC() {
        plc = new MelsecFxPLC(config);
        var result = plc.Connect();
        
        if (result.IsSuccess) {
            timer1.Interval = 500;  // 500ms輪詢周期
            timer1.Start();
        }
    }

    // 定時讀取狀態
    private void timer1_Tick(object sender, EventArgs e) {
        // 批量讀取X/Y狀態
        var xStatus = plc.ReadBytes("X0", 1);
        var yStatus = plc.ReadBytes("Y0", 1);
        
        // 更新指示燈
        UpdateLights(xStatus, "x");
        UpdateLights(yStatus, "y");
    }

    // M按鈕點擊事件
    private void mButton_Click(object sender, EventArgs e) {
        var btn = sender as ToggleButton;
        plc.WriteBit($"M{btn.Tag}", btn.Checked);
    }
}
四、可視化組件類
// 狀態指示燈控件
public class StatusLight : PictureBox {
    public StatusLight() {
        Size = new Size(30, 30);
        BackColor = Color.Silver;
    }

    public bool Active {
        set => BackColor = value ? Color.Lime : Color.Red;
    }
}

// 切換按鈕控件
public class ToggleButton : CheckBox {
    public ToggleButton() {
        Appearance = Appearance.Button;
        TextAlign = ContentAlignment.MiddleCenter;
        Size = new Size(50, 30);
    }
}
五、項目打包部署
‌發布設置‌:

項目屬性 → 發布 → 選擇"從CD/USB安裝"
包含.NET Framework 4.8運行庫
生成單文件EXE
‌依賴文件‌
├── MelsecFx.dll
├── Newtonsoft.Json.dll
└── Mx.Component.Core.dll
六、協議處理流程圖
sequenceDiagram
    participant UI as 上位機
    participant PLC as FX3U PLC
    
    UI->>PLC: TCP Connect(192.168.0.250:5551)
    PLC-->>UI: 連接成功響應
    
    loop 500ms輪詢
        UI->>PLC: 讀取X0-X7(0x00B0命令)
        PLC-->>UI: X狀態數據
        UI->>PLC: 讀取Y0-Y7(0x00B0命令)
        PLC-->>UI: Y狀態數據
    end
    
    UI->>PLC: 寫入M位(0x1401命令)
    PLC-->>UI: 寫入確認
七、測試驗證步驟
‌PLC準備‌:
; 測試程序
LD M8000
MOV K85 K1Y0  // Y0-Y7循環顯示
‌上位機操作檢查表‌:
微信hui530527      b站賬號,非標自動化譚工
請不要隨意加我,不會隨便通過。
工控技術交流QQ群942493953
工控tucao
級別: 略有小成
精華主題: 0
發帖數量: 194 個
工控威望: 376 點
下載積分: 880 分
在線時間: 171(小時)
注冊時間: 2013-01-30
最后登錄: 2025-05-12
查看工控tucao的 主題 / 回貼
1樓  發表于: 2025-04-23 17:03
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Net.Sockets;
using System.Text;
using System.Windows.Forms;

namespace MELSEC_FX3U_Comm
{
    public partial class MainForm : Form
    {
        private TcpClient plcClient;
        private NetworkStream stream;
        private Timer refreshTimer;
        private byte station = 0x00;

        // PLC寄存器狀態存儲
        private bool[] xStatus = new bool[8];
        private bool[] yStatus = new bool[8];
        private bool[] mStatus = new bool[10];

        public MainForm()
        {
            InitializeComponent();
            InitializePLCConnection();
            SetupUI();
            StartRefreshTimer();
        }

        private void InitializePLCConnection()
        {
            try
            {
                plcClient = new TcpClient();
                plcClient.Connect(IPAddress.Parse("192.168.0.250"), 5551);
                stream = plcClient.GetStream();
                StatusLabel.Text = "已連接到PLC";
            }
            catch (Exception ex)
            {
                StatusLabel.Text = $"連接失敗: {ex.Message}";
            }
        }

        private void SetupUI()
        {
            // 初始化輸入顯示區域
            for (int i = 0; i < 8; i++)
            {
                var cb = new CheckBox
                {
                    Text = $"X{i}",
                    Location = new Point(20 + (i % 4) * 80, 20 + (i / 4) * 30),
                    AutoSize = true
                };
                xCheckBoxes.Add(cb);
                this.Controls.Add(cb);
            }

            // 初始化輸出顯示區域
            for (int i = 0; i < 8; i++)
            {
                var cb = new CheckBox
                {
                    Text = $"Y{i}",
                    Location = new Point(200 + (i % 4) * 80, 20 + (i / 4) * 30),
                    AutoSize = true
                };
                yCheckBoxes.Add(cb);
                this.Controls.Add(cb);
            }

            // 初始化M寄存器按鈕
            for (int i = 0; i < 10; i++)
            {
                var btn = new Button
                {
                    Text = $"M{i}",
                    Location = new Point(380 + (i % 5) * 80, 20 + (i / 5) * 30),
                    Width = 70
                };
                btn.Click += (s, e) => ToggleMRegister(i);
                mButtons.Add(btn);
                this.Controls.Add(btn);
            }
        }

        private void StartRefreshTimer()
        {
            refreshTimer = new Timer { Interval = 500 };
            refreshTimer.Tick += async (s, e) => await ReadPLCData();
            refreshTimer.Start();
        }

        private async Task ReadPLCData()
        {
            try
            {
                // 讀取X寄存器
                byte[] xData = ReadRegisters(0x0000, 8);
                for (int i = 0; i < 8; i++)
                    xStatus = (xData[i / 8] & (1 << (7 - (i % 8)))) != 0;

                // 讀取Y寄存器
                byte[] yData = ReadRegisters(0x0010, 8);
                for (int i = 0; i < 8; i++)
                    yStatus = (yData[i / 8] & (1 << (7 - (i % 8)))) != 0;

                UpdateUI();
            }
            catch (Exception ex)
            {
                StatusLabel.Text = $"讀取錯誤: {ex.Message}";
            }
        }

        private byte[] ReadRegisters(ushort start, ushort length)
        {
            // 構建讀取請求報文
            List<byte> query = new List<byte>
            {
                0x80, 0x00, 0x00, 0x00,           // 起始符
                0x00, 0x02,                         // 控制代碼
                (byte)(station), 0x00, 0x00,      // 站號、保留
                (byte)(start >> 8), (byte)start,  // 起始地址
                (byte)(length >> 8), (byte)length,// 寄存器數量
                0x00, 0x00                          // 結束符
            };

            SendCommand(query.ToArray());
            return ReadResponse();
        }

        private void ToggleMRegister(int index)
        {
            mStatus[index] = !mStatus[index];
            WriteRegister(0x2000 + index, mStatus[index] ? 1 : 0);
            mButtons[index].BackColor = mStatus[index] ? Color.LightGreen : SystemColors.Control;
        }

        private void WriteRegister(ushort address, ushort value)
        {
            // 構建寫請求報文
            List<byte> query = new List<byte>
            {
                0x80, 0x00, 0x00, 0x00,           // 起始符
                0x00, 0x12,                         // 控制代碼
                (byte)(station), 0x00, 0x00,      // 站號、保留
                (byte)(address >> 8), (byte)address,// 地址
                (byte)(value >> 8), (byte)value,  // 值
                0x00, 0x00                          // 結束符
            };

            SendCommand(query.ToArray());
        }

        private void SendCommand(byte[] command)
        {
            stream.Write(command, 0, command.Length);
        }

        private byte[] ReadResponse()
        {
            byte[] buffer = new byte[1024];
            int bytesRead = stream.Read(buffer, 0, buffer.Length);
            Array.Resize(ref buffer, bytesRead);
            return buffer;
        }

        private void UpdateUI()
        {
            // 更新X寄存器顯示
            for (int i = 0; i < 8; i++)
                xCheckBoxes.Checked = xStatus;

            // 更新Y寄存器顯示
            for (int i = 0; i < 8; i++)
                yCheckBoxes.Checked = yStatus;

            // 更新M寄存器顯示
            for (int i = 0; i < 10; i++)
                mButtons.BackColor = mStatus ? Color.LightGreen : SystemColors.Control;
        }

        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);
            plcClient?.Close();
        }

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }
}

主站蜘蛛池模板: 中文字幕在线综合 | 欧美日韩国产二区 | 懂色一区二区二区av免费观看 | 日韩欧美字幕 | 国产成人在线综合 | 亚洲欧洲国产码专区在线观看 | 亚洲精品国偷拍自产在线 | 国产 日韩 欧美 制服 另类 | 国产无遮挡又黄又爽动态图 | 伊人久久大香线蕉综合影视 | 日韩中文字幕中文无码久本草 | 一二三四区无产乱码1000集 | 成人av激情人伦小说 | 丁香婷婷在线 | 五月激情综合 | 亚洲精品国产精品乱码视色 | 免费看毛片的网站 | 欧美一区二区三区红桃小说 | 99热这里只有精品免费播放 | 欧美激情一区在线 | 韩国日本美国免费毛片 | 日韩欧美精品免费 | 精品一区二区三区东京热 | 肉性天堂 | 在线观看亚洲视频 | 国产精品无码av片在线观看播放 | 色欲综合一区二区三区 | 99欧美视频一区二区国产 | 国产精品偷啪在线观看 | 国产吞精囗交高潮 | 欧美日韩人成视频在线播放 | 亚洲成在线aⅴ免费视频 | 瑟瑟视频在线观看 | 亚洲免费激情视频 | 午夜爽爽爽男女免费观看麻豆国产 | 综合无码一区二区三区 | 欧美福利视频导航 | 日韩精品久久久久久久白丝 | 伊人依成久久人综合网 | 欧美第一福利 | 无码午夜人妻一区二区不卡视频 | 国产熟妇精品高潮一区二区三区 | 亚洲性综合网 | 欧洲熟妇色xxxx欧美老妇性 | 久久黄色播放器 | 拍国产乱人伦偷精品视频 | 欧美精品日韩一区 | 美女在线国产 | a级性生活视频 | 亚洲国产精品久久久久婷婷老年 | 精品伊人久久大线蕉色首页 | 国产又粗又猛又爽又黄男同 | 亚洲一区在线观看免费视频 | 一本综合丁香日日狠狠色 | 国产熟妇高潮叫床视频播放 | 在线观看欧美日韩视频 | 91精品国产乱码久久久 | 无码精品国产一区二区三区免费 | 婷色综合 | 主站蜘蛛池模板: 蛛词}| 亚洲男人天堂网2014av | 国精产品69永久中国有限 | 精品久久艹 | 国产精品永久 | 蜜臀av一区二区 | 国产成人综合视频 | 男女真人国产牲交a做片野外 | 久久久国产乱子伦精品 | 开心伊人网| 国产日产欧洲无码视频 | 四虎永久在线精品免费无码 | 国产又色又爽又黄 | 免费色网址| 免费成人黄色网址 | 18禁止观看强奷免费国产大片 | 穿越异世荒淫h啪肉np文 | 一本色道久久综合亚洲精品图片 | 7777色鬼xxxx欧美色妇 | 在线国产黄色 | 色偷偷人人澡久久超碰97 | 色婷婷精品久久二区二区6 国产做爰视频 | 国产精品卡一卡二卡三 | 四虎影院永久 | 日本国产欧美 | 欧美成人久久久 | 欧美精品久久久久久久久老牛影院 | 日韩不卡在线观看 | 欧美日韩色综合 | 91视频最新网址 | 国产熟妇乱子伦视频在线观看 | 国产色诱视频在线观看 | av色涩 | 丰满岳乱妇在线观看中字无码 | 午夜大片 | 人妻无码久久一区二区三区免费 | 中文字幕高清在线观看 | 国产重口老太伦 | 成人午夜精品视频 | 最新在线观看av | 嫩草网在线观看 | 中文字幕无线观看中文字幕 | 波多野结衣av在线无码中文18 | 成年大片免费视频播放二级 | 欧美污在线观看 | 亚洲人成小说网站色在线观看 | 看免费黄色一级片 | www.91精品| 久久天天躁狠狠躁夜夜2020老熟妇 | 日本真人添下面视频免费 | 亚洲中国最大av网站 | 国产又色又爽又黄刺激在线视频 | 少妇高潮潮喷到猛进猛出小说 | 人妻在卧室被老板疯狂进入 | 一本色道久久88一综合免费 | 免费在线观看黄色片 | 日日av色欲香天天综合网 | 亚洲伦理在线观看 | 午夜xxxx| 天堂新版8中文在线8 | 主站蜘蛛池模板: 蛛词}| 色综合亚洲一区二区小说 | 人妻精品人妻无码一区二区三区 | 99免费在线视频 | youjizz.com国产 | 欧美颜射内射中出口爆在线 | 伊人伊色 | 亚洲精品第一区二区三区 | 床戏做爰无遮挡三级寡妇 | 国产欧美另类久久久精品不卡 | 国产一级做a爱免费视频 | 日韩大片高清播放器 | 日韩精品aaa| 精品热线九九精品视频 | 又大又黄又粗又爽的免费视频 | 男女真人国产牲交a做片野外 | 欧美特黄在线观看 | 久视频精品 | 欧美日韩一卡2卡三卡4卡 乱码欧美孕交 | 久久精品人人做人人爽电影 | 性色av一区二区三区夜夜嗨 | 怡红院av亚洲一区二区三区h | 中文字幕乱码人妻二区三区 | 超碰在线免费播放 | 人妻少妇精品无码专区二区 | 色综合久久天天综合 | 超碰www| 国产精品国产三级国av | 美国女人精69xxxxxx | 国产乱码1卡二卡3卡四卡5 | 区一区二区三区中文字幕 | 老熟女重囗味hdxx69 | 色综合色综合色综合色欲 | 内射人妻无码色ab麻豆 | 亚洲一区av| 国产成人福利视频 | 欧美激情精品成人 | 国产免费无码av在线观看 | 丰满岳每4乱理中文字幕 | 亚洲性色av私人影院无码 | 欧美日日操 | 少妇裸体婬交视频免费看 | 国产成人无码av在线播放不卡 | 日韩av人人夜夜澡人人爽 | 亚洲精品鲁一鲁一区二区三区 | 韩国亚洲精品a在线无码 | 国产综合内射日韩久 | 欧美极品少妇xxxxⅹ裸体艺术 | 久9热这里只有精品视频 | 中文精品在线 | 福利免费在线观看 | yy111111少妇影院免费观看 | av狠狠干 | 青草热视频 | 日韩欧美精品一区 | 一区二区欧美日韩 | 久久精品国自产拍天天拍最新章节 | 亚洲va| 成人无码嫩草影院 | 在线精品免费视频无码的 | 主站蜘蛛池模板: 蛛词}| 美女下半身无遮挡免费网站 | 日本少妇做爰大尺裸体网站 | 19禁国产精品福利视频 | 日韩人妻少妇一区二区 | 有码在线视频 | 日本精品一区二区三区在线视频 | 六月婷婷色 | 国产精品黑色丝袜久久 | 加勒比一区二区三区 | 成年女人看片永久免费视频 | 国产在线视频网址 | 69视频一区| 国产精品第四页 | 亚洲综合色婷婷在线影院p厂 | 男女爱爱福利视频 | 四虎av永久在线精品免费观看 | 99精品国产福利在线观看 | 四色米奇777狠狠狠me | 国产不卡a | 国产啊v在线观看 | 国产精品去看片 | 边吃奶边添下面好爽 | 八区精品色欲人妻综合网 | 男人舔女人b视频 | 久久九九国产精品怡红院 | 在线 无码 中文字幕 强 乱 | 国产精品视频一区二区三区四 | 亚洲精品成人在线视频 | 18禁裸体动漫美女无遮挡网站 | 久久精品卡二卡三卡四卡 | 国产一卡2卡3卡四卡精品app | 天堂av手机版 | 香蕉视频1024 | 曰韩三级 | 欧美精品一区二区三区四区在线 | 黄色精品一区二区 | 国内女人喷潮完整视频 | 夜夜爽日日澡人人添 | 日本在线xxxx | 亚洲精品国产精品乱码不卡√香蕉 | 欧美日韩生活片 | 精品香蕉一区二区三区 | 婷婷五月在线视频 | 波多野av一区二区无码 | 国产又粗又猛又黄又爽无遮挡 | 国产成人精品亚洲日本在线桃色 | 国产农村妇女高潮大叫 | 久久亚洲精中文字幕冲田杏梨 | 日b免费视频 | 国产激情无码视频在线播放性色 | 少妇粉嫩无套内谢 | 久久精品女人天堂av | 久久久免费看片 | 国产 欧美 在线 | 天天舔天天操天天干 | 国产又爽又刺激的视频 | 黄色在线观看视频 | 熟女少妇人妻中文字幕 | japanese国产精品 | 主站蜘蛛池模板: 蛛词}| 精品国内自产拍在线观看视频 | 四虎网址大全 | 精品蜜桃av | 四季久久免费一区二区三区四区 | 中文字幕 在线 欧美 日韩 制服 | 少妇高潮喷水正在播放 | 色婷婷av一区二区三区大白胸 | 亚洲女人初尝黑人巨大 | 91caoporn超碰 | 99久久免费精品高清特色大片 | 日本免码va在线看免费 | 天天躁夜夜踩很很踩2022 | 高清国产一区二区三区四区五区 | 成人黄色免费看 | 日本在线免费观看视频 | 成人午夜视频免费 | 精品国产免费一区二区三区 | www久久久| 人人妻人人澡人人爽不卡视频 | 一区二区视频网站 | 99久re热视频这只有精品6 | 激情成人在线观看 | 玩弄japan白嫩少妇hd小说 | 国产欧美日韩精品专区 | 男人的天堂在线a无码 | 内射中出无码护士在线 | 无码国产一区二区三区四区 | 五月在线 | 亚洲国产成人久久精品app | 国产午夜精品一区理论片飘花 | 色94色欧美sute亚洲线路一 | 一本岛在免费一二三区 | 亚洲国产精品一区二区久久,亚洲午夜 | 久久99久久99小草精品免视看 | 欧美日色 | 国产传媒一区二区三区 | 欧美精品高清在线观看 | 日日做夜夜爽毛片麻豆 | 成人免费观看做爰视频ⅹxx | 成人a毛片| 精品成人佐山爱一区二区 | 国产男女做爰猛烈床吻戏网站 | 国产欧美日韩高清在线不卡 | 欧美人伦 | 无遮掩60分钟从头啪到尾 | 五月婷香蕉久色在线看 | av在线日| 国产麻豆成人传媒免费观看 | 欧美日韩中文视频 | 日韩av成人网 | 亚洲欧洲日产国码无码 | 亚洲爆乳无码精品aaa片蜜桃 | 国产精品一区理论片 | 午夜毛片 | 大肉大捧一进一出好爽视色大师 | 52avaⅴ我爱haose免费视频 | 欧美性大战久久久久xxx | 嫩草影院中文字幕 | 亚洲精品国产v片在线观看 中国毛片在线观看 |