文档库 最新最全的文档下载
当前位置:文档库 › 信捷触摸屏C函数功能块手册20120925

信捷触摸屏C函数功能块手册20120925

信捷触摸屏C函数功能块手册20120925
信捷触摸屏C函数功能块手册20120925

TP\TH\TG触摸屏C函数功能块

用户手册

无锡信捷电气股份有限公司

资料编号:HC 10 20120628 2.D

目录

前言 (1)

1 函数功能块制作 (2)

2函数功能块说明 (4)

2.1书写方式 (4)

2.2函数类型 (4)

2.3预定义数据类型 (5)

2.4预定义宏指令 (6)

2.5系统函数 (6)

2.5.1 Read/ Write (6)

2.5.2 Reads/Writes (7)

2.5.3 Enter/ Leave (7)

2.5.4 Send (7)

2.5.5 Receive (8)

2.5.6 Malloc (8)

2.5.7 Free (8)

2.5.8 Delay (9)

2.5.9 ScreenJump (9)

2.5.10 OpenWindow (9)

2.5.11 CloseWindow (9)

2.5.12 Beep (9)

2.5.13 WakeScreen (10)

2.5.14 Crc (10)

2.5.15 BendCalYDepth (10)

2.5.16 DCMapSetBackColor (11)

2.5.17 DCMapDrawLine (11)

2.5.18 DCMapDrawRect (11)

2.5.19 DCMapDrawCircle (12)

2.5.20 DCMapDrawEllipse (13)

2.5.21 DCMapDrawCircleArc (13)

2.5.22 DCMapDrawEllipseArc (14)

2.5.23 DCMapClear (15)

2.6宏操作 (15)

2.6.1 Max (15)

2.6.2 Min (15)

2.6.3 MAKEWORD (16)

2.6.4 MAKEDWORD (16)

2.6.5 LOBYTE (16)

2.6.6 HIBYTE (16)

2.6.7 LOWORD (16)

2.6.8 HIWORD (16)

2.7 C语言常见库函数 (17)

2.7.1 abs (17)

2.7.2 acos、asin、atan (17)

2.7.3 cos、sin、tan (17)

2.7.4 log (17)

2.7.5 log10 (18)

2.7.6 pow (18)

2.7.7sqrt (18)

2.7.8 rand (18)

2.8触摸屏内部对象 (19)

2.8.1 PSW对象 (19)

2.8.2 PSB对象 (19)

3 工程示例 (20)

3.1 数据比较 (20)

3.2 C函数实现自由通讯 (22)

3.3 加减乘除运算 (25)

3.4 C函数画直线、矩形、圆、椭圆、圆弧、椭圆弧 (30)

4 常见问题 (35)

4.1如何对正在编辑C功能函数程序进行编译? (35)

4.2如何在C功能函数块中读取PLC参数值或者写入PLC参数值? (35)

4.3使用Read、Write、Reads、Writes函数快捷方法? (36)

附录1 C标准库函数的调用限制 (37)

附录2 C函数使用注意事项 (38)

前言

相较于TP、TH、TG系列触摸屏软件中简单的工程命令、高级功能指令,新添加的C函数功能块,使触摸屏可以完成更多、更复杂的运算和通讯要求,使系统功能得到了更大限度的发挥,更好地满足客户的实际需求。

本书通过介绍C指令以及结合一些简单的示例来说明关于C函数功能的使用方法,因此在介绍中只使用了一些简单易懂的C函数知识,主要目的是让客户找到了解这个功能,知道一些基本的书写规则,了解在使用过程中的一些注意事项。

1函数功能块制作

触摸屏软件要求V2.C.6以上,具体查看触摸屏软件“帮助”中“关于”。

创建函数过程:

1. 打开V

2.C.6 TouchWin软件。

2. 选择“工程”栏“函数功能块”,右击“函数功能块”插入,在弹出的信息对话框中填写函数功

能块的基本信息。

注:函数名必须为英文名,具体请参考2.1节。

3. 双击打开函数功能块“Func1”,编写程序。

注:可以按键盘上的F7键,对编辑好的C函数进行编译,检查函数编辑是否有错。

2函数功能块说明

