一页纸鸢 2024-04-01 14:46 采纳率: 14.3%
浏览 3
已结题

winform 三菱plc FX3U-30MRdui

winform 三菱plc FX3U-30MR读写

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace man_machine
{
    public partial class HMitsubishiPLC : Form
    {
        public HMitsubishiPLC()
        {
            InitializeComponent();
            // 初始化串口
            string portName = "COM7";
            int baudRate = 38400;
            serialPort = new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One);
            serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
            serialPort.Open();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //string command = txtCommand.Text; // 从文本框获取指令
                byte[] command = new byte[1];
                command[0] = (byte)0;
                //byte[] asciiBytes = Encoding.ASCII.GetBytes(command); // 将字符串转换为 ASCII 码
                WriteToPLC(command);
                Console.WriteLine("命令发送到PLC成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine("发生错误: " + ex.Message);
            }
        }


        // 向PLC写入 ASCII 格式数据
        private void WriteToPLC(byte[] data)
        {
            serialPort.Write(data, 0, data.Length);
        }

        // 从PLC读取数据
        private void ReadFromPLC()
        {
            try
            {
                string receivedData = serialPort.ReadExisting();
                string hexString = BitConverter.ToString(Encoding.Default.GetBytes(receivedData)).Replace("-", " ");

                // 更新UI,显示接收到的数据
                BeginInvoke(new Action(() =>
                {
                    Console.WriteLine("接收返回数据(十六进制):" + hexString);
                }));
            }
            catch (Exception ex)
            {
                Console.WriteLine("接收返回异常:" + ex.Message);
            }
        }

        /// <summary>
        /// 接收返回参数
        /// 
        private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            ReadFromPLC();
        }

        // 当窗体关闭时关闭串口连接
        private void HMitsubishiPLC_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (serialPort.IsOpen)
            {
                serialPort.Close();
            }
        }
    }
}

请问如何向三菱plc读写

  • 写回答

3条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-04-01 14:47
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这段代码使用了串口通信来实现与三菱plc的通信。 具体实现方法如下:
    1. 初始化串口:在构造函数中定义串口名称、波特率、校验位、数据位和停止位,并且实例化SerialPort对象。同时设置DataReceived事件的回调函数为serialPort_DataReceived。
    2. 写入数据:在按钮的Click事件中调用WriteToPLC函数,传入一个byte数组。函数会将byte数组写入串口。
    3. 读取数据:在ReadFromPLC函数中调用serialPort.ReadExisting()函数,获取串口接收的所有数据。然后使用BitConverter将字符串转换成byte数组,再将byte数组转换为十六进制字符串,并更新UI显示数据。
    4. DataReceived事件:当串口接收到数据时,会自动触发DataReceived事件,并调用serialPort_DataReceived函数。
    5. 关闭连接:当窗体关闭时,需要关闭串口连接。 这是一个基本的实现方法,具体的通信协议需要根据PLC的型号和通信方式来确定。例如,可以使用Modbus协议或者Melsec协议进行通信。
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月22日
  • 创建了问题 4月1日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测