C产品在市场上有哪些独特优势?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2299个文字,预计阅读时间需要10分钟。
一、概述伪原创是指通过一定的技术手段,对原有的文章内容进行改写,使其在保持原意的基础上,呈现出新的面貌,避免直接复制粘贴的嫌疑。这种方法常用于内容生成、SEO优化等领域。
二、文本描述伪原创技术主要采用以下几种方法进行内容
1.替换同义词:将原文中的关键词替换为同义词或近义词。
2.改变句子结构:调整原文的句子结构,如将主动句改为被动句,或将长句为短句。
3.调整段落顺序:将原文中的段落顺序进行打乱,重新组织内容。
4.引用和转述:将原文中的部分内容进行引用或转述,并注明出处。
采用C语言实现伪原创,可以编写一个简单的程序,实现上述几种改写方法。以下是一个简单的示例代码:
c
#include #include// 替换同义词void replace_synonyms(char *text, const char *source, const char *target) { char buffer[1024]; int i, j, len=strlen(text); for (i=0, j=0; i // 改变句子结构void change_sentence_structure(char *text) { // 示例:将主动句改为被动句 char buffer[1024]; int i, j, len=strlen(text); for (i=0, j=0; i // 调整段落顺序void adjust_paragraph_order(char *text) { // 示例:将段落顺序打乱 char buffer[1024]; int i, j, len=strlen(text); for (i=0, j=0; i int main() { char text[]=这是一篇关于伪原创的文章。伪原创是一种技术,可以改变文章内容。; replace_synonyms(text, 伪原创, 内容改写); change_sentence_structure(text); adjust_paragraph_order(text); printf(%s\n, text); return 0;} 以上代码仅展示了伪原创技术中的一部分,实际应用中可以根据需求进行扩展和优化。 本文描述采用C#语言访问控制Tektronix TBS 2000B 系列示波器。接口协议采用NI-VISA。 最近一个项目需要和一款示波器进行通信,需要对示波器进行一些简单控制并获取到波形数据。经过一段时间研究,大致了解了相关操作,因为发现相关资料不是很多,所以把我了解的相关知识和大家分享一下。文末将提供本文涉及的相关文档、代码、安装程序的下载地址。 正常情况下,我们如果需要和一个设备进行通信,首先需要知道PC通过什么方式和设备进行连接,通信协议是什么。由于工作需要和很多设备进行过连接,常用的连接方式主要有:网络连接、串口连接、USB接口连接等;通信协议都是自定义的协议文本。本来以为这个项目首先得需要搞清楚示波器的通信协议,然后才能进行下一步开发,在官方网站下载了一些编程资料,发现该设备是可以通过VISA进行连接的,那什么是VISA呢?VISA是由National Instruments公司牵头,联合一些设备制造厂商共同指定的一个通用设备连接标准,不管设备通过何种方式进行连接,只要符合VISA规范就可以通过该标准协议进行连接,而NI-VISA就是NI公司实现的一个协议,通过这个协议接口,我们不用直接和设备进行通信,只需要通过NI-VISA提供的接口就可以访问设备,而常用的接口非常简单,主要就是OPEN、WRITE、READ等几个命令。符合规范的设备都会公开一份SCPI指令集的文档,只要仔细阅读该文档就可以实现设备的控制。在整个项目过程中,我仅仅通过几个官方网站下载的文档就完成项目开发,几乎没有什么障碍,在此不得不感慨我们的制造业和发达国家相比确实有很大差距,我们就缺少这样标准性的东西,什么事情都得从底层做起,很不科学。要是那些巨头们肯做一些这方面的工作就太好了,比做什么买菜、卖鱼的APP有意义得多了。 示波器通过网络接口和PC进行连接 配置示波器IP和PC在同一个网段,例如:192.168.11.11,在设置时注意IP内不要有0,然后在PC上先ping一下,看能否ping通。 如果能ping通就在浏览器输入192.168.11.11看能否打开示波器主页,确认SCPI指令可以运行。 运行NI-VISA Runtime安装程序,选中运行时基础包和.NET支持包。 .NET支持包选.NET 4.0-4.5.1 Runtime Support(IVI),不选.NET XX Runtime Support(NS),NS的包是老版本。 安装完成后形成两个包:Ivi.Visa和NationalInstruments.Visa 其中Ivi.Visa有两个版本: 32位位置:C:\Program Files (x86)\IVI Foundation\VISA\Microsoft.NET\Framework32\v2.0.50727\VISA.NET Shared Components 5.8.0 64位位置:C:\Program Files\IVI Foundation\VISA\Microsoft.NET\Framework64\v2.0.50727\VISA.NET Shared Components 5.8.0 NationalInstruments.Visa位置:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\NationalInstruments.Visa\v4.0_17.0.0.0__2eaa5af0834e221d 新建VS工程,按上述地址添加Ivi.Visa和NationalInstruments.Visa两个引用。Ivi.Visa的库根据需要可以选32位或64位。 程序运行需要在目标机器安装运行时,所以引用的库不需要复制到项目文件夹。 github.com/cnxy/VISAInstrument 连接代码:
string IP = this.txtIP.Text.Trim();
string IpRegex = @"^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$";
if (!Regex.IsMatch(IP, IpRegex))
{
MessageBox.Show("IP地址不正确!");
return;
}
if (!PortUltility.OpenIPAddress(IP, out string fullAddress))
{
MessageBox.Show("未找到设备!");
return;
}
try
{
_portOperatorBase = new LANPortOperator(fullAddress);
}
catch (Exception ex)
{
MessageBox.Show($"初始化设备失败:{ex.Message}");
return;
}
try
{
_portOperatorBase.Timeout = 2000;
_portOperatorBase.Open();
}
catch (Exception ex)
{
MessageBox.Show($"连接设备失败:{ex.Message}");
return;
}
EnabledControls(true);
MessageBox.Show("连接成功!");
写指令一共有两种,一种不需要返回数据、一种需要返回数据,下发了需要返回数据的指令后才能进行读取指令,否则就会读取失败。 读写指令如下:
private void btnWrite_Click(object sender, EventArgs e)
{
string CmdStr = this.txtCommand.Text.Trim();
try
{
_portOperatorBase.WriteLine(CmdStr);
ShowLog($"[Write][{CmdStr}][Success]");
}
catch
{
ShowLog($"[Write][{CmdStr}][ERROR]");
}
}
private void btnReadString_Click(object sender, EventArgs e)
{
try
{
var result = _portOperatorBase.Read();
ShowLog($"[Read][{result}][{result.Length}]");
}
catch (IOTimeoutException)
{
ShowLog($"[Read][ERROR:Timeout]");
}
catch (Exception ex)
{
ShowLog($"[Read][Exception:{ex.Message}]");
}
}
核心代码就这么多,剩下的就根据需要查询SCPI指令表就可以了。 以下指令仅适用于Tektronix TBS 2000B系列示波器。
(一) 基本指令
1. 身份
WRITE:*IDN?
READ:
(二) 设置
1. 默认设置
RECAll:SETUp FACtory
2. 通道控制
Select:CH<x> ON/OFF
3. 水平位置与比例
HORizontal:POSition?
HORizontal:POSition 10
HORizontal:SCAle?
400 单位是秒
HORizontal:SCAle 0.2
4. 垂直位置与比例
CH1:POSition?
CH1:POSition 1
CH1:SCAle?
CH1:SCAle 2.5
5. 触发
模式
TRIGger:A:MODe?
NORMAL
触发类型
TRIGger:A:TYPe?
EDGE
触发源
TRIGger:A:EDGE:SOUrce CH1
耦合:
TRIGger:A:EDGE:COUPling g {DC|HFRej|LFRej|NOISErej}
斜率
TRIGger:A:EDGE:SLOpe {RISe|FALL}
触发电平(当前)
TRIGger:A:LEVel?
2.0800
TRIGger:A:LEVel 3.5
触发电平(指定通道)
TRIGger:A:LEVel:CH1?
2.0800
TRIGger:A:LEVel :CH1 3.5
(三) 控制
1. 设置/查询工作类型
ACQuire:STOPAfter SEQuence
ACQuire:STOPAfter RUNSTOP
查询:ACQuire:STOPAfter?
返回最后一次设置的工作类型
2. 设置/查询运行状态
ACQuire:STATE?
0:Run或Single
1:Stop
设置:ACQuire:STATE ON/OFF
3. 查询触发状态
TRIGger:STATE?
READY:等待触发
SAVE:已经触发
(四) 读取数据
1. 设置数据来源(通道)
DATA:SOURCE CH1
2. 设置/读取记录宽度
HORizontal:RECOrdlength?
2000
3. 读取波形数据宽度(仅读取,触发完成后有效)
WFMOutpre:RECOrdlength?
2000
4. 设置传输数据窗口
DATa:STARt 1 最小为1
DATa:STOP 2000
DATa:WIDth? 单个数据宽度(字节数)默认为1,可以修改为2字节,但高位始终为0
5. 数据读取
CURVe?
Read(Bytes):返回指定长度的字节数据
数据为:帧头(N字节)+数据(STOP-STARt+1字节)+帧尾(1字节)。
帧头为:#(1字节)+数据长度的长度(1字节)+数据长度(1~9字节)
帧尾为:\n
数据每个字节表示一个波形高度值,采用补码方式,即第一个位表示符号,范围从-128~127
相关文档、代码下载:gitee.com/seabluescn/tksamples.git 以上就是C# 通过NI-VISA操作Tektronix TBS 2000B系列示波器的实现步骤的详细内容,更多关于c# 操作Tektronix TBS 2000B系列示波器的资料请关注自由互联其它相关文章!一、概述
二、连接
三、安装驱动
四、引用
五、代码
附录、相关SCPI指令
本文共计2299个文字,预计阅读时间需要10分钟。
一、概述伪原创是指通过一定的技术手段,对原有的文章内容进行改写,使其在保持原意的基础上,呈现出新的面貌,避免直接复制粘贴的嫌疑。这种方法常用于内容生成、SEO优化等领域。
二、文本描述伪原创技术主要采用以下几种方法进行内容
1.替换同义词:将原文中的关键词替换为同义词或近义词。
2.改变句子结构:调整原文的句子结构,如将主动句改为被动句,或将长句为短句。
3.调整段落顺序:将原文中的段落顺序进行打乱,重新组织内容。
4.引用和转述:将原文中的部分内容进行引用或转述,并注明出处。
采用C语言实现伪原创,可以编写一个简单的程序,实现上述几种改写方法。以下是一个简单的示例代码:
c
#include #include// 替换同义词void replace_synonyms(char *text, const char *source, const char *target) { char buffer[1024]; int i, j, len=strlen(text); for (i=0, j=0; i // 改变句子结构void change_sentence_structure(char *text) { // 示例:将主动句改为被动句 char buffer[1024]; int i, j, len=strlen(text); for (i=0, j=0; i // 调整段落顺序void adjust_paragraph_order(char *text) { // 示例:将段落顺序打乱 char buffer[1024]; int i, j, len=strlen(text); for (i=0, j=0; i int main() { char text[]=这是一篇关于伪原创的文章。伪原创是一种技术,可以改变文章内容。; replace_synonyms(text, 伪原创, 内容改写); change_sentence_structure(text); adjust_paragraph_order(text); printf(%s\n, text); return 0;} 以上代码仅展示了伪原创技术中的一部分,实际应用中可以根据需求进行扩展和优化。 本文描述采用C#语言访问控制Tektronix TBS 2000B 系列示波器。接口协议采用NI-VISA。 最近一个项目需要和一款示波器进行通信,需要对示波器进行一些简单控制并获取到波形数据。经过一段时间研究,大致了解了相关操作,因为发现相关资料不是很多,所以把我了解的相关知识和大家分享一下。文末将提供本文涉及的相关文档、代码、安装程序的下载地址。 正常情况下,我们如果需要和一个设备进行通信,首先需要知道PC通过什么方式和设备进行连接,通信协议是什么。由于工作需要和很多设备进行过连接,常用的连接方式主要有:网络连接、串口连接、USB接口连接等;通信协议都是自定义的协议文本。本来以为这个项目首先得需要搞清楚示波器的通信协议,然后才能进行下一步开发,在官方网站下载了一些编程资料,发现该设备是可以通过VISA进行连接的,那什么是VISA呢?VISA是由National Instruments公司牵头,联合一些设备制造厂商共同指定的一个通用设备连接标准,不管设备通过何种方式进行连接,只要符合VISA规范就可以通过该标准协议进行连接,而NI-VISA就是NI公司实现的一个协议,通过这个协议接口,我们不用直接和设备进行通信,只需要通过NI-VISA提供的接口就可以访问设备,而常用的接口非常简单,主要就是OPEN、WRITE、READ等几个命令。符合规范的设备都会公开一份SCPI指令集的文档,只要仔细阅读该文档就可以实现设备的控制。在整个项目过程中,我仅仅通过几个官方网站下载的文档就完成项目开发,几乎没有什么障碍,在此不得不感慨我们的制造业和发达国家相比确实有很大差距,我们就缺少这样标准性的东西,什么事情都得从底层做起,很不科学。要是那些巨头们肯做一些这方面的工作就太好了,比做什么买菜、卖鱼的APP有意义得多了。 示波器通过网络接口和PC进行连接 配置示波器IP和PC在同一个网段,例如:192.168.11.11,在设置时注意IP内不要有0,然后在PC上先ping一下,看能否ping通。 如果能ping通就在浏览器输入192.168.11.11看能否打开示波器主页,确认SCPI指令可以运行。 运行NI-VISA Runtime安装程序,选中运行时基础包和.NET支持包。 .NET支持包选.NET 4.0-4.5.1 Runtime Support(IVI),不选.NET XX Runtime Support(NS),NS的包是老版本。 安装完成后形成两个包:Ivi.Visa和NationalInstruments.Visa 其中Ivi.Visa有两个版本: 32位位置:C:\Program Files (x86)\IVI Foundation\VISA\Microsoft.NET\Framework32\v2.0.50727\VISA.NET Shared Components 5.8.0 64位位置:C:\Program Files\IVI Foundation\VISA\Microsoft.NET\Framework64\v2.0.50727\VISA.NET Shared Components 5.8.0 NationalInstruments.Visa位置:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\NationalInstruments.Visa\v4.0_17.0.0.0__2eaa5af0834e221d 新建VS工程,按上述地址添加Ivi.Visa和NationalInstruments.Visa两个引用。Ivi.Visa的库根据需要可以选32位或64位。 程序运行需要在目标机器安装运行时,所以引用的库不需要复制到项目文件夹。 github.com/cnxy/VISAInstrument 连接代码:
string IP = this.txtIP.Text.Trim();
string IpRegex = @"^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$";
if (!Regex.IsMatch(IP, IpRegex))
{
MessageBox.Show("IP地址不正确!");
return;
}
if (!PortUltility.OpenIPAddress(IP, out string fullAddress))
{
MessageBox.Show("未找到设备!");
return;
}
try
{
_portOperatorBase = new LANPortOperator(fullAddress);
}
catch (Exception ex)
{
MessageBox.Show($"初始化设备失败:{ex.Message}");
return;
}
try
{
_portOperatorBase.Timeout = 2000;
_portOperatorBase.Open();
}
catch (Exception ex)
{
MessageBox.Show($"连接设备失败:{ex.Message}");
return;
}
EnabledControls(true);
MessageBox.Show("连接成功!");
写指令一共有两种,一种不需要返回数据、一种需要返回数据,下发了需要返回数据的指令后才能进行读取指令,否则就会读取失败。 读写指令如下:
private void btnWrite_Click(object sender, EventArgs e)
{
string CmdStr = this.txtCommand.Text.Trim();
try
{
_portOperatorBase.WriteLine(CmdStr);
ShowLog($"[Write][{CmdStr}][Success]");
}
catch
{
ShowLog($"[Write][{CmdStr}][ERROR]");
}
}
private void btnReadString_Click(object sender, EventArgs e)
{
try
{
var result = _portOperatorBase.Read();
ShowLog($"[Read][{result}][{result.Length}]");
}
catch (IOTimeoutException)
{
ShowLog($"[Read][ERROR:Timeout]");
}
catch (Exception ex)
{
ShowLog($"[Read][Exception:{ex.Message}]");
}
}
核心代码就这么多,剩下的就根据需要查询SCPI指令表就可以了。 以下指令仅适用于Tektronix TBS 2000B系列示波器。
(一) 基本指令
1. 身份
WRITE:*IDN?
READ:
(二) 设置
1. 默认设置
RECAll:SETUp FACtory
2. 通道控制
Select:CH<x> ON/OFF
3. 水平位置与比例
HORizontal:POSition?
HORizontal:POSition 10
HORizontal:SCAle?
400 单位是秒
HORizontal:SCAle 0.2
4. 垂直位置与比例
CH1:POSition?
CH1:POSition 1
CH1:SCAle?
CH1:SCAle 2.5
5. 触发
模式
TRIGger:A:MODe?
NORMAL
触发类型
TRIGger:A:TYPe?
EDGE
触发源
TRIGger:A:EDGE:SOUrce CH1
耦合:
TRIGger:A:EDGE:COUPling g {DC|HFRej|LFRej|NOISErej}
斜率
TRIGger:A:EDGE:SLOpe {RISe|FALL}
触发电平(当前)
TRIGger:A:LEVel?
2.0800
TRIGger:A:LEVel 3.5
触发电平(指定通道)
TRIGger:A:LEVel:CH1?
2.0800
TRIGger:A:LEVel :CH1 3.5
(三) 控制
1. 设置/查询工作类型
ACQuire:STOPAfter SEQuence
ACQuire:STOPAfter RUNSTOP
查询:ACQuire:STOPAfter?
返回最后一次设置的工作类型
2. 设置/查询运行状态
ACQuire:STATE?
0:Run或Single
1:Stop
设置:ACQuire:STATE ON/OFF
3. 查询触发状态
TRIGger:STATE?
READY:等待触发
SAVE:已经触发
(四) 读取数据
1. 设置数据来源(通道)
DATA:SOURCE CH1
2. 设置/读取记录宽度
HORizontal:RECOrdlength?
2000
3. 读取波形数据宽度(仅读取,触发完成后有效)
WFMOutpre:RECOrdlength?
2000
4. 设置传输数据窗口
DATa:STARt 1 最小为1
DATa:STOP 2000
DATa:WIDth? 单个数据宽度(字节数)默认为1,可以修改为2字节,但高位始终为0
5. 数据读取
CURVe?
Read(Bytes):返回指定长度的字节数据
数据为:帧头(N字节)+数据(STOP-STARt+1字节)+帧尾(1字节)。
帧头为:#(1字节)+数据长度的长度(1字节)+数据长度(1~9字节)
帧尾为:\n
数据每个字节表示一个波形高度值,采用补码方式,即第一个位表示符号,范围从-128~127
相关文档、代码下载:gitee.com/seabluescn/tksamples.git 以上就是C# 通过NI-VISA操作Tektronix TBS 2000B系列示波器的实现步骤的详细内容,更多关于c# 操作Tektronix TBS 2000B系列示波器的资料请关注自由互联其它相关文章!一、概述
二、连接
三、安装驱动
四、引用
五、代码
附录、相关SCPI指令

