首先工控项目都会用到:
using System.Runtime.InteropServices;
1、字节转化为单精度浮点数
2、单精度转成字节
3、使用结构体
4、使用动态链接库
5、ASCCII码字符转成16进制数
6、字符转ASCII码,ASCII码转字符
7、字符串转成字符数组
8、整形数据与字节数组相互转换
9、ASCII码的使用,适用于串口通信
10、c#获得时间和路径 
1、字节转化为单精度浮点数
//byte[] retdata = new byte[] { 0x00, 0x00, 0x7A, 0x43 }; //43 7A 00 00 是250,在这里要倒过来写
byte[] r;
r=new byte[4];
r[3] = 0x43;
r[2] = 0xac;
r[1] = 0x00;
r[0] = 0x00;
textBox1.Text = BitConverter.ToSingle(r, 0).ToString ();
2、单精度转成字节
float floatvalue;
floatvalue = 2500;
byte[] b = BitConverter.GetBytes(floatvalue );
textBox1.Text =Convert.ToString(b[3],16)+" "+Convert.ToString(b[2],16)+" "+Convert.ToString(b[1],16)+" "+Convert.ToString(b[0],16);
3、使用结构体
(1)先引用命名空间
using System.Runtime.InteropServices;
(2)在public partial class Form1 : Form
中声明结构体类型。例如://注意代码的位置
[StructLayout(LayoutKind.Sequential)]  //不写这个也行,默认的内存排列就是Sequential,也就是按成员的先后顺序排列.
public struct PVCI_INIT_CONFIG
{
public uint AccCode;
public uint AccMask;
public uint Reserved;
public byte Filter;
public byte kCanBaud;
public byte Timing0;
public byte Timing1;
public byte Mode;
public byte CanRx_IER;
}
(3)在需要使用的地方定义:
形式1:s x;
x.a = 0x55;
x.b = 0x66;
形式2:PVCI_INIT_CONFIG[] config = new PVCI_INIT_CONFIG[1];  //定义一个结构体数组
config[0].AccCode = 0x80000008;
config[0].AccMask = 0xFFFFFFFF;
config[0].Reserved = 204;
config[0].Filter = 0;
config[0].kCanBaud = 12;  //500k
config[0].Timing0 = 0x00;
config[0].Timing1 = 0x1C;
config[0].CanRx_IER = 1; //Enable CAN reveive
config[0].Mode = 0;
4、使用动态链接库
有些DLL有依赖文件,例如:吉阳CANUSB的,和DLL相关的有两个VCI_CAN文件和一个SiUSBXp.dll文件。将所有相关文件拷贝到bin\debug中和exe文件在一个文件中。
using System.Runtime.InteropServices;
在窗体类中public partial class Form1 : Form
声明就可以用   
[DllImport("VCI_CAN.dll",EntryPoint = "VCI_OpenDevice")]
public static extern int VCI_OpenDevice(uint Devtype, uint Devindex, uint Reserved);
5、ASCCII码字符转成16进制数
//这个在串口通信有实际应用
//如9的ASCCII码是57,将9的ASCCII传进函数,然后57-0x30就是数字9
//再如F的ASCCI码是70,70-'A'=70-65=5,然后5+10就是15也就是F表示的数字
public int HexChar(char c)
{
if ((c >= '0') && (c <= '9'))
return c - 0x30;
else if ((c >= 'A') && (c <= 'F'))
return c - 'A' + 10;
else if ((c >= 'a') && (c <= 'f'))
return c - 'a' + 10;
else
return 0x10;
}
//这个将FE之类的字符串转成数字
public int Str2Hex(string str)
{
int len = str.Length;
if (len == 2)
{
int a = HexChar(str[0]);
int b = HexChar(str[1]);
if (a == 16 || b == 16)
{
MessageBox.Show("format error!");
return 256;
}
else
{
return a * 16 + b;
}
}
else
{
MessageBox.Show("len must be 2");
return 256;
}
}
//可以这样使用,强制转换为字节型,并以字符串显示为254
textBox1.Text = Convert.ToString((byte)Str2Hex("FE"));
//这样就显示FE了
textBox1.Text = Convert.ToString((byte)Str2Hex("FE"),16);
6、字符转ASCII码,ASCII码转字符 
public static int Asc(string character)
{
if (character.Length == 1)
{
System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
int intAsciiCode = (int)asciiEncoding.GetBytes(character)[0];
return (intAsciiCode);
}
else
{
throw new Exception("Character is not valid.");
ASCII码转字符: 
单个字符
public static string Chr(int asciiCode)
{
if (asciiCode >= 0 && asciiCode <= 255)
{
System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
byte[] byteArray = new byte[] { (byte)asciiCode };
string strCharacter = asciiEncoding.GetString(byteArray);
return (strCharacter);
}
else
{
throw new Exception("ASCII Code is not valid.");
}
Excel专用
/// <summary>
/// ASCII码转字符串(转换为Excel列的形式:A/B/C...AA/AB/AC...BA/BB/......)
/// </summary>
/// <param name="asciiCode">最大数字255(即Excel最末列IV)</param>
/// <returns></returns>
public static string Chr(int asciiCode)
{
if (asciiCode > 0 && asciiCode <= 255)
{
System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
string strCharacter = string.Empty;
byte[] byteArray = null;
int division = (asciiCode - 64) / 26;
int mod = (asciiCode - 64) % 26;
if (mod == 0)
{
division = division - 1;
mod = 26;
}
if ((division == 0) && (mod <= 26))
{
byteArray = new byte[] { (byte)(mod + 64) };
strCharacter = strCharacter + asciiEncoding.GetString(byteArray);
}
else
{
byteArray = new byte[] { (byte)(division + 64) };
strCharacter = strCharacter + asciiEncoding.GetString(byteArray);
byteArray = new byte[] { (byte)(mod + 64) };
strCharacter = strCharacter + asciiEncoding.GetString(byteArray);
}
return strCharacter;
}
else
{
return "ASCII Code is not valid.";
}
}
7、字符串转成字符数组
string ss;
ss = "hello world";
char[] sx=ss.ToCharArray();
int i;
for (i = 0; i < sx.Length; i++)
{
textBox1.Text = textBox1.Text + " " + sx[i];
}
8、整形数据与字节数组相互转换
例如:吉阳CAN的ID号移位问题
int id;
id = 0x088090C1<<3;         
byte[] sID = BitConverter.GetBytes(id);
textBox1.Text = Convert.ToString(sID[3], 16) + " " + Convert.ToString(sID[2], 16) + " " + Convert.ToString(sID[1], 16) + " " + Convert.ToString(sID[0], 16) +" ";
//将字节数组组合成32位整形
int rID=0x00000000;
rID = (sID[3] << 24) | (sID[2] << 16)|(sID[1]<<8)|sID[0];
rID = rID >> 3;
9、ASCII码的使用,适用于串口通信
char x = (char)59;     //ASCII码是59
textBox1.Text = "hello" + x.ToString()+(char)32+"world";  //asccii码32是空格
//写成数组形式
char[] str = { (char)45,(char)48,(char)100 };  //(char)77 就是ASCII码77的 强制转为字符
textBox1.Text = str[0].ToString() + str[1].ToString() + str[2].ToString(); //用在串口发送上比较合适
10、c#获得时间和路径             
//  textBox1.Text = DateTime.Now .ToString ()+":"+DateTime.Now.Millisecond .ToString() ; //时间,精确到毫秒
//  textBox1.Text = Environment.CurrentDirectory.ToString();  //当前路径
//  textBox1.Text = Environment.TickCount.ToString();  //获得系统启动经过的毫秒数
//  System.Threading.Thread.Sleep(1000);  //暂停1秒

C#搞工控的一些代码相关推荐

  1. python工控怎么样_搞工控不了解python,好比雄鹰断了翅膀,理由在这里!

    这时,距离下班只有30分钟了.无奈,先梳理一下要展示的数据指标:达成率,环比,增长.人均单产.人力成本等数据的演算.推导.分析,还要匹配对应的PPT数据魔方.... 数据很多,先把每个人的数据调出来吧 ...

  2. python与工业控制_搞工控不了解python,好比雄鹰断了翅膀,理由在这里!

    昨天一个朋友发信息跟我说,天天加班,感觉过得一点都不幸福. 这引发了我的思考. 当代职场年轻人的抑郁,有千百种. 一边是加不完的班.完不成的KPI.大把掉落的头发,一边是今年严峻的就业形势,职场人面临 ...

  3. C#工控上位机实例_工控学习,搞工控的到底什么是上位机,什么是下位机?

    上位机 上位机是指可以直接发出操控命令的计算机, 一般是PC/host computer/master computer/upper computer, 屏幕上显示各种信号变化(液压,水位,温度等). ...

  4. 构建虚拟工控环境系列 - 西门子虚拟PLC

    一. 概述 跟随着工控安全一路走来,工控安全市场今年明显有相当大的改善,无论从政策还是客户需求,都在逐步扩大中.但是,搞工控安全研究的人员却寥寥无几.一方面工控安全是个跨学课的技术,需要了解多方面的知 ...

  5. 西门子工控不求人---说说官方资源网站(强大到超出您想象)

    西门子产品非常多,工业自动化方面的知识管理一直是知识管理的典范,多次获得知识管理大奖(MIKE),可以很容易查资料.找答案.技术讨论.视频学习.软件下载.产品模板下载等,因此,搞工控的朋友们,只要能了 ...

  6. 3配置的笔记本能不能运行博图v15_工控、电气工程师笔记本工作站选择指南

    根据我这几天的研究和探索,今天给大家提供一些合适的笔记本,仅供参考. 需要说明几点: 1.本篇文章只适合于搞工控设计.电气设计工程师,不适合其他用途. 2.这些选项本着耐用.舒适的原则进行选择,所以价 ...

  7. 驱动提取软件_深入分析施耐德工控软件代码执行漏洞

    更多全球网络安全资讯尽在邑安全 简介 在本文中,我们将为读者详细介绍Claroty Research团队的Amir Preminger和Sharon Brizinov是如何组合利用两个漏洞,来触发施耐 ...

  8. modbus rtu通信 多级工控 plc原理图modbus代码

    工控版modbus rtu远程控制plc开发版 工控版modbus rtu远程控制plc兼容5v3v系统 modbus控制版,工控版,开发版 ,提供源码,原理图. 1.输入,输出均隔离,稳定, 2.可 ...

  9. 开源纯C#工控网关+组态软件(九)定制Visual Studio

    一.   引子 因为最近很忙(lan),很久没发博了.不少朋友对那个右键弹出菜单和连线的功能很感兴趣,因为VS本身是不包含这种功能的.   大家想这是什么鬼,怎么我的设计器没有,其实这是一个微软黑科技 ...

  10. 开源纯C#工控网关+组态软件(八)表达式编译器

    一.   引子 监控画面的主要功能之一就是跟踪下位机变量变化,并将这些变化展现为动画.大部分时候,界面上一个图元组件的某个状态,与单一变量Tag绑定,比如电机的运行态,绑定一个MotorRunning ...

最新文章

  1. 如何在maven的setting.xml中指定jdk版本(详细步骤)
  2. linux-任务调度
  3. .Net程序员面试 中级篇 (回答Scott Hanselman的问题)
  4. 一步步学习 SAP CDS view Text Association 在 SAP Fiori Elements 中的应用
  5. 服务器内提取文件,linux命令如何提取文件夹内特定文件路径
  6. linux内核功能关闭透明大页 功能,redhat linux 7.4关闭透明大页
  7. Spark Streaming 反压机制
  8. 【疾病分类】基于matlab LBP果实病害检测分类【含Matlab源码 1714期】
  9. uniapp 前端数据显示数据字典值 程序设计
  10. React Native 填坑记录01
  11. 计算机主机usb插口松,台式电脑音频接口坏了or接触不良?用这两个方法轻松解决,还不需要花什么钱...
  12. URAL 1741 Communication Fiend
  13. Docker容器化技术教程,24小时快速入门
  14. 模板匹配、抓圆、抓边、二维码 零基础labview视觉培训教程《龙哥手把手教你学视觉》只有不会教的老师,没有学不会的学生
  15. WiFi-ESP8266入门http(3-2)网页认证上网-post请求
  16. autosar的alarm配置
  17. Android软件安全与逆向分析笔记
  18. 零基础小白怎么自学UI设计?自学UI设计有什么方法?
  19. 简单DIV CSS布局网站 (HTML学生个人网站作业设计) 体育运动主题网页设计与实现
  20. CPU检测工具:CPU-Z快捷键大全(绿色)

热门文章

  1. 启科量子在2022全球数字经济大会量子信息技术与应用论坛公布量子计算机工程化进展
  2. 第三章第二十一题(科学:某天是星期几)(Science: day of the week)
  3. matlab 对话框大小调整,matlab界面设计---对话框设计
  4. Windows添加共享文件夹添加一个网络位置图文教程
  5. hdu 6202 cube cube cube
  6. 工作两三年了,整不明白架构图都画啥?
  7. 第三十三章 SQL函数 COT
  8. python中数字转英文_如何用Python实现阿拉伯数字转换英文数字 python3 将中文句子中汉字数字转阿拉伯数字...
  9. 整合营销成功案例-卫龙辣条的逆袭路
  10. 阿里巴巴 29 个屌炸天的开源项目