2.1书写方式

函数功能块标识符的写法完全按照标准C语言书写,在C语言中用于标识名字的有效字符序列称为标识符,指的就是用户自定义的变量、函数、常量、语句标号名称。

合法的标识符

1) 由字母,数字和下划线组成;

2) 第一位只能为字母或下划线;

3) 不能和C语言的关键字完全相同;

4) 长度小于等于256字符;

2.2函数类型

根据函数的使用方法,触摸屏中将函数分为公共函数和功能函数。

公共函数

公共函数:即全局函数,在公共函数中定义的函数可以被任意的功能函数调用,需要写函数原型,可以有参数和返回值。

例:

DWORD Crc(BYTE* pBytes, int Length)

{

DWORD dwCrc = 0;

return dwCrc;

}

公共函数中调用功能函数

void CallFunction()

{

Func1();

}

功能函数

功能函数:无返回值、无参数、无需写函数原型,只要指定函数名,直接写函数体,功能函数可以通过功能键和功能域里的函数调用功能执行。

例:

BYTE byArray[10];

DWORD dwCrc = 0;

dwCrc = Crc(byArray, 10); // 调用公共函数

2.3预定义数据类型

typedef unsigned long DWORD;

typedef unsigned char BOOL;

typedef unsigned char BYTE;

typedef unsigned short WORD;

typedef unsigned int UINT;

数据类型预定义:

enum {FALSE = 0, TRUE = 1};

enum ECom

{

HMI_LOCAL_MCH = -1,

DOWNLOAD,

PLC,

EComMax

};

enum EInnerReg

{

TYPE_PSB = 0,

TYPE_PSW,

TYPE_PFW,

TYPE_PRW,

TYPE_PHW,

TYPE_PUW,

TYPE_PCW,

EInnerRegMax

};

enum EDataType

{

TYPE_NONE,

TYPE_BIT,

TYPE_BYTE,

TYPE_WORD,

TYPE_DWORD,

TYPE_REGS,

TYPE_BYTE_3

};

2.4预定义宏指令

#define Max(a,b) (((a) > (b)) ? (a) : (b))

#define Min(a,b) (((a) < (b)) ? (a) : (b))

#define MAKEWORD(byl, byh) ((WORD)(((BYTE)(byl)) | ((WORD)((BYTE)(byh)))

<< 8))

#defineMAKELONG(wl,wh) ((LONG)(((WORD)(wl))|((DWORD)((WORD)(wh)))

<< 16))

#define LOWORD(l) ((WORD)(l))

#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))

#define LOBYTE(w) ((BYTE)(w))

#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))

2.5系统函数

2.5.1 Read/ Write

功能读写操作(用于读写位和寄存器)

格式读操作:BOOL Read (int comID, int staID, int objType, int add1, int add2, int dataType,void* pValue);

写操作:BOOL Write(int comID, int staID, int objType, int add1, int add2, int dataType, DWORD dwValue);

注释comID:串口(HMI_LOCAL_MCH = -1,DOWNLOAD = 0,PLC = 1)

staID:站号

objType:寄存器地址类型

add1,add2:寄存器地址

dataType:TYPE_BIT = 1 占用1字节

TYPE_BYTE = 2 占用1字节

TYPE_WORD = 3 占用2字节

TYPE_DWORD = 4 占用4字节

pValue:数值缓冲区(长度应该与dataType类型匹配)

返回值:TRUE / FALSE(成功/ 失败)

举例BOOL bValue ;//定义一个布尔变量

WORD wValue ; //定义一个整型变量

Read(PLC, 1, XINJE_XC_BIT_M, 0, 0, TYPE_BIT, &bValue); // 读位M0

Read(PLC, 1, XINJE_XC_REG_D, 0, 0, TYPE_WORD, &wValue); // 读D[0]

2.5.2 Reads/Writes

功能读写寄存器组

格式读操作:BOOL Reads(int comID, int staID, int objType, int add1, int regs, void* pRegs);

写操作:BOOL Writes(int comID, int staID, int objType, int add1, int regs, void* pRegs);

注释comID:串口(HMI_LOCAL_MCH = -1,DOWNLOAD = 0,PLC = 1)

