java modbus lrc,C#实现modbus基于ASCII的LRC校验

该代码实现了一个ASCII码校验程序,用于计算输入字符串的循环冗余校验(LRC)。程序从textBox1中读取数据,计算数据段长度,然后遍历字符串求和并取模256得到校验码。最后,通过比较计算出的校验码与输入字符串中的校验码来判断数据的正确性,并在textBox2中显示结果。
摘要由CSDN通过智能技术生成

若所求校验为两位ASCII码,LRC就是循环求和后,取256的模,取补码,即为所求校验码;若要四位就改变模值即可

用了两个textbox;

textBox1用于字符输入

textBox2用于处理后输出

button1用于响应

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace encoding

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string original = textBox1.Text; // 从广文本框读入原始数据

// 用于测试的数据 :A0030201C8EE

// 冒号为起始

// A0为设备地址

// 03为控制指令

// 02为数据长度 本测试程序只计算了第二位

// 01C8为数据

// EE为校验码

string[] buf = new string[original.Length];

for (int i = 1; i < original.Length; i++) // 将字符串的第一个字符":"省略

{

buf[i-1] = original.Substring(i, 1);

}

int len =(int)(Convert.ToChar(buf[5]))-48; // 读取数据段长度,为ASCII码,减去48即可.用字符转十进制会更方便

// 此句未测试,用于计算两位的数据长度 int len =((int)(Convert.ToChar(buf[4]))-48)*10+((int)(Convert.ToChar(buf[5]))-48);

int checksum = 0;

for (int i = 0; i < original.Length - 3; i++)

{

checksum += (int)(Convert.ToChar(buf[i])); // 求出校验和为十进制和

}

int sum = 255 - checksum % 256 + 1; // 计算校验和,LRC,ASCII校验

string hex = Convert.ToString(sum, 16).ToUpper(); // 所使用ASCII全部为大写码,共两位,原理不多讲了

string[] buff = new string[hex.Length]; // 分割最后两位的ASCII校验码,用于以后比较

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

buff[i] = hex.Substring(i, 1);

if (buff[0] != buf[6 + len * 2] || buff[1] != buf[7 + len * 2]) // 比较检验码是否正确

{

textBox2.Text = "checksum error" + buf[0] + buf[1];

}

else

{ // 如果校验和正确则显示校验和

textBox2.Text = "you checksum is ok. ";

for (int i = 0; i < len; i++)

{

textBox2.Text += buf[i+6 + len * 2];

}

}

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值