C#winform通过COM口接收发送数据到三菱PLC Q系列C24,最好有实例。谢谢
1个回答
推荐于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);
}
}
以下是接收线程方法
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询