使用宏指令执行串口通讯
51单片机的串口通信程序(C语言)
51单片机的串口通信程序(C语言) 51单片机的串口通信程序(C语言)在嵌入式系统中,串口通信是一种常见的数据传输方式,也是单片机与外部设备进行通信的重要手段之一。
本文将介绍使用C语言编写51单片机的串口通信程序。
1. 硬件准备在开始编写串口通信程序之前,需要准备好相应的硬件设备。
首先,我们需要一块51单片机开发板,内置了串口通信功能。
另外,我们还需要连接一个与单片机通信的外部设备,例如计算机或其他单片机。
2. 引入头文件在C语言中,我们需要引入相应的头文件来使用串口通信相关的函数。
在51单片机中,我们需要引入reg51.h头文件,以便使用单片机的寄存器操作相关函数。
同时,我们还需要引入头文件来定义串口通信的相关寄存器。
3. 配置串口参数在使用串口通信之前,我们需要配置串口的参数,例如波特率、数据位、停止位等。
这些参数的配置需要根据实际需要进行调整。
在51单片机中,我们可以通过写入相应的寄存器来配置串口参数。
4. 初始化串口在配置完串口参数之后,我们需要初始化串口,以便开始进行数据的发送和接收。
初始化串口的过程包括打开串口、设置中断等。
5. 数据发送在串口通信中,数据的发送通常分为两种方式:阻塞发送和非阻塞发送。
阻塞发送是指程序在发送完数据之后才会继续执行下面的代码,而非阻塞发送是指程序在发送数据的同时可以继续执行其他代码。
6. 数据接收数据的接收与数据的发送类似,同样有阻塞接收和非阻塞接收两种方式。
在接收数据时,需要不断地检测是否有数据到达,并及时进行处理。
7. 中断处理在串口通信中,中断是一种常见的处理方式。
通过使用中断,可以及时地响应串口数据的到达或者发送完成等事件,提高程序的处理效率。
8. 串口通信实例下面是一个简单的串口通信实例,用于在51单片机与计算机之间进行数据的传输。
```c#include <reg51.h>#include <stdio.h>#define BAUDRATE 9600#define FOSC 11059200void UART_init(){TMOD = 0x20; // 设置定时器1为模式2SCON = 0x50; // 设置串口为模式1,允许接收TH1 = 256 - FOSC / 12 / 32 / BAUDRATE; // 计算波特率定时器重载值TR1 = 1; // 启动定时器1EA = 1; // 允许中断ES = 1; // 允许串口中断}void UART_send_byte(unsigned char byte){SBUF = byte;while (!TI); // 等待发送完成TI = 0; // 清除发送完成标志位}unsigned char UART_receive_byte(){while (!RI); // 等待接收完成RI = 0; // 清除接收完成标志位return SBUF;}void UART_send_string(char *s){while (*s){UART_send_byte(*s);s++;}}void main(){UART_init();UART_send_string("Hello, World!"); while (1){unsigned char data = UART_receive_byte();// 对接收到的数据进行处理}}```总结:通过以上步骤,我们可以编写出简单的51单片机串口通信程序。
数控机床编程中的宏指令使用技巧
数控机床编程中的宏指令使用技巧在数控机床编程中,宏指令是一种非常有用的工具。
宏指令可以帮助程序员简化复杂的编程过程,提高编程效率,并实现一些常用的功能。
下面将介绍数控机床编程中宏指令的使用技巧,以便程序员们能够更好地利用这一工具。
首先,宏指令的定义是非常重要的。
在使用宏指令之前,程序员需要清楚地定义宏指令的名称和参数。
宏指令的名称应当具有一定的描述性,能够表达出宏指令所实现的功能。
参数则是用于接收外部传入的数值或变量,在宏指令内部可以使用这些参数进行计算或操作。
其次,正确使用宏指令的关键是合理设置参数。
程序员需要根据具体的编程需求,选择合适的参数类型和参数个数。
参数类型可以包括整型、浮点型、字符串等,根据实际情况进行选择。
参数个数则取决于宏指令的功能和复杂程度,需要确保参数个数既能满足功能需求,又不过多导致编程复杂化。
另外,程序员在使用宏指令时需要注意宏指令的作用域。
宏指令可以设置为全局范围或局部范围。
全局范围表示宏指令可以在整个编程过程中使用,而局部范围表示宏指令仅在指定的程序段内有效。
根据实际需求,程序员需要选择合适的作用域,避免出现命名冲突或误用的情况。
此外,程序员在使用宏指令时还应考虑宏指令的可读性和重用性。
为了提高程序的可读性,宏指令的命名应当具有一定的规范性,易于理解和记忆。
此外,程序员可以使用注释来说明宏指令的具体功能和使用方法,方便他人理解和修改。
而为了提高宏指令的重用性,程序员可以将常用的功能模块封装为宏指令,以便在其他程序中复用,提高编程效率。
最后,程序员在使用宏指令时要考虑其安全性和稳定性。
宏指令中的代码应当经过严格的测试和验证,确保没有错误或潜在的问题。
此外,程序员应当尽量避免使用复杂的宏指令,以免导致程序崩溃或出现错误。
如果遇到问题,应及时调试和修改宏指令,确保程序的稳定运行。
总之,数控机床编程中的宏指令使用技巧对于提高编程效率和简化编程过程非常重要。
程序员们应当清楚地定义宏指令的名称和参数,并合理设置其作用域和参数。
触摸屏与单片机的通讯实现
触摸屏与单片机的通讯实现摘要:在当前的嵌入式设备中,触摸屏作为人机接口得到了广泛的应用。
文章讨论了基于HIT6600触摸屏模块与富士通16位单片机90F340串口通讯实现的软硬件设计。
关键词:HIT6600 90F340 触摸屏单片机1、引言随着后PC 时代的到来,嵌入式系统在信息家电、移动计算设备、网络设备、工业控制和仪器仪表等众多领域中得到了广泛的应用,在这些产品中,触摸屏因方便灵活、节省空间、直观等特点,已经逐渐取代键盘成为嵌入式计算机系统主流的输入设备。
触摸屏输入系统由触摸屏、触摸屏控制器、微控制器及其相应的驱动程序构成。
本文介绍触摸屏控制器与富士通16位单片机90f340串口通讯实现的软硬件设计。
2、触摸屏与单片机的硬件连接采用HIT6600触摸屏与90F340单片机一对多通信。
把触摸屏的COM1 9孔插座与串口通讯的90F340单片机相连接。
注意:通信电缆DB9是1-485的正极、6 -485的负极。
由于是一对多的通讯,所以增加串口通讯芯片MAX1487满足分机负载要求。
3、建立触摸屏与单片机通讯的软件设置打开触摸屏组态软件,从[应用]下拉菜单中选[设定工作参数],弹出如图1所示工作参数设置对话框。
触摸屏的系统参数中装置名称设置成ModBus Master,通信参数设置必需与单片机通信参数设置一致。
通信口/连线方式设置成COM1,数据位设置成8位,1个停止位,波特率9600,校验位设置与单片机编程一致,PLC站号是单片机定义的站地址一样,站号需从1开始。
参数设置完成,按确定键。
4、触摸屏的主态软件通讯设置编辑HIT6600触摸屏提供了一种既方便又功能强大的宏指令应用方式,使人机得以经由内部宏指令(Macro Function)功能执行数值运算,逻辑判断,流程控制,数值传递,数值转换,计时器计数器,自定通讯指令操作等等,由宏指令的使用可让人机不仅和PLC 连线通讯,同时由另一通讯口来执行同其他通讯设备连线,此功能不仅提供有效的系统整合同时成为最经济便宜的硬件应用架构。
协议宏串行通信
规格
RS232+RS422/485 RS232+总线接口 RS232x2 RS422/485+RS232 RS232x2 RS232+RS422/485 RS232x2 RS232+RS422/485 RS232x2
数量
1 1 1 1 16 16 1 1 16
CQM1H-CPU51/61 才能安装
CJ1 CS1
协议宏几个定义
通信序列:对于外场串行设备的 通信过程。可创建1000个序列。 步:在一个通信序列下,对外场 设备的发送/接收。一个通信序列 可创建16步。 报文:发送或接收的报文格式 (帧格式)。
通信序列的参数(一)
传输控制:
•RTS/CTS流控制:硬件 •XON/XOFF流控制:软件11hex/13hex •Contention 控制:在点对点Contention控制中 获得正确发送 •Delimiter控制:通过分隔符把数据分成若干 帧。 •Modem控制:DTR信号的控制 链接字: •在PLC和通信板/单元之间共享的字设定 •I1/O1、I2/O2。IN:接收数据存储;OUT:发送 数据存储
协议宏串行通信
一 、 串行通信基础知识
(一)基本概念
1.并行传输&串行传输
B
0 1
A
B
A
┋ 0 1
主要适用于长距离、低速 率的通信中
2.单工、半双工、全双工(i)
数据流向
单工
发送装置
接受装置
半双工
发送装置
数据流向1
接受装置
接受装置
数据流向2
发送装置
2.单工、半双工、全双工(ii)
数据流向1
发送装置 接受装置
自由口通讯
本章主要讲述在 SKWorkshop(以下简称 SK)组态软件中如何用宏指令编写 自由通讯协议。SK 的自由通讯协议编写主要运用了内部自带的两个函数:
PUTCHARS(发送数据函数)和 GETCHARS(接收数据函数)。编程人员运用这两个函数 可以很方便的编写自己的设备协议。
首先新建一个工程,命名为:自由口通讯;通讯连接设置连接接口:COM1;设备服务 选择:Samkoon NULL PLC(或者建立工程后在连接中更改),如图 3-1:
}
else
//接收正确
{
LW2=Gdata[0]&0xff;
//数据处理
LB0=0;//处理Fra bibliotek毕,下次进入时发送
PUTCHARS(0,Pdata,0);
//清除缓冲区
}
}
在变量设定表里面建立如下 4 个变量:
LB0:内部地址 LB0,BOOL,读写;
LW0:内部地址 LW0,16 位整数,写;
LW1:内部地址 LW1,16 位整数,写;
//所要发送的数据
Pdata[1]=0x02;
Pdata[2]=0x03;
Pdata[3]=0x04;
PUTCHARS(0,Pdata,4);
//发送函数,发送数据到串口
LB0=1;
//发送完毕,下次进入不发送,等待接收
return;
//退出等待接收
}
else
{
result=GETCHARS(0,Gdata); //接收函数,把接收到的数据存在 Gdata 数组中
图 3-2
图 3-3 下载工程至触摸屏,用串口线连接电脑与触摸屏。电脑端打开串口调试助手, 设置串口参数与触摸屏参数一致。连接成功以后在接收区接收到如图 3-4 所示代 码
宏指令使用手册
EasyBuilder 500 Macro使用说明一:文档说明作者 : 程志刚时间 : 2003年1月版权所有 : 台湾威纶科技有限公司概要 : 此文档为宏指令功能模块的使用文档,说明宏语言的语法,宏语言的使用,宏指令源程序编写的操作方法与操作顺序,使用文档包含以下几个部分:宏语言文本说明:宏语言使用说明宏指令程序与PLC的通信(包括本地地址LocalBit,LocalWord):宏指令操作说明有关宏指令使用的若干说明编译错误提示程序示例源程序二:宏语言文本说明:1: 常数与变量a:常量(1)十进制常量(2)十六进常数(3)单引号内的ASCII常量(字符常量)(4) 逻辑常量:True (非零),False(零)b:变量(a)变量命名必须以字每开头,其它字符可以是字每或数字,不得超过32个字符的长度(b) 数据类型(char) 字符类型(int) 整数类型 32-bit(short) 短整数类型 16-bit(float) 浮点数类型(bool ) 逻辑类型2: 运算符(1)赋值运算赋值运算: =(2)算术运算:加:+减:-乘:*除:/余:mod ,(3)关系运算:小于:<小于等于:<=大于:>大于等于: >=等于: ==不等于: <>(4)逻辑运算:逻辑于:And逻辑或:Or逻辑Xor逻辑非:Not(5)位运算:(a)移位运算左移: <<右移: >>(b)逻辑位运算位与运算: &位或运算: |位异或运算: ^位取反运算: ~3: 运算符的优先级:表达式中执行多个操作时,每一部分都按规定的顺序计算,这种运算符间的计算次序,叫运算符的优先级(1)同一种类运算符的优先顺序(按左到右,依次从高到低)算术运算符 : ^ Æ( * , / ) Æ ( mod ) Æ ( + , - )移位运算: 其出现的优先顺序,按在表达式中出现的次序从左到右进行处理关系运算符 : 其出现的优先顺序,按在表达式中出现的次序从左到右进行处理逻辑运算符 : Not Æ And Æ Or Æ Xor,(2)算术运算优先于位运算位运算优先于关系运算逻辑运算优先于赋值运算4: 数组(1)数组 :只支持静态一维数组,形式为:一维数组 : 数组名[数组的大小]数组的下标为整数其可取值区间为0 --- 4294967295下标最小值:零下标最小值:数组的大小 – 1如 : Array[MAX] MAX =100下标最小值 :0下标最小值:99 ( 100 – 1)5: 表达式(a) 运算对象(1)常量(2)变量(3)数组元素(4)函数调用(b) 表达式组成表达式由运算对象和运算符按一定规则组合而成6: 语句(1):说明语句(a) type name说明name的类型(b) type name[constant] 说明name类型的一维数组(2): 赋值语句形式为:变量 =表达式(3) 逻辑判断与分支(a) 单行形式If Condition Then [ Statements ] [ Else elseStatements ]End If(b) 块形式If Condition Then[ Statements ][ Else [If Condition – n Then[elseifstatements ] ….[ Else[ elsestatements ] ]] ]End If语法说明 :Condition 必要,为一条件表达式,条件表达式值为零,则视为假 FALSE,条件表达式值为非零,则视为真TRUEStatements 在块形式中是选参数,在单行形式中,且没有Else子句时,为必要参数,该语句在Condition为真是时执行Condition-n 可选,解释同Conditionelseifstatements 可选,一条或多条语句,在相对应的Condition – n为TRUE时执行Elsestatements 可选,在上述Condition和Condition—n都不为TRUE时执行(C) 多重分支选择 Select Case 语句Select Case TestExpression[Case expression –n[starements-n] ]……[Case Else[elsestatements ] ]End Select语法说明:TestExpression 必要,任何数值或字符串表达式Expression—n 如果有Case出现则为必要参数,为字符串或整形数值常量Statements—n 可选,为一条或多条语句,当TestExpression和对应的expression—n相等时,则执行Elsestatements 可选 , 为一条或多条语句,当TestExpression不和任一expression—n相等时,则执行(4)循环控制a)For –Next语句:常用于次数已确定的情况,当为To时,此时按步长递增,当为Down时,此时按步长递减For counter = start To(Down) end [Step step ][Statements ]Next [counter ]语法说明:Counter 必要,循环计数器的数值变量,该变量只能是整形或字符形变量Start 必要,Counter的初值End 必要,Counter的终值Step 可选 ,Counter的步长,如果没有指定,则缺省为1,只能是数值Statements 可选 ,For和Next之间的语句块,该语句块将执行指定的次数b)While – Wend语句由条件控制的循环,条件放置于循环顶部逻辑表达式值为TRUE或FALSE,当指定的条件为TRUE时,执行循环体中的语句块While condition[statements]Wend语法说明Condition 必要,逻辑表达式,其计算结果为TRUE或FALSE,condition为TRUE时执行循环体Statements 可选,为一语句块,当condition的值为TRUE时(5)break ;用于循环和条件选择语句中,执行到此语句时,退出循环或条件语句(6)continue用于循环,执行到此语句时,中断这一次循环的执行,到下一次循环执行(7)return函数返回语句7: 关键字集:宏语言规定的,用作特定的用途,不能作为函数名,数组名,变量名等的记号+ , - ,* , / ,^, mod, >= ,>, < ,<=, <> ,== ,And,Or,Xor,Not,<<,>>,= ,& ,|,^,~If ,Then,Else,EndIf,Select ,Case ,For, To, Down Step, Next, while, wend break ,continue,return三:宏语言使用说明1: 局部变量及全局变量(1:)局部变量: 在一个函数范围内有效,(2:)全局变量: 从定义或声明的地方开始到宏指令程序结束有效在一个函数内当有相同名称的全局变量与局部变量时,是局部变量有效2: 变量赋初值及常量(1:)变量赋初值(a)在声明语句中直接进行赋值值e.g: int h = 9(b) 在声明或定义后,用赋值语句进行变量的赋初值(2:)数组变量的赋初值形式如: int g[10] = { 1,2,3, , 3 }初值用花括号括起来, 各数组分量用分号隔开,从左到右赋按数组下标从零开始的顺序赋给各数组分量,(3:)常量 :宏语言支持:十进制整形常量十六进制整形常量以0x开头字符形常量,逻辑常量 : True 代表真, False代表假 ,3: 逻辑变量及表达式(1:)逻辑变量:它有真(True),假(False)两种取值的情况,所有非零的值认为是真(True),零值认为是假(False)(2:)表达式:条件表达式的值为零值即为假,代表条件不成立,条件表达式的值为非零值即为真,代表条件成立4: 声明语句(1:)声明语句在函数外声明或定义全局变量,(2:)声明语句在函数内声明或定义局部变量,同时局部变量声明语句在函数内的最前面,其间不能有其它的语句,否则会给出编译错的提示For example :Macro_Command main( )char i ,i = 9//在声明语句间的非声明语句,将给出编译错的提示int g[10]For g[2] = 0To2g[3] = 4Next g[2]End Macro_Command5: 函数调用及参数传递方式(1:)函数调用:被调用的函数须在调用函数的前面定义,否则将给出函数没有定义的编译错提示For example :Macro_Command main( )int i ,i = Func( i ) //将给出函数Func没有定义的编译错误提示End Macro_CommandSub int Func( int i )int h = 9i = 9 * hReturn iEnd Sub(2:)参数传递方式:(a)通过局部变量传值的方式传递参数(b)通过函数间共享全局变量的方式传递参数6: 主函数宏指令源程序有且只能有一个主函数, 它是宏指令程序开始执行的入口,其形式为: Macro_Command 函数名( )End Macro_Command四: 宏指令程序与PLC的通信(包括本地地址LocalBit,LocalWord):功能: 使用库函数实现与Plc的沟通在宏指令程序的计算与控制中当Plc地址类型的变量参与时,就通过库函数GetData( … )从EasyView連接的Plc中取数据,通过库函数SetData( … )把结果数据送到EasyView連接的Plc 中,这样就把处理plc信息的繁杂工作交给了GetData( … )与SetData( … )等库函数1: GetData(各种支持的数据类型 DestData, CString strAddr_Type, int iAddr_Off, int iDataCount )说明:实现从Plc中取数据,通过对话框填表的形式输入参数说明:DestData 得数据的首址CString strAddr_Type Plc地址类型和编码方式int iAddr_Off Plc地址偏移int iDataCount 数据项数返回值: 没有2: SetData(各种支持的数据类型DestData ,CString strAddr_Type , int iAddr_Off , int iDataCount )参数说明:DestData 送出去数据的首址CString strAddr_Type Plc地址类型和编码方式int iAddr_Off Plc地址偏移int iDataCount 数据项数返回值: 没有五:宏指令操作说明1: 宏指令程序的编写分三步进行,第一步:在EB500主界面中启动宏指令功能模块的第一个对话框(MacroControlDlg)第二步:在MacroControlDlg对话框中进行宏指令间的拷贝,删除,编辑,调用MacroWorkSpaceDlg对话框进行宏指令源程序的编辑,第三步:宏指令源程序的编辑,确定一条宏指令的名称,编号,编译,及排除编译错误2: 宏指令源程序通信函数的编辑方法(1:)输入:(第一步:) 在宏指令源程序要输入库函数的地方,输入关键字:”Insert”{ 或者把光标置于要输入库函数的地方,后呼叫PlcCom按钮,}(第二步:) 在库函数编辑对话框,进行库函数的选择和库函数参数的设置,按Ok按钮完成此次库函数的输入,按Cancel按钮取消此次输入操作(2:)修改:将光标置于要修改的库函数上对其进行修改,按(1:)的第一步,第二步操作即可(3:)删除:把要删除的库函数选定,在键盘上按Delete键即可将其删除3:宏指令触发条件的确定.见图”Trigger(Macro).bmp” (第一步:) 在PlcControl物件属性对话框中选择控制类型为Execute MacroProgram,(第二步:) 在PlcControl物件属性对话框中选择一个MacroID并确定一个触发位六:有关宏指令使用的若干说明(1:)宏指令程序存储空间的限制一个eob档中所有宏指令存储空间受公共窗口0空间大小的限制,同时一个宏指令程序中的局部变量存储空间最大为4k,(2:)最多可能执行的宏指令条数的限制一个eob档中最多可以使用256条宏指令程序.(3:)宏指令可能出现的死机情况宏指令程序中有死循环,且死循环中没有通信时.宏指令程序中数组数据使用,存储空间越界时.(4:)宏指令程序通信时的速度.宏指令程序在有通信时,它的执行可能会有点慢.这是由于通信占用太多的时间所造成的.七:编译错误提示1:错误提示形式:宏指令名称(: 编译错误编号 ) 错误提示当编译没有通过时,可以通过编译错误编号,查找对错误的说明2:错误描述:(1: ) "语法错:" “'identifier'很多种情况会给出这条编译错误的提示,For example :Macro_Command main( )char i ,程 //这是一个不支持的记号 ,”错误提示为: “语法错: 程”int g[i] //定义错For g[2] = 0To2g[3] = 4Next g[2]End Macro_Command出现这条错误提示时,一般都是多了,或少了一个符号,很容易改正错误(2:) 'identifier' :" 数组没有被指定大小" ;只支持静态数组,定义数组变量时,必须指定数组的大小For example :Macro_Command main( )char iint g[i]//定义错For g[2] = 0To2g[3] = 4Next g[2]End Macro_Command(3:) strError = "重定义错: " 'identifier'函数,变量名字在其作用域内必须是唯一的,For example :Macro_Command main( )int g[10] , gFor g[2] = 0To2g[3] = 4Next g[2]End Macro_Command(4:) "函数名错:" 'identifier'关键字,常量等不能用作函数名For example :Macro_Command If( )int g[10] , gFor g[2] = 0To2g[3] = 4Next g[2]End Macro_Command(5:) "括号不配对" ;左括号,右括号不成对出现For example :Macro_Command main ) //少左括号int g[10] , gFor g[2] = 0To2g[3] = 4Next g[2]End Macro_Command(6:) "If后没有表达式" ;(7:) "If语句没有Then" ;(8:) "没有EndIf语句" ;(9:) End If前面没有出现配对的If" ;(10:) "非法的Else语句" ;If语法结构为:If 条件表达式Then[ Else [If 条件表达式Then ] ]EndIf不服合这种表达形式的If选择语句都是不合法的,将给出对应的编译错(11:) "Case后面应为常量" ;(12:)"Select后少Case关键字" ;(13:)"Select Case 后少表达式" ;(14:)"没有End Select语句(15:) 非法的Case语句" ;(16:)"End Select前面没有出现配对的Select" ;Select Case语法结构为:Select Case 表达式Case 数值常量Case 数值常量Case 数值常量Case ElseEnd Select不服合这种表达形式的Select Case选择语句都是不合法的,将给出对应的编译错(17:)"For循环不配对,Next前应有For关键字" ;(18:)"此处应为整型或字符型变量" ;(19:) "此处应为赋值号" ;(20:)"此处应为关键字To" ;(21:)"没有 Next 语句" ;For循环语法结构为:For 变量 =初值 To 终值 [Step 步长]Next [变量]不服合这种表达形式的For循环语句都是不合法的,将给出对应的编译错(22:)"While循环不配对,Wend前应有While关键字" ;(23:) 没有 Wend 语句" ;While循环语法结构为:While 条件表达式Wend不服合这种表达形式的While循环语句都是不合法的,将给出对应的编译错(24:) "break语句非法" ;Break语句只能在For循环,While循环 ,Select Case选择结构中使用且Break单独成一语句行(25:)"Continue语句非法" ;Continue语句只能在For循环, While循环中使用且Continue单独成一语句行(26:)"表达式不正确" ;(27:) 运算对象非法" ;在表达式中出现与运算符不匹配的运算对象时,将给出此编译错For example :Macro_Command main( )int g[10] , gFor g[2] = 0To2g[3] = 4 + 程Next g[2]End Macro_Command(28:)"此处应为Sub" ;(29:) "此处应为Macro_Command " ;函数的定义形式为:Sub(Macro_Command) 数据类型函数名( … )End Sub(Macro_Command)不服合这种形式的函数定义,将给出对应的编译错误(30:)"参数个数不对" ;(31:)"实参数据类型不匹配" ;(32:)"实参不对";函数调用时,实参与形参必须在数据类型,参数个数上一一对应才能编译通过否则将给出对应的编译错(33:) "没有定义的函数:" ;(34:)数组分量表达形式非法(35:)数组定义非法";(36)数组下标非法的表示,将给出对应的编译错(37:) "没有定义,或声名的变量" ;只能使用已经定义了的或声名了的变量和函数,否则将给出对应的编译错(38:) "不支持的plc地址类型" ;库函数GetData( … ) , SetData( … )的参数中有plc地址类型信息,当plc地址类型不是此种plc支持的地址类型时,将给出对应的编译错(39:) 应为整型,字符形变量或常量" ;数组的表达形式为:定义时: 数组名[常量] (常量描述数组的大小)使用时: 数组名[整形,字符形变量或常量]不服合这种表达形式(40:) "变量定义或声名语句的前面不能有执行语句"For example :int g[10For g[2g[3] = 4int h , kNext g[2]End(41:) "移位运算中,操作数不能为浮点数"(42:) "函数应返回一个值" ;(43) "函数不应返回一个值"(44:) "运算中不能有Float型数据" ;(45:) "plc地址错" ;(46:) "堆栈不能超过4k" ;(47:)"宏指令程序入口只能有一个" ;(48) "宏指令入口函数不唯一: " 'identifier'宏指令的入口函数只能有一个,形式为:Macro_Command 函数名( )End Macro_Command八:程序示例源程序1: For循环,各种表达式(算术,移位,逻辑,关系表达式) Macro_Command main( )int a[10]int b[10]int ib[0]= (400 + 400 << 2) / 401b[1]= 22 *2 - 30 % 7b[2]= 111 >> 2b[3]= 403 > 9 + 3 >= 9 + 3 < 4 + 3 <= 8 + 8 == 8 b[4]= Not8 + 1And2 + 1Or0 + 1Xor2b[5]= 405And3And Not0b[6]= 8 & 4 + 4 & 4 + 8 | 4 + 8 ^ 4b[7]= 6 - ~ 4b[8]= 0x11b[9]= 409For i = 0To4Step 1If( a[0] == 400 ) ThenGetData(a[0] ,3x_Bin ,0,9)SetData(b[0] ,3x_Bin ,11,10)End IfNextEnd Macro_Command2: while ,if , break , continueMacro_Command main( )int a[10]int b[10]int ib[0]= (400 + 400 << 2) - 401 + 99 b[1]= 100b[2]= 111b[3]= 403b[4]= 404b[5]= 405b[6]= 406b[7]= 407b[8]= 400 % 20 + 21b[9]= 409i = 5While i == 5 - 20 % 3SetData(b[1] ,3x_Bin ,11,1) If b[1] == 100ThenBreakSetData(b[0] ,3x_Bin ,12,1)i = 4ContinueSetData(b[0] ,3x_Bin ,13,1) End IfWendEnd Macro_Command3: 全局变量,函数调用char gSub int sin(int j ,int k)int ySetData(j ,3x_Bin ,14,1)GetData(y ,3x_Bin ,15,1)g = yReturn yEnd SubMacro_Command main( )int a[10]int b[10]int ib[0]= (400 + 400 << 2) - 401 + 99 b[1]= 100b[2]= 111b[3]= 403b[4]= 404b[5]= 405b[6]= 406b[7]= 407b[8]= 400 % 20 + 21b[9]= 409i = 5While i == 5 - 20 % 3SetData(b[1] ,3x_Bin ,11,1)If b[1] == 100ThenSetData(b[0] ,3x_Bin ,12,1)i = sin(b[2],b[3] )SetData(g ,3x_Bin ,17,1) SetData(i ,3x_Bin ,16,1)End IfWendEnd Macro_Command4: 控制自已char iint jSub ClientProgram(int flag)End SubMacro_Command main( )int i[10]int j[2]int wchar xFor w = 0To9i[w] = 0NextGetData(i[0] ,3x_Bin ,1,4)w = i[0] + i[1] + i[2] + i[3]If w > 150ThenFor w = 0To3i[w] = 0NextSetData(i[0] ,3x_Bin ,1,4)x = 0SetData(x ,1x_Bin ,3,1)GetData(i[0] ,3x_Bin ,212,2)x = 0SetData(x ,0x_Bin ,4,1)ElseFor w = 0To3i[w] = i[w] + 2*wNextSetData(i[0] ,3x_Bin ,1,4)End IfEnd Macro_Command5: If结构Macro_Command main( )int K[10]int jFor j = 0To10k[j] = jNextEB500 Macro 使用说明If k[0] == 0ThenSetData(k[4],3x_Bin ,0,1)End IfIf k[0] == 0ThenSetData(k[4],3x_Bin ,0,1)ElseSetData(k[5],3x_Bin ,0,1)End IfIf k[1] == 0ThenSetData(k[3],3x_Bin ,1,1)Else If k[1] == 1ThenSetData(k[1],3x_Bin ,2,1)End IfIf k[1] == 0ThenSetData(20,3x_Bin ,3,1)Else If k[1] == 2ThenSetData(k[1],3x_Bin ,4,1)ElseSetData(k[2],3x_Bin ,5,1)End IfEnd Macro_Command6: Select结构Macro_Command main( )int K[10]int jFor j = 0To10k[j] = jNextSelect Case k[1]Case1j = 1BreakCase2j = 2BreakEnd SelectSetData(j,3x_Bin ,0,1)End Macro_CommandMacro_Command main( )int K[10]int jj = 90 * 1k[4] = 8Select Case k[4]Case1j = 1BreakCase3j = 2EB500 Macro 使用说明End SelectSetData(j,3x_Bin ,0,1)End Macro_Command7: while结构Macro_Command main( )char Toggleflagint a[13]int b[14]int c = 4848char i = 0b[0] = 13While b[0]a[i] = 20 + i * 10If a[i] == 120Thenc =200BreakEnd Ifi = i + 1WendSetData(c ,3x_Bin ,2,1)End Macro_CommandMacro_Command main( )int a[250]int b[250]int i = 1a[0] = 1b[0] = 2While a[0]While b[0]b[i ] = 10 + i * 10If b[i] == 210ThenSetData(i ,3x_Bin ,0,2)b[i] = 200BreakEnd Ifi = i + 1WendIf b[i] == 200ThenSetData(b[0] ,3x_Bin ,0,4)BreakEnd IfSetData(b[0] ,3x_Bin ,0,3)WendEnd Macro_CommandMacro_Command main( )int K[10]int j ,ij = 0EB500 Macro 使用说明i = 0While k[i]k[j] = j + 1j = j + 1If j == 5ThenBreakEnd IfSetData(k[0],3x_Bin ,0,5)End Macro_Command8: Break ,Continue结构(1)Macro_Command main( )int K[10]int jFor j = 0To10If j % 2 == 0Thenk[j] = 5ElseBreakEnd IfNextSetData(k[0],3x_Bin ,0,10)End Macro_Command(2)Macro_Command main( )char Toggleflagint a[13]int b[14]int c = 4848char i = 0b[0] = 13While b[0]a[i] = 20 + i * 10If a[i] == 120Thenc =200i = i + 1ContinueEnd Ifi = i + 1If c == 200ThenSetData(c ,3x_Bin ,2,1)BreakEnd IfWendEnd Macro_Command9: 数组结构Macro_Command main( )int a[25]int b[25]int ib[0] = 13For i = 0To b[0] Step1a[i] = 20 + i * 10NextSetData(a[0] ,3x_Bin ,0,13)End Macro_Command10: 其它int x = 0int yfloat fSub char func1()char Toggleflagint a[14]int b[14]int c = 4848char ib[0] = 13Toggleflag = ( b[0] Xor0x89 + (100 /2) << 2 - 123 >> 2 ) If (b[0] Xor0x89 + (100 /2) << 2 - 123 >> 2) == 0Then SetData(Toggleflag ,3x_Bin ,0,1)End IfToggleflag = 1b[0] = 13For i = 0To b[0] Step1a[i] = 20 + i * 10NextIf i < b[0] - 1ThenGetData(a[0] ,0x_Bin ,0,1)If a[0] <> 1ThenEnd IfElseSetData(c ,3x_Bin ,2,1)End IfWhile1If Toggleflag == 1ThenBreakEnd IfWendReturn ToggleflagEnd SubMacro_Command main( )int a[250]int b[250]int iGetData(a[0] ,3x_Bin ,2,2)a[0] = a[0] + 5a[1] = a[1] + 5If a[0] >= 150Thena[0] = 5End IfIf b[0] >= 100Thenb[0] = 5End Iffunc1() == 1End Macro_Command11: 死循环(1)Macro_Command main( )int a[250]int b[250]int i = 1a[0] = 1b[0] = 2While a[0]While b[0]b[i ] = 10 + i * 10If b[i] == 210ThenSetData(i ,3x_Bin ,0,2)b[i] = 10BreakEnd Ifi = i + 1WendIf b[i] == 200ThenSetData(b[0] ,3x_Bin ,0,4) BreakEnd IfSetData(b[0] ,3x_Bin ,0,3)WendEnd Macro_Command(2)Macro_Command main( )char Toggleflagint a[13]int b[14]int c = 4848char i = 0b[0] = 13While b[0]a[i] = 20 + i * 10If a[i] == 120Thenc =200ContinueEnd Ifi = i + 1If c == 200ThenSetData(c ,3x_Bin ,2,1)BreakEnd IfWendEnd Macro_Command12: 死机int x = 0int yfloat fSub func0()If y == 1Theny = 2Else If y == 3ThenReturnEnd IfEnd SubSub char func1()char Toggleflagint a[10]int b[10]int c = 4848char ib[0] = 13For i = 0To b[0] Step1a[i] = 20 + i * 10NextIf i < b[0] - 1ThenGetData(a[0] ,0x_Bin ,0,1)If a[0] <> 1ThenEnd IfElseSetData(c ,3x_Bin ,2,1)End IfToggleflag = 0If (b[0] Xor0x89 + (100 /2) << 2 - 123 >> 2) > 0Then GetData(Toggleflag ,0x_Bin ,0,1)End IfWhile1If Toggleflag == 1ThenBreakEnd IfWendReturn ToggleflagEnd SubMacro_Command main( )int a[250]int b[250]int iEB500 Macro 使用说明 GetData(a[0] ,3x_Bin ,2,2)a[0] = a[0] + 5a[1] = a[1] + 5If a[0] >= 150Thena[0] = 5End IfIf b[0] >= 100Thenb[0] = 5End IfIf func1() == 1ThenSetData(a[0] ,3x_Bin ,2,2)End IfEnd Macro_Command。
瓦萨变频器通讯协议新串口通讯协议_SUN
驱动器内部设 0~0xff 0~255 对应变频器的内部参数号码
定参数
(F000~F255)
驱动器内部控 0x2000 8192 控制指令 制参数
0x2001 8193 设置频率
驱动器内部状 0x2100 8448 运行频率 态参数
0x2101 8449 输出电流
0x2102 8450 直流母线电压
址。
nnn
:参数号码为三位数“nnn”,参数号码由000~255。
tt :回复参数之小数点类型。
tt=4,特殊类型整数
tt=3,两位小数
tt=2,一位小数
tt=0,整数
ddddd :回复之参数值(00000~65535)。
s
:回复变频器输出状态。
s=1,变频器逆转输出中。
s=2,变频器正转输出中。
s=3,变频器停止。
Low CRC CHK(校验)
High END
n×8-bit数据内容(n<=25)
CRC校验值值 大于10 ms的间隔时间
ADR(通讯地址) 合法的通讯地址范围在 0 到 99 之间。通讯地址为 0 表示对所有 变频器进行广播,在此情况下,变频器将不会发送回复信息。通讯对应 的地址规定如下:
项目
地址 功能说明 (Hex/Dec)
通讯界面
说明
T=0
Ascii通讯模式,RS232
T=1
Ascii通讯模式,RS485
T=2
Modbus RTU通讯模式,RS232
T=3
Modbus RTU通讯模式,RS485
3. 通讯格式设定说明如下:
通讯格式
说明
F=0
2400bps, 7Databits, Even Parity,2Stopbits
MATLAB串行通信的实现方法
MATLAB串行通信的实现方法1.硬件串口通信方法硬件串口是计算机与外部设备(如传感器、微控制器等)之间进行数据传输的接口。
要使用硬件串口进行通信,首先需要连接计算机和外部设备。
接下来,可以按照以下步骤在MATLAB中实现串行通信:步骤1:确定串口参数使用MATLAB提供的命令`instrhwinfo('serial')`来查看计算机上可用的串行端口和其相关信息。
根据需要,选择合适的串口参数,包括波特率、数据位、停止位和校验位等。
步骤2:创建串行端口对象使用`serial`函数创建一个串行端口对象,并指定串口号和参数。
例如,`s = serial('COM1', 'BaudRate', 9600)`将创建一个串行端口对象s,并设置波特率为9600。
步骤3:打开串口使用`s`对象的`fopen`函数打开串口连接。
例如,`fopen(s)`将打开与外部设备的串行通信连接。
步骤4:收发数据使用`s`对象的`fread`和`fwrite`函数进行数据的接收和发送。
例如,`data = fread(s, n)`将从串口接收n个字节的数据并存储在变量`data`中,`fwrite(s, data)`将发送变量`data`中的数据到串口。
步骤5:关闭串口`fclose(s)`将关闭串行通信连接。
2.虚拟串口通信方法虚拟串口是一种通过软件模拟的串口,可以在计算机上模拟硬件串口的功能。
使用虚拟串口进行通信时,不需要实际的硬件设备,只需要安装虚拟串口软件即可。
以下是使用虚拟串口进行通信的方法:步骤1:安装虚拟串口软件步骤2:创建虚拟串口对在虚拟串口软件中创建一个虚拟串口对,一个作为发送端口,一个作为接收端口。
将发送端口与接收端口进行连接。
步骤3:创建串行端口对象使用`serial`函数创建一个串行端口对象,并指定虚拟串口对的接收端口。
例如,`s = serial('COM3', 'BaudRate', 9600)`将创建一个串行端口对象s,并设置波特率为9600。
数控机床编程中的宏指令使用技巧
数控机床编程中的宏指令使用技巧在数控机床编程中,宏指令是一种非常有用的功能,它可以帮助程序员简化代码,提高编程效率。
本文将介绍数控机床编程中的宏指令使用技巧,帮助读者更好地掌握和应用宏指令。
首先,我们先了解一下宏指令的基本概念。
宏指令是由一系列的机床指令组成的一个整体,可以在程序中调用。
通过使用宏指令,可以实现代码的复用,简化编程过程。
宏指令的定义通常可以放在程序的开头或者单独的文件中,方便统一管理和调用。
在使用宏指令时,需要注意以下几点技巧。
首先是宏指令的命名,推荐使用具有描述性的名称,能够清楚地表达宏指令的功能。
例如,如果定义了一个宏指令用于控制加工速度,可以将其命名为“SPINDLE_SPEED”。
这样,其他人阅读代码时就可以直观地理解宏指令的作用。
其次,宏指令中可以包含参数,通过参数可以实现宏指令的定制化。
在定义宏指令时,可以使用占位符表示参数的位置。
在调用宏指令时,需要提供具体的参数值。
举个例子,如果定义了一个宏指令用于控制加工尺寸,可以将其定义为“MACHINING_SIZE(X, Y, Z)”形式。
在调用宏指令时,需要提供具体的X、Y、Z 数值。
另外,注意宏指令的使用时机。
宏指令可以在程序的任意位置调用,但需要保证宏指令在被调用之前已经定义。
因此,在使用宏指令之前,最好先确认宏指令是否已经定义,并且定义的位置是否在调用之前。
此外,宏指令可以嵌套使用,通过嵌套,可以实现更加复杂的功能。
在嵌套的过程中,需要注意宏指令之间的参数传递。
如果宏指令A中调用了宏指令B,需要确保宏指令A和宏指令B之间的参数传递是正确的,以避免出现错误的结果。
另外,宏指令的调试也是非常重要的。
当宏指令产生错误或者不符合预期时,需要对宏指令进行调试。
在调试过程中,可以使用调试工具,如模拟器,来跟踪宏指令的执行过程,找出问题所在。
此外,还可以使用打印输出等方式,输出宏指令中的过程变量值,以便更好地了解程序的执行流程。
visualbasic串口通信及编程实例
visualbasic串口通信及编程实例Visual Basic串口通信及编程实例在实际的工业控制、机器人控制、智能家居等领域中,使用串口通信是一种非常广泛的方式。
Visual Basic (VB) 是一种微软公司开发的高级编程语言,它不仅易于学习,而且拥有丰富的图形界面设计和数据处理功能。
在本篇文章中,我们将深入介绍如何使用VB实现串口通信。
1. 建立串口通信首先,我们需要在VB中创建一个新的窗口(Form),然后打开工具箱,从中拖拽出一个SerialPort(串口)控件。
在控件属性中,我们需要为其指定相关的参数,例如串口名称、波特率、数据位、停止位、校验位等。
通常情况下,这些参数需要根据硬件设备的配置来进行调整。
在VB中实现串口通信的核心部分是对于SerialPort控件的事件监控。
具体来讲,当SerialPort收到一个数据包时,它会触发一个DataReceived事件。
对于这个事件,我们可以在程序中编写回调函数进行处理。
例如:Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e AsSystem.IO.Ports.SerialDataReceivedEventArgs) HandlesSerialPort1.DataReceived'在这里实现对于数据包的解析和处理End Sub2. 数据读取和发送在SerialPort控件中,有几种方法可以实现数据的读取和发送。
下面我们将介绍其中两种方法:(1) ReadExisting这个方法可以从串口中读取所有现有的数据,例如:Dim data As String = SerialPort1.ReadExisting()(2) Write这个方法可以向串口发送数据,例如:SerialPort1.Write("Hello World")注意,这个函数只能发送字符串数据。
VBA的妙用:串口通讯程序与EXCEL相结合
VBA的妙用:串口通讯程序与EXCEL相结合1 VBA简介Visual Basic的应用程序版(VBA)是Microsoft公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft 可编程应用软件所共享。
在没有VBA以前,一些应用软件如Excel、Word、Access、Project等都采用自己的宏语言供用户开发使用,但每种宏语言都是独立的,需要用户专门去学习,它们之间互不兼容,使得应用软件之间不能在程序上互联。
拥有一种可跨越多个应用软件,使各应用软件产品具有高效、灵活且一致性的开发工具是至关重要的。
VBA作为一种新一代的标准宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序设计人员仅需学习一种统一的标准宏语言,就可以转换到特定的应用软件上去,程序设计人员在编程和调试代码时所看到的是相同的用户界面,而且VBA与原应用软件的宏语言相兼容,以保障用户在代码和工作上的投资。
有了VBA以后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。
2 串口通讯程序简单的串口通讯程序一般是先由上位机向下位机发送读(write)或写(read)数据命令,然后等待下位机应答;下位机接受到命令之后,首先要对数据命令进行校验,对于符合校验约束的命令下位机会将相应的数据回复到上位机,对于不符合校验约束的命令下位机或将其抛弃或回复错误信息;上位机接收到下位机的响应之后,首先要对接收到的回复信息进行校验,对不符合校验约束的数据进行异常处理,对符合校验约束的信息进行解码,解码之后的信息便是上位机从下位机获得的有效信息了。
上位机向串口发送读命令之后需要等待下位机应答并读取回复信息,常用的等待有3种方式:1)轮询式上位机向串口发送读命令之后一直等待下位机应答,通讯程序处于一个等待循环中。
优点:速度快、误码率低(几乎不存在误码)。
威纶通触摸屏宏指令getdata和setdata函数的使用方法
威纶通触摸屏宏指令getdata和setdata函数的使用方法下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, suchas educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!威纶通触摸屏是一款广泛应用于各类电子设备中的触摸屏产品,其功能强大且灵活,为开发者提供了丰富的接口和指令,以满足不同场景下的需求。
串口通讯的原理、代码实现及注释
串口通讯的原理、代码实现及注释串口通讯是一种很常用的通讯方式,用的电缆数量少、操作简单。
下面来看一下串口通讯的定义、原理及基于stm32的代码实现(带注释便于理解)。
具体内容如下:一、通信接口处理器与外部设备通信的两种方式:并行通信:-传输原理:数据各个位同时传输。
-优点:速度快-缺点:占用引脚资源多串行通信:-传输原理:数据按位顺序传输。
-优点:占用引脚资源少-缺点:速度相对较慢串行通信,按照数据传送方向,分为:单工:数据传输只支持数据在一个方向上传输半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。
串行通信的通信方式:**同步通信:**带时钟同步信号传输。
如:SPI,IIC通信接口**异步通信:**不带时钟同步信号。
如:UART(通用异步收发器),单总线常见的串行通信接口:二、STM32的串口通信接口UART:通用异步收发器(universal asynchronous receiver and transmitter)USART:通用同步异步收发器(universal synchronous asynchronous receiver and transmitter)其中:通用同步异步收发器(USART)小容量产品:是指闪存存储器容量在16K至32K字节之间的STM32F101xx、 STM32F102xx和STM32F103xx微控制器。
中容量产品:是指闪存存储器容量在64K至128K字节之间的STM32F101xx、 STM32F102xx和STM32F103xx微控制器。
大容量产品:是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。
互联型产品:是指STM32F105xx和STM32F107xx微控制器。
威纶通485宏指令-概述说明以及解释
威纶通485宏指令-概述说明以及解释1.引言1.1 概述威纶通485宏指令是一种基于威纶通485通信协议的特殊指令集,用于控制和管理与威纶通485设备的通信和数据传输。
宏指令可以通过编程的方式在主机控制设备中运行,以有效地完成各种任务和操作。
威纶通485宏指令被广泛应用于物联网、工业自动化、楼宇自控、环境监测等领域。
通过使用宏指令,用户可以轻松地实现对威纶通485设备的监控、控制和数据采集。
无论是单个设备还是大规模设备网络,威纶通485宏指令都提供了可靠和高效的解决方案。
此外,威纶通485宏指令还具备灵活性和扩展性,用户可以根据实际需求自定义宏指令,实现更加复杂和精细的控制和操作。
这使得宏指令成为了威纶通485设备与其他设备、系统和平台实现无缝集成和互通的桥梁。
本文将介绍威纶通485宏指令的定义、作用、使用方法以及其在不同应用场景中的优势。
通过深入理解和掌握威纶通485宏指令,读者将能够更好地应用宏指令来提高设备控制和管理的效率以及拓展设备应用的领域。
同时,本文还将展望威纶通485宏指令未来的发展趋势,以期为读者提供有价值的信息和参考。
1.2 文章结构本文主要围绕威纶通485宏指令展开讨论,通过以下几个部分进行阐述和分析。
1. 引言:- 在引言部分,我们将对威纶通485宏指令的概述进行介绍,包括其定义、作用和重要性。
- 然后,我们将简要说明本文的结构和目的,以便读者能够更好地理解和阅读后续内容。
2. 正文:- 正文部分将分为三个小节,详细探讨威纶通485宏指令的定义、使用方法、优势和应用场景。
- 在2.1节中,我们将解释威纶通485宏指令的定义和作用,帮助读者全面了解其基本概念和功能。
- 在2.2节中,我们将详细介绍威纶通485宏指令的使用方法,包括指令的结构和参数的设置方式。
- 在2.3节中,我们将深入探讨威纶通485宏指令的优势和应用场景,从不同的角度分析其价值和适用性。
3. 结论:- 结论部分将对威纶通485宏指令的重要性进行总结,强调其在现代通信领域的实际应用和作用。
繁易触摸屏宏指令写外部数据
繁易触摸屏宏指令写外部数据摘要:一、引言二、繁易触摸屏宏指令概述三、外部数据写入的原理与方法四、实际应用案例五、总结正文:【引言】随着科技的快速发展,自动化设备在各行各业中得到了广泛应用。
繁易触摸屏作为一种人机交互界面,通过编写宏指令可以实现设备的精确控制。
本文将详细介绍如何使用繁易触摸屏宏指令写外部数据。
【繁易触摸屏宏指令概述】繁易触摸屏宏指令是一种基于设备通讯协议的控制指令,可以实现对设备的批量操作和复杂逻辑控制。
通过编写合适的宏指令,用户可以简化操作流程,提高工作效率。
【外部数据写入的原理与方法】外部数据写入是指将数据从触摸屏设备传输到其他外部设备或存储器中。
繁易触摸屏支持多种通讯方式,如串口通信、以太网通信等。
用户可以根据实际需求选择合适的通讯方式,编写相应的宏指令实现数据传输。
1.串口通信:串口通信是设备间最基本的通讯方式,可以通过RS-232 或RS-485 等串口协议实现数据传输。
在繁易触摸屏中,用户可以利用“发送串口数据”指令将数据发送至外部设备。
2.以太网通信:以太网通信是一种高速、远距离的通讯方式,适用于设备间大量数据的传输。
在繁易触摸屏中,用户可以利用“发送以太网数据”指令将数据发送至外部设备或服务器。
【实际应用案例】某生产线上,需要将触摸屏设备采集到的产品信息(如产品编号、生产时间等)传输至上位机系统进行数据统计和分析。
此时,用户可以编写如下宏指令实现数据传输:```// 初始化串口通信初始化串口。
// 循环读取触摸屏上的数据当触摸屏上数据发生变化时,执行以下操作:// 将数据发送至串口发送串口数据:“产品编号:” + 产品编号,逗号分隔。
发送串口数据:“生产时间:” + 生产时间,逗号分隔。
// 等待外部设备回应等待外部设备回应:“接收成功”。
```【总结】本文详细介绍了如何使用繁易触摸屏宏指令实现外部数据写入。
用户可以根据实际需求选择合适的通讯方式,编写相应的宏指令实现数据传输。
使用宏指令执行串口通讯
使⽤宏指令执⾏串⼝通讯Operation Manual of PanelMaster使⽤宏指令执⾏串⼝通讯Neomate Technologies Inc.串⼝是计算机上⼀种⾮常通⽤的通讯协议,同时也是⼤多数仪器仪表设备的通⽤通讯协议。
在触控屏应⽤程序的开发中,我们常常需要⾯临与外围数据源设备通信的问题。
除了触控屏软件PanelMaster⾃带的许多驱动之外,我们也可以设计相应的串⼝通信程序,完成⼆者之间的数据通信任务。
串⾏端⼝的本质功能是作为CPU和串⾏设备间的编码转换器。
当数据从 CPU经过串⾏端⼝发送出去时,字节数据转换为串⾏的位。
在接收数据时,串⾏的位被转换为字节数据。
引脚功能说明缩写1 数据载波检测 DCD2 接收数据 RXD3 发送数据 TXD4 数据终端准备 DTR5 信号地 GND6 数据设备准备好 DSR7 请求发送 RTS8 清除发送 CTS9 振铃指⽰ DELL串⼝主要信号线定义电⽓特性:数据传输速率最⼤可到20K bps,最⼤距离仅15m,⼀般在9600 bps,可以满⾜通讯需求。
PV提供了最通⽤的串⼝通讯服务General Device(COM)。
使⽤串⼝通讯需选择服务General Device(COM),设置为我们假设两台屏之间的串⼝通讯.接线图如下:A触控屏的连接设置为:B触控屏的连接设置为:由此可以看出,触控屏A是通过COM1和屏B的COM2进⾏通讯的,它们都使⽤PanelMaster的General Device(COM)服务。
要使⽤宏指令实现串⼝的通讯,我们需要了解General Device(Com)。
General Device(Com) 说明控件类别代号名称存取⽅式说明Bit Device CTS_STS CTS 状态只读该状态是程序从接收⽅读到的状态,1表⽰禁⽌发送, 0 表⽰允许发送,当EN_HS为1时,程序在发送前检查该状态,等待直到允许发送时才能发送,否则此次发送失败。
协议宏功能在PLC串行通信中的应用
协议宏功能在PLC串行通信中的应用PLC/串行通信/通信协议/校验1 引言近年来,随着工业自动化技术的快速发展,可编程逻辑控制(PLC)的功能日益强大,PLC早已不局限于替代传统继电器、接触器电路,实现逻辑控制功能,现在PLC已经集过程控制、运动控制、数据通信和网络通信等众多功能于一身。
随着功能的提高和完善,PLC与工业现场设备之间的数据通信量也越来越大,越来越多的工业设备上集成一个RS232/485通信接口,提供自身的通信协议,PLC在进行数据采集和远程控制时,都需要通过串行通信来实现。
2 串行通信简介在通信领域内,有两种数据通信方式:串行通信和并行通信。
串行通信:是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。
特别使用于PC与PC、PC与外设之间的远距离通信。
串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。
RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。
3 PLC常用串行通信程序编写方法1) 串行通信由于没有一个标准的通信协议,所以自动化设备的通信协议非常多,常用的Modbus、Pofibus、Devicenet等,PLC一般都带有标准的硬件单元,所以在使用这些协议时,程序上只需要建立标准数据连接表就可以,无需在按照协议格式,填写头、数据、校验等内容。
2) 但是遇到一些没有标准协议的设备,比如一些仪表采用的SWP协议,就需要在程序中按照第三方设备的协议格式,将数据完整的填写在PLC内存中,然后再使用串行通信指令,将数据由制定的通信接口发送出去,然后再按照响应数据的格式编写接收响应数据的程序,而且遇到变量数据,校验码又不能提前计算好写入内存,只能在程序中编写校验程序,这样不可避免造成程序的编写量非常大,程序非常繁琐。
3) 如SWP系列仪表的通信协议,PLC读取仪表当前的数值(温度、压力等),需要按照协议内容发送命令,如“图1”PLC发送的数据(读取当前测量数值),“图2”仪表回送的响应数据,按照协议内容,该数据是一个ASC码格式的浮点数,在很长的响应数据中,只有“图2”中低字节、高字节、小数点,是当前需要的数据,所以需要在程序中使用数据处理指令,将有用的数据摘选出来,再将ASC码格式数据转换成16/10进制的数据,才完成仪表数据读取的工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Operation Manual of PanelMaster
使用宏指令执行串口通讯
Neomate Technologies Inc.
串口是计算机上一种非常通用的通讯协议,同时也是大多数仪器仪表设备的通用通讯协议。
在触控屏应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。
除了触控屏软件PanelMaster自带的许多驱动之外,我们也可以设计相应的串口通信程序,完成二者之间的数据通信任务。
串行端口的本质功能是作为CPU和串行设备间的编码转换器。
当数据从 CPU经过串行端口发送出去时,字节数据转换为串行的位。
在接收数据时,串行的位被转换为字节数据。
引脚 功能说明 缩写
1 数据载波检测 DCD
2 接收数据 RXD
3 发送数据 TXD
4 数据终端准备 DTR
5 信号地 GND
6 数据设备准备好 DSR
7 请求发送 RTS
8 清除发送 CTS
9 振铃指示 DELL
串口主要信号线定义
电气特性:数据传输速率最大可到20K bps,最大距离仅15m,一般在9600 bps,可以满足通讯需求。
PV提供了最通用的串口通讯服务General Device(COM)。
使用串口通讯需选择服务General Device(COM),设置为
我们假设两台屏之间的串口通讯.接线图如下:
A触控屏的连接设置为:
B触控屏的连接设置为:
由此可以看出,触控屏A是通过COM1和屏B的COM2进行通讯的,它们都使
用PanelMaster的General Device(COM)服务。
要使用宏指令实现串口的通讯,我们需要了解General Device(Com)。
General Device(Com) 说明
控件类别 代号 名称 存取
方式
说 明
Bit Device CTS_STS CTS 状态 只读该状态是程序从接收方读到的状
态,1表示禁止发送, 0 表示允许发
送,当EN_HS为1时,程序在发送前
检查该状态,等待直到允许发送时才
能发送,否则此次发送失败。
写此状
态没有作用。
Bit Device EN_HS 检查握手信号 读写当该状态为1时,程序在发送前检查
CTS_STS是否允许发送,并且在发送
前禁止对方发送,并在发送结束后允
许对方发送。
Bit Device FLUSH 清空接收缓冲
区 只写写1清空接收缓冲区, 写0没有作用。
读此状态为0。
Bit Device RESET UART复位并清
空接收缓冲区 读写写 1 UART复位并清空接收缓冲区,所有状态恢复为初始状态 写0没有
作用。
读此状态为0。
Bit Device RTS 设置(SET)RTS
信号 读写设置该状态为1,禁止对方发送,0允许对方发送。
Word Device RX 数据接收 只读从接收缓冲区中读取N个字符。
当
接收缓冲区中的字符数量大于等于
N时, 读出N个字符。
RX_CNT为
N,RXB_CNT=RXB_CNT-N。
否则读出
RXB_CNT个字符,RX_CNT =
RXB_CNT,RXB_CNT=0。
写该寄存器
无作用。
每一次接收,RX_STS=1成
功,RX_STS<0 硬件错。
Word Device RX_CNT 实际接收字符
数 只读上一次读取接收缓冲区实际读出的字符数量。
写该寄存器无作用。
Word Device RX_STS 接收结果 只读上一次接收是否成功。
1:成功,2:
超时,<0:失败。
写该寄存器无作
用。
Word Device RX_W 等待接收数据 只读从接收缓冲区中读取N个字符。
当
接收缓冲区中的字符数量大于等于
N时, 读出N个字符。
RX_CNT为
N,RXB_CNT=RXB_CNT-N, RX_STS=1
成功。
否则等待直到超时。
如果
RXB_CNT仍然小于N,读出RXB_CNT
个字符,RX_CNT = RXB_CNT,
RXB_CNT=0,如果硬件出错RX_STS<0
失败,否则RX_STS=2超时。
写该
寄存器无作用。
Word Device RXB_CNT 接收缓冲区中
字符数 只读接收缓冲区中的字符数量。
写该寄存器无作用。
Word Device TO_TIME 超时时间 读写设置接收发送的超时时间,单位为
100MS。
Word Device TX 数据发送 只写发送数据到指定串口。
一、等待上
一次发送完成。
二、如果EN_HS等
于1,等待对方允许发送,即
CTS_STS=0。
三、 如果EN_HS等于
1,发送前设置RTS=1,并在发送结束
后设置RTS=0。
四、如果开始发送
前已经超时TX_STS=2超时返回。
五、开始发送TX_STS=1成功并返
回。
Word Device TX_STS 发送状态 只读上一次发送是否成功。
1:成功,2
超时, 0XFF正在发送中。
写该寄存
器无作用。
Word Device TX_W 数据发送并等
待完成 只写发送数据到指定串口。
一、等待上一次发送完成。
二、如果EN_HS等
于1,等待对方允许发送即
CTS_STS=0。
三、如果EN_HS等于
1,发送前设置RTS=1,并在发送结束
后设置RTS=0。
四、如果开始发送
前已经超时TX_STS=2返回。
五、开
始发送。
六、等待发送结束,设置
TX_STS=1。
发送和接受的控制流程如下:
例1:两台屏通过宏指令实现串口通讯
触控屏A中的宏指令为TX= MOV($U200,4)
使用一个按钮来作为发送按钮
位按钮的写入地址可以自己定义。
这里使用内部地址$U1.0,功能选择保持1。
此按钮的壹宏为
当按下出发送按钮时,就会执行此宏指令,指令使用MOV命令将内部记忆区 $U200~$U203暂存器(寄存器)搬移到TX暂存器(寄存器)发送。
例:触控屏B中的宏指令为 $U100= MOV(RX,4),此宏指令设置为主宏指令。
使用MOV指令将RX暂存器(寄存器)接收到的数据搬移到内部记忆区 $U100~$U103暂存器(寄存器)。
以上的例子使用MOV指令将触控屏A中内部记忆区 $U200~$U203的数据通过串口通讯General Device(COM)传送到触控屏B的内部记忆区 $U100~$U103暂存器(寄存器)。
例2: 三菱PLC FX2N通过自由串口和屏通讯,实现屏和PLC的时间手动同步。
接线图如下:
PLC 的通讯程序如下
:
设置为8位处理模式
通讯参数设置
RS指令设置
发送数据等待
数据传送
输出接受数据
接受完成后完成复位
屏的连接属性如下:
连接属性的参数设定需要与PLC的通讯参数一样.通讯设置完之后,我们需要建立一个同步的按钮。
此同步按钮的功能选择保持1,写入地址可以地址定义,我们这里就使用内部地址$U1.0, 它的壹宏为:
TX=1,发送请求信号,让PLC通过串口发送时间数据到屏;$U200=MOV(RX_W,7), 接受来自PLC的时间数据并存入寄存器$U200-$U206;然后再转换数据,最后设置屏的内部时钟。
按钮的零宏为:
TX=0,复位信号
以上例子是通过串口通讯的方式,实现触摸屏和PLC之间的时间同步。
触摸屏通过宏指令的TX发送请求信号给PLC,然后再通过RX接受来自PLC的时钟信号,并加以转换,最后设定为内部时钟,从而通过屏的宏指令实现了和PLC的串口通讯。