modbus的报文是16进制数,PLC使用word(16位)或者int(16位)类型能接收到modbus的16进制数报文。
在PLC中,可以用以下方法把word/int解析为String类型。


代码:
#pos := 0;
"GunData".dints[0] := Serialize(SRC_VARIABLE := "GunData".ushorts1,
DEST_ARRAY => "GunData".bytes,
POS := #pos);
Chars_TO_Strg(Chars := "GunData".bytes,
pChars := "GunData".dints[2],
Cnt := "GunData".uints[1],
Strg => "GunData".strings[0]);
先用序列化命令Serialize将 “GunData”.ushorts 解析为"GunData".bytes,即word数组解析为byte字节数组。
最后使用命令Chars_TO_Strg 将字节数组解析为字符串。Chars_TO_Strg 参数定义如下:

附带上我的C# modbus通信库,基于Nmodbus封装。
using Modbus.Device;
using Newtonsoft.Json;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using ZgCsharp.Entities;
using ZgCsharp.SqlSugar.Impl;
using ZgCsharp.SqlSugar.Repository.Impl;
namespace ZgCsharp.Modbus
{
public class ModbusHelper : IModbusHelper
{
bool last = false;
bool trigIn = false;
bool trigQ = false;
private string ip;
private string port;
private List<ActualData> actualDatas = new List<ActualData>();
public List<ActualData> ActualDatas
{
get {
return actualDatas; }
set {
actualDatas = value; }
}
/**
* modubs从站ID
*/
private string slaveNo;
private bool isConnected = false;
private bool isFirstConn = true;
private int errorTimes = 0;
CancellationTokenSource cts = new CancellationTokenSource();
/**
* 起始地址
*/
private string address;
//变量个数
private string varNum;
private TcpClient tcpClient = null;
private ModbusIpMaster master;
//配置文件地址
private string jsonfile = Application.StartupPath + "\\Config\\modbuscfg1.json";
private List

本文介绍了一种使用C#实现的Modbus通信库,该库基于Nmodbus封装,并详细讲解了如何通过TCP连接进行Modbus读写操作。此外,还提供了如何在PLC中将16进制数报文解析为字符串的方法。
最低0.47元/天 解锁文章
2948

被折叠的 条评论
为什么被折叠?



