C#winform通过COM口接收发送数据到三菱PLC Q系列C24,最好有实例。谢谢

 我来答
匿名用户
推荐于2016-01-06
展开全部
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;

namespace ClassLibrary1
{
    public class Class1
    {
        SerialPort myPort;

        /// <summary>
        /// 初始化端口
        /// 这里使用默认的1号端口,速率9600bts,无奇偶校验
        /// </summary>
        void InitSerialPort()
        {
            // 端口初始化
            myPort = new SerialPort();
            myPort.PortName = "COM1";
            myPort.BaudRate = 9600;
            myPort.Parity = Parity.None;
            myPort.DataBits = 8;
            myPort.StopBits = StopBits.None;

            myPort.WriteTimeout = 500;

            // 打开端口
            myPort.Open();
        }

        /// <summary>
        ///  发送指令
        ///  指令根据目标平台组成
        /// </summary>
        /// <param name="strCmd"></param>
        void SendCmd(string strCmd)
        {
            if (myPort == null)
            {
                InitSerialPort();
            }

            try
            {
                myPort.WriteLine(strCmd);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}

没有用过这款PLC,不过原理几乎相同,注意修改指令的数据结构即可控制

如果要获取反馈信息则使用

myPort.Read();或myPort.ReadLine()


差错控制、缓冲处理可以参考MSDN中关于SerialPort的范例

更多追问追答
追问

追答

郁闷了,字数限制,先发关键方法吧

补充了相关的测试方法,并通过我自己的设备接收并回送指令给C#客户端

#region 模拟发送测试指令
// 1、组织测试数据
byte[] buffSend = new byte[64];
        buffSend[0] = 0x02; // 起始指令
buffSend[1] = 0x41; // A
buffSend[2] = 0x42; // B
buffSend[3] = 0x43; // C
buffSend[4] = 0x44; // D
buffSend[5] = 0x45; // E
buffSend[6] = 0x46; // F
buffSend[7] = 0x47; // G
buffSend[8] = 0x48; // H
buffSend[9] = 0x03; // 结束指令

try
{
    while (boolSendAlive)
    {
        Console.WriteLine("准备发送一次测试数据");
        for (int index = 0; index < 10; index++)
        {
            Console.Write(buffSend[index]);
            Console.Write(" ");
        }
        Console.WriteLine("");

        myPort.Write(buffSend, 0, 10);

        // 约5s发送一次
        Thread.Sleep(5000);
    }
}

以下是接收线程方法

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式