这个是一个简单的iot工具调用库,因为最近需要一个简单的业务:写入条码到台达PLC并且正确读取出来,网上找了很多教程,可以写入,但是写进去的时候少字符。
这里面涉及的有个高低位和字节转码的问题,我用的是IotClientHelper的CDAB:
public void WriteString(string address, string value, bool isReverse = false)
{
try
{
if (WriteClient == null)
{
return;
}
var q = Encoding.ASCII.GetBytes(value);
if (isReverse)
{
q = q.Reverse().ToArray();
}
var writeResult = WriteClient.Write(address, value);
if (!writeResult.IsSucceed)
{
}
}
catch (Exception e)
{
//App.ErrorLog.Error($"{e.Message};地址:{address};值:{value}");
}
}
这样编写就可以正确写入并且读取出来,至于前面的少写,后面查到原因,写入涉及到长度有关,如果不是使用iot的话,对于写进去的字符,因为plc里面是两个字节存储的,所以不满双数就补全一个空格,注意,空格需要转成ascii码,可以直接:
q = Encoding.ASCII.GetBytes(value+" ");又或者使用下面的
public byte[] SwapAdjacentBytes(byte[] inputBytes)
{
byte[] swappedBytes = new byte[inputBytes.Length];
// 处理前面的偶数长度部分
for (int i = 0; i < inputBytes.Length - 1; i += 2)
{
swappedBytes[i] = inputBytes[i + 1];
swappedBytes[i + 1] = inputBytes[i];
}
// 如果输入数组长度为奇数,单独处理最后一个字节
if (inputBytes.Length % 2 != 0)
{
swappedBytes[inputBytes.Length - 1] = inputBytes[inputBytes.Length - 1];
}
return swappedBytes;
}
以上有不对的,请各位大佬多多指教