staID:站号

objType:寄存器地址类型

add1:寄存器地址

regs :寄存器个数

pRegs:数值缓冲区(长度应该与需读写的寄存器组大小匹配)

返回值:TRUE / FALSE(成功/ 失败)

举例WORD wValue [10]; //定义一个整型变量

Reads(PLC,1,XINJE_XC_REGS_D,0,1, wValue); // 读D0组

注意:具体函数添加操作步骤可以参考Read函数操作。

2.5.3 Enter/ Leave

功能信号量控制,保证通信为同步方式,与Send和Receive配合使用

格式void Enter( BYTE ComID );

void Leave( BYTE ComID);

注释comID:串口(HMI_LOCAL_MCH = -1,DOWNLOAD = 0,PLC = 1)

举例Enter(PLC);

Leave(PLC);

2.5.4 Send

功能发送串口数据

格式BOOL Send( BYTE ComID, BYTE *SndBuf, WORD Len );

注释comID:串口(DOWNLOAD = 0, PLC = 1)

SndBuf:发送缓冲区,类型为字节

Len:要发送的数据长度,按字节计

返回值:TRUE / FALSE(成功/ 失败)

举例BYTE RcvArray[8]={0x01,0x01,0x00,0x10,0x00,0x10,0x3C,0x03}

Send(PLC,RcvArray,8)

功能接收串口数据

格式WORD Receive( BYTE ComID, BYTE *RcvBuf, WORD Len, WORD TimeOut, BYTE TimeOutBytes);

注释comID:串口(DOWNLOAD = 0, PLC = 1)

RcvBuf:接收缓冲区,类型为字节

Len:希望接收的数据长度,按字节计

Timeout :总接收超时时间(0:一直等待)。单位:ms

TimeOutBytes:字节间接收超时时间(一般设为6)

返回值:实际接收到的数据长度,按字节计

举例BYTE byArray[10];

Receive(PLC, byArray, 10, 0, 6);

2.5.6 Malloc

功能申请堆空间

格式void *Malloc( UINT size )

注释Size:申请空间大小(bytes)

Return:被申请空间的地址,等于NULL表示申请失败

Malloc:malloc 向系统申请分配指定size个字节的内存空间替代标准库函数中的malloc使用,功能完全相同

Note:申请的空间请及时释放

举例Unit* p;

p = (Unit *) Malloc (sizeof(10));

2.5.7 Free

功能与malloc()函数配对使用,释放malloc函数申请的动态内存

格式void Free( void *pBuffer)

注释pBuffer :待释放的空间

Free:替代标准库函数中的Free使用,功能完全相同

Note:申请的空间请及时释放

举例BYTE* pBuffer = Malloc(10);

Free(pBuffer)

功能延时

格式void Delay( UINT ms);

注释ms:延时时间(单位:ms),最大可设定延时时间为0xFFFF * 延时精度延时精度:Delay函数的精确值单位,TP、OP系列均为10ms,TPA61T 、TH &、MH系列为5ms

举例Delay(10); // 延时10毫秒

Delay(1000); // 延时1秒

2.5.9 ScreenJump

功能画面跳转

格式WORD ScreenJump(WORD ScreenNo);

注释screenNo:画面号

Return:实际跳转到的画面号

举例ScreenJump(2); // 跳转到2号画面

2.5.10 OpenWindow

功能打开窗口

格式void OpenWindow(WORD winNo, WORD winX, WORD winY);

注释winNo:窗口号

winX:窗口X轴起始位置

winY:窗口Y轴起始位置

举例OpenWindow(2, 10, 10); // 位于(10,10)点显示窗口2

2.5.11 CloseWindow

功能关闭窗口

格式void CloseWindow(WORD winNo);

注释winNo:窗口号

举例CloseWindow(2); // 关闭2号窗口

2.5.12 Beep

功能蜂鸣器响一次

格式void Beep(void);

注释无

举例Beep( );

2.5.13 WakeScreen

功能唤醒画面(从屏保状态)

格式void WakeScreen(void);

注释无

举例WakeScreen( );

2.5.14 Crc

功能计算Crc值

