C#实现modbus基于ASCII的LRC校验
2012-01-01 10:38
555 查看
若所求校验为两位ASCII码,LRC就是循环求和后,取256的模,取补码,即为所求校验码;若要四位就改变模值即可
用了两个textbox;
textBox1用于字符输入
textBox2用于处理后输出
button1用于响应
用了两个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]; } } } } }
相关文章推荐
- 基于EIA-232,的ModBus-ASCII协议,校验方式Lrc-8
- VB6基于Windows API的Modbus RTU/ASCII/TCP的主站实现代码
- C#和C实现通过CRC-16 (Modbus)获取CRC值并校验数据(代码)
- 使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 基于XML配置方式实现对action的所有方法和指定方法进行输入校验
- C# 小规模网络远程调用的基类(基于Socket方式)实现
- 基于C#的socket编程的TCP异步实现
- 《设计模式——基于C#的工程化实现及扩展》 Security Design Pattern 系列 4 角色模式(Role Pattern)
- 用C#实现基于TCP协议的网络通讯
- c#基于udp实现的p2p语音聊天工具
- 基于C#的socket编程的TCP异步实现
- 基于C#技术实现身份证识别功能
- C#基于WebBrowser获取cookie的实现方法
- 基于c#实现的九九乘法表(简单实例)
- MongoDB实现基于关键词的文章检索功能(C#版)
- 基于C#的socket编程的TCP异步实现
- .NET(C#)基于Socket编程实现平行主机之间网络通讯有图片传输的Demo演示
- 用C#实现基于TCP协议的网络通讯
- 基于C#的算法导论中的算法实现(一)
- 基于C#弹幕类射击游戏的实现——(四)玩家的战机