中控编程教程.docx
- 文档编号:11419922
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:16
- 大小:282.82KB
中控编程教程.docx
《中控编程教程.docx》由会员分享,可在线阅读,更多相关《中控编程教程.docx(16页珍藏版)》请在冰豆网上搜索。
中控编程教程
第一章、硬件说明
CM-CP3 是CIMATE自主研发的采用网络通讯型的中央控制主机,采用低耗、高性能嵌入式微处理器,运行速度快、简单易用。
CM-CP3网络通讯型的中央控制主机提供了开放式结构,支持各种协议(如:
CAN、TCP/IP、PWM)及多种控制协议端口,含IR(红外)、I/O(数字输入/输出,模拟输入)、COM 口等。
采用先进可靠的集成技术,提供高速准确的集中控制环境;开放式+模块化的用户编程界面,可轻易的完成各种复杂的控制接口编程。
1.1功能特点
◆采用低耗、高性能嵌入式微处理器,运行速度快、简单易用。
◆4路独立可编程RS-232控制接口,其中一路可选择485控制接口。
用户可编程设置多种控制协议和代码;
◆8路独立可编程RS-232控制接口,只支持发送,不支持接收;
◆8路独立可编程的红外发射接口,支持控制多台相同或不同的红外设备;
◆8路数字输入/输出IO接口;
◆8路模拟输入IO接口;
◆USB2.0编程通讯接口;
◆红外载波全频段兼容、支持独立,验证红外学习
◆支持本地及远程多种控制方式;
◆采用低耗能DV5V-24电源输入;;
1.2主机安装
CM-CP3可编程网络控制主机可以安装在标准19英寸机柜上,主机标配附件含一对机柜安装支架,装配方式见下图。
第二章、系统主机说明
2.1面板功能说明
CM-CP3前面板
CM-CP3后面板:
1)状态指示灯——包括电源灯,状态灯、复位按键等。
2)红外学习窗口——用于红外学习
3)8路单向输出232接口---只有发送
4)ANALOGIN——模拟信号输入接口。
提供8路可由软件编程的模拟信号输入控制接口,可接收0-5v(10mA负载电流)的信号输入。
5)DIGITALI/O——I/O(输入输出)接口—提供8路可由软件编程的I/O输入输出控制接口,可提供5V/10mA负载输出或接收0~5V(10mA负载电流)的信号输入
6)PWM——8路0-5V脉冲高低电平信号输出。
(10mA负载电流)
7)IROUT——红外控制接口包含8路独立可编程红外控制接口(38KHE)载波,以控制多种相同或不同设备,如DVD、VCR、MD等的播放、暂停、停止、进出仓等。
8)COM接口——包含4路可编程双向串行通讯接口(3芯凤凰接口类型),COM0-COM2仅支持RS-232(G,TX,RX)通讯格式,COM3支持RS-232(G,TX,RX)/485(A,B)通讯格式。
9)CAN-BUS接口——电源控制器,调光器等
10)USB接口——用于程序下载.
11)ETHERNET——以太网接口用于连接外部网络实现与无线(WiFi)触摸屏的通讯或以太网远程控制。
12)DC5V-24V(2A)——系统电源。
系统电源输入,DC5V(2A)
2.2接口参数
◆红外学习窗口-----支持38KHE载波的红外码。
◆8路单向发送RS-232接口----------可发送RS232代码。
没有接收功能。
◆IO接口------CP3共有20个IO接口,其中8个数字IO,8个模拟IO,4个PWM。
其中模拟IO和PWM也可以做数字IO使用。
实现20路的数字IO接口。
IO接口可提供5V/10mA负载输出或接收0~5V的信号输入。
(不能超过5V,否则会烧坏主机)
◆红外输出-----8路独立可编程红外控制接口。
◆COM接口------包含4路可编程双向串行通讯接口(3芯凤凰接口类型),COM0-COM2仅支持RS-232(G,TX,RX)通讯格式,COM3支持RS-232(G,TX,RX)/485(A,B)通讯格式。
◆CAN-BUS接口——支持通用CAN-BUS协议,也可以外接我司的扩展设备如:
电源控制器,调光器等
◆USB接口----用于用户编写程序的下载,暂时只支持USB下载方式。
不支持网络下载。
◆ETHERNET接口-----最大8个连接,支持TCP/UDP等协议。
第二章、软件说明
1iControl1.0编程软件
iControl1.0是针对CIMTE第三代可编程中控主机(CP3)开发的编程软件,中控编程采用C、C++语言编写。
采用面向对象的编程方式。
支持自定义模块导入。
整个编程软件界面简洁易上手。
1.1iControl1.0安装
本软件为绿色软件,无需安装,只需把iControl目录的文件拷贝到电脑硬盘,然后双击iControl.exe即可运行iControl编辑软件。
安装过程比较简单,这里不作重点描述,需注意的是:
本软件是基于java平台,必须先安装JDK才能正常运行。
1.2iControl1.0软件介绍
2.结构说明
2.1引用第三方自定义宏
CP3采用的是面向对像的编程方式,我们可以把宏封装成对像,对像有属性和方法。
属性描述对象。
属性通过变量、常量和结构实现。
方法是对象执行的动作。
通过使用#include来引用第三方自定义宏的头部文件。
如:
#include
2.2seutp()
在CP3中程序运行时将首先调用setup()函数。
用于初始化对像属性、设备对像等。
每次CP3上电或重启后,setup函数只运行一次。
示例:
TouchPadpad1=TouchPad(1000,0);//定义触摸屏
TouchPadpad2=TouchPad(1001,1);
TouchPadpad3=TouchPad(1002,2);
TouchPadpad4=TouchPad(1003,3);
vpadvpad1=vpad(2000,0);//定义虚拟触摸屏
bytemac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED};//网卡mac地址
IPAddressip(192,168,1,177);//CP3的ip地址
voidsetup(){
Ethernet.begin(mac,ip);//初始化CP3的ip地址和mac地址
DEFINE_COMBINE4(vpad1,pad1,pad2,pad3,pad4);//绑定虚拟触屏
}
2.3start()
在setup()函数中初始化后,然后执行start()主线函数。
主线是CP3中央控制器连续执行的程序部分。
start()包含被称为主线的代码,只要控制器接电,主线就会被连续循环执行。
2.4事件处理器
外部设备和主机处理器之间的所有交互都由主线代码处理。
处理器运行主线代码、维护等待和脉冲队列,并检查总线上设备状态的变更。
这些交互或状态变更就是事件(Event)。
CP3维护一个已定义的事件处理器表,当一个新事件进入到CP3处理队列中时,CP3将其与表中的事件进行比较。
如果表中有该事件,则只有事件定义的代码被赋值和被执行,而绕过主线部分。
如果事件处理器未被定义,则运行主线,通过主线代码赋值事件。
这种机制可以更高效地处理事件,因为不需要主线来处理单一的I/O请求。
如果没有等待中的事件,则运行主线。
主线成了一个空闲时段进程。
事件的处理步骤
NO
YES
3.面向对像的编程
面向对象编程(ObjectOrientedProgramming,OOP,面向对象程序设计)是一种计算机编程架构。
OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
OOP达到了软件工程的三个主要目标:
重用性、灵活性和扩展性。
为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
CP3封装了一些常用的对像,如网口,串口,触屏,IO等API,CP3支持自定义模块.
.1API说明
1、CP3主机ip地址设置。
(cp3采用的是编程设置主机IP地址方式)
bytemac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED};//设置mac地址
IPAddressip(192,168,1,177);//设置ip地址
IPAddressgateway(192,168,1,1);//设置网关地址
IPAddresssubnet(255,255,255,0);//设置子网掩码
voidsetup(){/
Ethernet.begin(mac,ip,gateway,subnet);
}
2、触屏对像。
XpanelCP3是一款人机交互的APP,使用TCP协议与CP3主机通讯,具有断线通知功能。
用户通过XpanelCP3发送控制命令给CP3主机,CP3主机执行后把状态发回给XpanelCP3,两者是相向通讯的。
1、触屏对像初如化:
TouchPand对像名=TouchPand(TPID,socke)
参数:
对像名:
可任意符合C语言变量命名方式的变量名。
如:
ipad1.pad等
TPID:
触屏对像的ID,可在XpanelCP3中设置。
Socket:
CP3主机的网卡最大支持8个socket,范围是(0-7)
例子:
//定义一个名叫pad1的触屏对像,它的TPID是1000,使用的socket是0
TouchPadpad1=TouchPad(1000,0);
TouchPadpad2=TouchPad(1001,1);
TouchPadpad3=TouchPad(1002,2);
TouchPadpad4=TouchPad(1003,3);
2、触屏对像事件回调:
当点击触屏上的控件,如按下按钮或拖动进度条时,CP3主机会调用事件回调,用户可以事件回调函数中编写想要的功能。
把对像名加入到事件回调:
touchpanel_start(TouchPand对像名);
监听事件回调:
Voidgetlisten();
按钮事件回调函数(不要修改函数名及参数名)
voidkeypadEvent(intid,intjion,KeyStatestate)
按钮回调函数,当点击触屏上的按钮,会自动调用该函数。
按钮事件
BUTTON_EVENT(TP,jion)
参数:
TP:
触屏对像;
Jion:
触屏jionNo.
例子:
BUTTON_EVENT(pad1,jion){
PUSH//按下事件
{
if(jion>100&&jion<104)
n=jion-100;
}
RELEASE//弹起事件
{
}
HOLD//长按事件
{
}
REPEATC//长按重复事件
{
}
}
BUTTON_EVENT(pad1,104){
PUSH//按下事件
{
if(jion>100&&jion<104)
n=jion-100;
}
RELEASE//弹起事件
{
}
HOLD//长按事件
{
}
REPEATC//长按重复事件
{
}
}
进度条事件回调函数(不要修改函数名及参数名)
voidkeypadLevelEvent(intid,intjion,intkey)
进度条事件,当拖动触屏上的进度条会自动调用该函数
例子:
voidkeypadLevelEvent(intid,intjion,intkey)
{
pad1.send_Txt(10,String(key)+"%");//pad1触屏jion=10的文字显示%值
pad1.send_level(1,key);//设置pad1触屏jion=1的进度条值
a1=key;
}
时钟校正回调函数(不要修改函数名及参数名)
voidsettimeEvent(intyear,intmonth,intdate,inthour,intmin,intsec,intdow)
用触屏的时钟校正cp3中控主机的时间
例子:
voidsettimeEvent(intyear,intmonth,intdate,inthour,intmin,intsec,intdow){
rtc.setDOW(dow);//设置星期几
rtc.setTime(hour,min,sec);//设置时,分,秒
rtc.setDate(date,month,year);//设置日,月,年
}
状态更新回调函数(不要修改函数名及参数名)
voidupdataEvent(inttpid)
当触屏待机后,唤醒触屏后,会自动调用该函数,并更新触屏的状态
例子:
voidupdataEvent(inttpid)
{
pad1.updata_button(101,n==1);//按钮互锁
pad1.updata_button(102,n==2);
pad1.updata_button(103,n==3);
pad1.updata_button(104,token);//按钮自锁
pad1.send_Txt(10,String(a1)+"%");//设置文字的值
pad1.send_level(1,a1);设置进度条的值
}
3.触屏方法
Voidsend_button(intjion,booleanf);
设置触屏按钮的值
参数:
Jion:
触屏按钮的jionNo.
f:
当为真按钮显示按下,当为假按钮显示弹起
例子:
Pad1.send_button(101,n==1);//当n=1时按钮按下,否则弹起
Pad1.send_button(102,n==2);
Pad1.send_button(103,n==3);
Pad1.send_button(104,token);//当token=true按钮显示按下,当token=false弹起
对像名.updata_button(intjion,booleanf);
此方法功能跟send_button(intjion,booleanf);方法一样,updata_button常用于updataEvent回调事件里,send_button常用于start主函数里.
Voidsend_level(intjion,intValue);
设置解屏进度条,滑动条的值
参数:
Jion:
触屏进度条、滑动条的jionNo.
Value:
范围0-100
例子:
Pad1.send_level(1,50);//设置jionNo.为1的进度条的值为50%
Pad1.send_level(1,98);
Voidsend_Txt(intjion,Stringstring);
设置触屏文本显示框的字符串
参数:
Jion:
触屏文本显示框的jionNo.
string:
要显示的字符串
例子:
Pad1.send_Txt(1,”HolleWord”);//jionNo.为1的文本框显示HolleWrod
voidsetHoldTime(unsignedinttime);
设置触屏按钮触发HOLD事件的时间;
参数:
Time:
单位毫秒。
例子:
Pad1.setHoldTime(1000);//设置长按事件的触发时间为1秒
voidsetRepeatTime(unsignedinttime);
设置触屏按钮触发REPEATC事件的时间.
参数:
Time:
单位毫秒。
例子:
Pad1.setRepeatTime(1000);//设置REPEATC事件的触发时间为1秒
3、虚拟触屏对像
该模块只要是针对多触摸屏的情况。
如实际中需要多个触屏屏设备,该模块可以很好的匹配。
初始化虚拟触屏对像
vpad对像名=vpad(ID,socke)
参数:
对像名:
可任意符合C语言变量命名方式的变量名。
如:
ipad1.pad等
TPID:
虚拟触屏对像的ID。
范围1-3000;
Socket:
范围是(0-255)
绑定触屏
DEFINE_COMBINEx(..)
X:
的范围(1-8),最多同时绑定8个触屏
..:
触屏对像名
例子:
booleantoken=false;
TouchPadpad1=TouchPad(1000,0);//定义触摸屏
TouchPadpad2=TouchPad(1001,1);
TouchPadpad3=TouchPad(1002,2);
TouchPadpad4=TouchPad(1003,3);
vpadvpad1=vpad(2000,0);//定义虚拟触屏
voidsetup(){
DEFINE_COMBINE4(vpad1,pad1,pad2,pad3,pad4);//把4个触屏绑定到vpad1中
touchpanel_start(pad1);//添加回调
touchpanel_start(pad2);//添加回调
touchpanel_start(pad3);//添加回调
touchpanel_start(pad4);
}
voidkeypadEvent(intid,intjion,KeyStatestate)//触屏按钮事件回调
{
BUTTON_EVENT(vpad1,104)//触屏按钮事件,这里参数是vpad1,表示vpad1绑定的触屏
{
PUSH//按下事件
{
token=!
token;//取反,自锁功能
}
}
}
voidstart()//主线程,循环执行
{
pad1.getlisten();//监听pad1回调事件
pad2.getlisten();//监听pad2回调事件
pad3.getlisten();//监听pad3回调事件
pad4.getlisten();//监听pad4回调事件
vpad1.send_button(104,token);//设置vpad1绑定的触屏jionNo.为104的按钮的状态
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 教程