格式UINT Crc(BYTE* pHead, UINT nLen);

注释pHead:数据缓冲区起始地址

nLen:缓冲区长度

Return:Crc值

举例BYTE buffer[3] = {0x01, 0x02, 0x03};

UINT nCrc = Crc(buffer, 3); //将数组buffer Crc的校验值放到变量nCrc中2.5.15 BendCalYDepth

功能获取进深返回值,主要应用在折弯机行业中,适用的人机界面型号有BTH-765M、BMH-765M

格式float BendCalYDepth( float fAngle, float fThick, float fHatch, DWORD nStrenth, DWORD nEMode );

注释fAngle:折弯角度

fThick:板材厚度

fHatch:下模开口宽度

nStrenth:抗张强度

nEMode:弹性模量

举例float Angle,Thick,Hatch;

DWORD Strenth,EMode;

Angle = * (float *)(PSW+300);

Thick = * (float *)(PSW+302);

Hatch = * (float *)(PSW+304);

Width = * (float *)(PSW+306);

Strenth = * (DWORD *)(PSW+308);

EMode = * (DWORD *)((PSW+310);

* (float *)(PSW+1500) = BendCalYDepth(Angle,Thick,Hatch,Strenth,EMode); //将返回值放入PSW1500,PSW1501中

2.5.16 DCMapSetBackColor

功能修改画布背景颜色(V2.D以上软件支持)

格式BOOL DCMapSetBackColor( DWORD dwDCMapID, DWORD BackColor )

注释dwDCMapID:设置画布号

BackColor:设置颜色值,一般以十六进制输入,如0x00ff00

举例DCMapSetBackColor( DWORD 1, DWORD 0x0000ff );

应用请参考第3章3.4节

2.5.17 DCMapDrawLine

功能自定义画直线(V2.D以上软件支持)

格式BOOL DCMapDrawLine( DWORD dwDCMapID, int x, int y, int Width, int Height, int linewidth, DWORD color )

注释dwDCMapID:设置画布号

x:设置直线显示位置X坐标点值

y:设置直线显示位置Y坐标点值

Width:设置直线宽度

Height:设置直线高度

Linewidth:设置直线线宽,即粗细

Color:设置直线颜色

举例int x_pos,y_pos,line_height,line_width,linewidth;

DWORD line_color;

x_pos=PSW[300];

y_pos=PSW[301];

line_color=*(DWORD *)(PSW+302);

line_height=PSW[304];

line_width=PSW[305];

linewidth=PSW[306];

DCMapClear(1);//在使用过程中先使用DCMapClear指令把图形删除

DCMapDrawLine(1,x_pos,y_pos,line_width,line_height,linewidth,line_color);

应用请参考第3章3.4节

2.5.18 DCMapDrawRect

功能自定义画矩形(V2.D以上软件支持)

格式BOOL DCMapDrawRect( DWORD dwDCMapID, int x, int y, int Width, int Height, int linewidth, DWORD color, BOOL FillRect, DWORD FillColor )

注释dwDCMapID:设置画布号

x:设置矩形显示位置X坐标点值

y:设置矩形显示位置Y坐标点值

Width:设置矩形宽度值

Height:设置矩形高度值

Linewidth:设置矩形线宽,即粗细

Color:设置矩形颜色值

FillRect:设置矩形内部是否要填充

FillColor:设置填充颜色值

举例int x_pos,y_pos,rec_height,rec_width,linewidth;

DWORD rec_color,fillcolor;

BOOL fill;

x_pos=PSW[300];

y_pos=PSW[301];

rec_color=*(DWORD *)(PSW+302);

rec_height=PSW[304];

rec_width=PSW[305];

linewidth=PSW[306];

fillcolor=*(DWORD *)(PSW+308);

fill=GetPSBStatus(300);

DCMapClear(1);

DCMapDrawRect(1,x_pos,y_pos,rec_width,rec_height,linewidth,rec_color,fill,fillcolor); 应用请参考第3章3.4节

2.5.19 DCMapDrawCircle

功能自定义画圆(V2.D以上软件支持)

格式DWORD BendCalForce(float fThick, float fWidth, float fDHatch)

注释dwDCMapID:设置画布号

x:设置圆显示位置X坐标点值

y:设置圆显示位置Y坐标点值

Radius:设置圆直径

Linewidth:设置圆线宽,即粗细

Color:设置圆颜色

FillRect:设置圆内部是否要填充

FillColor:设置圆填充颜色值

举例int x_pos,y_pos,Radius,linewidth;

DWORD circle_color,fillcolor;

BOOL fill;

x_pos=PSW[300];

y_pos=PSW[301];

circle_color=*(DWORD *)(PSW+302);

Radius=PSW[304];

linewidth=PSW[306];

fillcolor=*(DWORD *)(PSW+308);

fill=GetPSBStatus(300);

DCMapClear(1);

DCMapDrawCircle(1,x_pos,y_pos,Radius,linewidth,circle_color,fill,fillcolor);

应用请参考第3章3.4节

2.5.20 DCMapDrawEllipse

功能自定义画椭圆(V2.D以上软件支持)

格式BOOL DCMapDrawEllipse(DWORD dwDCMapID, int x, int y, int X_Axis_Len, int Y_Axis_Len, int linewidth, DWORD color, BOOL FillRect, DWORD FillColor )

注释dwDCMapID:设置画布号

x:设置椭圆显示位置X坐标点值

y:设置椭圆显示位置Y坐标点值

X_Axis_Len:设置椭圆宽度值

Y_Axis_Len:设置椭圆高度值

Linewidth:设置椭圆线宽,即粗细

Color:设置椭圆颜色值

FillRect:设置椭圆内部是否要填充

FillColor:设置填充颜色值

举例int x_pos,y_pos,x_Axis,Y_Axis,linewidth;

DWORD E_color,fillcolor;

BOOL fill;

x_pos=PSW[300];

y_pos=PSW[301];

E_color=*(DWORD *)(PSW+302);

x_Axis=PSW[304];

Y_Axis=PSW[305];

linewidth=PSW[306];

fillcolor=*(DWORD *)(PSW+308);

fill=GetPSBStatus(300);

DCMapClear(1);

DCMapDrawEllipse(1,x_pos,y_pos,x_Axis,Y_Axis,linewidth,E_color,fill,fillcolor);

应用请参考第3章3.4节

2.5.21 DCMapDrawCircleArc

功能自定义画圆弧(V2.D以上软件支持)

格式BOOL DCMapDrawCircleArc( DWORD dwDCMapID, int x, int y, int Radius, int linewidth, DWORD color, DWORD StartAngle, DWORD EndAngle )

注释dwDCMapID:设置画布号

x:设置圆弧显示位置X坐标点值

y:设置圆弧显示位置Y坐标点值

Radius:设置圆弧宽度值

Linewidth:设置圆弧线宽,即粗细

Color:设置圆弧颜色

FillRect:设置圆弧内部是否要填充

FillColor:设置圆弧填充颜色值

举例int x_pos,y_pos,Radius,linewidth;

DWORD circle_color;

float StartAngle,EndAngle;

x_pos=PSW[300];

y_pos=PSW[301];

circle_color=*(DWORD *)(PSW+302);

Radius=PSW[304];

linewidth=PSW[306];

StartAngle=*(float *)(PSW+308);

EndAngle=*(float *)(PSW+310);

DCMapClear(1);

DCMapDrawCircleArc(1,x_pos,y_pos,Radius,linewidth,circle_color,StartAngle,EndAngle

);

应用请参考第3章3.4节

2.5.22 DCMapDrawEllipseArc

功能自定义画椭圆弧(V2.D以上软件支持)

格式BOOL DCMapDrawEllipseArc( DWORD dwDCMapID, int x, int y, int X_Axis_Len, int Y_Axis_Len, int linewidth, DWORD color, DWORD StartAngle, DWORD EndAngle)

注释dwDCMapID:设置画布号

x:设置椭圆弧显示位置X坐标点值

y:设置椭圆弧显示位置Y坐标点值

X_Axis_Len:设置椭圆弧宽度值

Y_Axis_Len:设置椭圆弧高度值

EArc_width:设置椭圆弧线宽,即粗细

Color:设置椭圆弧颜色值

StartAngle:设置椭圆弧起始角度值

EndAngle:设置椭圆弧终点角度值

举例int x_pos,y_pos,x_Axis,Y_Axis,linewidth;

DWORD eArc_color;

float StartAngle,EndAngle;

BOOL fill;

x_pos=PSW[300];

y_pos=PSW[301];

eArc_color=*(DWORD *)(PSW+302);

x_Axis=PSW[304];

Y_Axis=PSW[305];

linewidth=PSW[306];

StartAngle=*(float *)(PSW+308);

EndAngle=*(float *)(PSW+310);;

DCMapClear(1);

DCMapDrawEllipseArc(1,x_pos,y_pos,x_Axis,Y_Axis,linewidth,eArc_color,StartAngle,En dAngle);

应用请参考第3章3.4节

2.5.23 DCMapClear

功能清除画布内容(V2.D以上软件支持)

格式BOOL DCMapClear( DWORD dwDCMapID )

注释dwDCMapID:设置画布号

举例DCMapClear(1);

应用请参考第3章3.4节

2.6宏操作

2.6.1 Max

功能取两个书中最大值

格式Max( A, B );

注释A:变量

B:变量

举例Max(3, 4) == 4

2.6.2 Min

功能取两个数中最小值

格式Min(A, B);

注释A:变量

B:变量

举例Min(3, 4) == 3

2.6.3 MAKEWORD

功能将两个字节组合成一个字

格式MAKEWORD(lb, hb);

注释lb:字节变量,两个组合字节中低字节hb:字节变量,两个组合字节中高字节

举例MAKEWORD(0x01, 0x02) == 0x0201

2.6.4 MAKEDWORD

功能将两个单字组合成一个双字

格式MAKEDWORD(lw, hw)

注释lb:字变量,两个组合字中低字

hb:字变量,两个组合字中高字

举例MAKEDWORD(0x01, 0x02)== 0x00020001

2.6.5 LOBYTE

功能获取一个字的低字节

格式LOBYTE(w)

注释w:字变量

举例LOBYTE(0x0201) == 0x01

2.6.6 HIBYTE

功能获取一个字的高字节

格式HIBYTE(w)

注释w:字变量

举例HIBYTE(0x0201)== 0x02

2.6.7 LOWORD

功能获取一个双字的低字

格式LOWORD (w)

注释w:双字变量

举例LOWORD(0x00020001)== 0x0001

2.6.8 HIWORD

功能获取一个双字的高字

格式HIWORD(w)

注释w:双字变量

举例HIWORD(0x00020001)== 0x0002

2.7 C语言常见库函数

本章主要简单介绍C语言中常用库函数使用,其他非常见函数用户可以直接参考《C程序设计》教材或者通过网站查询学习C语言的使用。

2.7.1 abs

功能求整数x的绝对值

格式Short int abs(short int x)

注释x:单字整型变量

举例short int *a;

*a=PSW[300];

PSW[320]=abs(*a);

2.7.2 acos、asin、atan

功能计算acosx、asinx、atanx反三角函数值

格式float acos(float x)

float asin(float x)

float atan(float x)

注释x:双字浮点型变量

举例*(float*)(PSW+300)= acos(*(float*)(PSW+310))*180/3.1415926;

*(float*)(PSW+302)= asin(*(float*)(PSW+312))*180/3.1415926;

*(float*)(PSW+304)= atan(*(float*)(PSW+314))*180/3.1415926;

2.7.3 cos、sin、tan

功能计算cosx、sinx、tanx三角函数值

格式float cos(float x)

float sin(float x)

float tan(float x)

注释x:双字浮点型变量,输入的值必须为弧度

举例*(float*)(PSW+300)= cos((*(float*)(PSW+310))*3.1415926/180);

*(float*)(PSW+302)= sin((*(float*)(PSW+310))*3.1415926/180);

*(float*)(PSW+304)= tan((*(float*)(PSW+310))*3.1415926/180);

2.7.4 log

功能求log即

格式float log(float x)

注释x:双字浮点型变量

举例*(float*)(PSW+320)=log(*(float*)(PSW+300));

相关文档