modbus PLC 三菱 php,三菱PLC与上位机的Modbus通讯 附C#源代码

本文档提供了一个C#实现的FX3GModbusAPI,用于实现与三菱PLC的Modbus通信。API包含读写线圈、输入、保持寄存器等操作,并提供了读写浮点数的辅助方法。通过示例代码,展示了如何进行Modbus通信并处理响应。
摘要由CSDN通过智能技术生成

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.IO.Ports;

using System.Windows;

using System.Threading;

namespace FX3GModbusAPI

{

public class FX3GModbusAPI

{

public struct Type

{

//FX3G

public static string Y = "3300";      //Y元件的定义

public static string X = "3400";                //X元件的定义

public static string S = "2000";        //S元件的定义

public static string M = "0000";                //M元件的定义

public static string TS = "3000";                //TS位元件的定义

public static string MR = "1E00";        //M8000~M8511字元件的定义

public static string CS = "3200";                //CS位元件的定义

public static string D = "0000";          //D0~D7999

public static string WD = "1F40";     //D8000~D8511

}

public enum SoftElemType

{

//FX3G

Y,

X,

S,

M,

TS,

MR,

CS,

D,

WD,

}

public struct FunctionName

{

public static string   Read_线圈 = "01";//可多点

public static string Read_输入 = "02";//可多点

public static string Read_保持寄存器 = "03";//可多点

public static string Read_输入寄存器 = "04";//可多点

public static string Write_线圈写入 = "05";//仅一点

public static string Write_寄存器写入 = "06";//仅一点

public static string Write_批量线圈写入 = "0F";//多点线圈写入

public static string Write_批量寄存器写入 = "10";//多点保持寄存器写入

}

public  SerialPort port;

//   private StringBuilder myCompleteMessage = new StringBuilder();//避免在事件处理方法中反复的创建,定义到外面。

public string STATE;

public string myCompleteMessage;

public int FX3G_Write_Soft_Elem(SoftElemType eType, int nStartAddr, int nCount, byte[] pValue, int nNetId = 0)

{

try

{

Addr = "";

senddata = "";

value = "";

//num = 0;

switch (eType)

{

case (SoftElemType.Y):

for (int i = 0; i < pValue.Length; i++)

value += string.Format("{0:x2}", pValue[i]);

Addr = Convert.ToString(nStartAddr + Convert.ToInt16(Type.Y.ToString(), 16), 16);

if (nCount == 1)

senddata = string.Format("{0:x2}{1}{2}", FunctionName.Write_线圈写入, Addr.PadLeft(4, '0'), value.PadLeft(4, '0'));

else senddata = string.Format("{0:x2}{1}{2}{3}{4}", FunctionName.Write_批量线圈写入, Addr.PadLeft(4, '0'), Convert.ToString(nCount, 16).PadLeft(4, '0'), Convert.ToString((nCount - 1) / 8 + 1, 16).PadLeft(4, '0'), value);

Write_port(senddata);

myCompleteMessage = myCompleteMessage.Replace(" ", "");

if (Convert.ToByte((myCompleteMessage.Substring(2, 2)), 16) != 0x05 && Convert.ToByte((myCompleteMessage.Substring(2, 2)), 16) != 0x0F) return -1;

break;

case (SoftElemType.M):

for (int i = 0; i < pValue.Length; i++)

value += string.Format("{0:x2}", pValue[i]);

Addr = Convert.ToString(nStartAddr + Convert.ToInt16(Type.M.ToString(), 16), 16);

int len = nCount / 8;

if (nCount % 8 != 0)

{

len += 1;

}

if (nCount =

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值