概述
八路收发组件封装了底层与串口交互的部分以及多个通道的调度管理工作,提供给应用程序一个统一的调用接口。
该组件采用进程外COM组件的形式提供,同时支持本地及远程调用。
 
方法
 ICoSmsEngine = interface(IDispatch)
    ['{E66ADB1F-4BBD-474B-87DB-22A98F98FD15}']
    function GetNewCall(out CallPhone: WideString; out CallTime: WideString): Integer; safecall;//取得新来电信息,返回值0表示成功
 
    function GetNewMsg(out phone: WideString; out RcvDate: WideString; out Content: WideString): Integer; safecall;//取得来信,返回值0表示成功
 
    function SendSms(const Phone: WideString; const Content: WideString): Integer; safecall;//提交一条短信进行发送,返回值为分配的序号
 
    function SetBoxOption(Extcmd: Integer; const OptionStr: WideString): Integer; safecall;//设置设备参数
ExtCmd 取值
OptionStr 取值(字符)
5 中心接入号
为中心接入号码如”11866”
6 中心来电号
中心来电号码 如“1180000”
10 短信回执
ASCII码0 表示不需回执,1 需要回执
13 上传方式选择
ASCII码 0 DTMF 1 FSK
 
    procedure CloseChannel(ChanneliD: Integer); safecall;
//关闭通道,通道号取值0-7
 
    procedure OpenChannel(ChannelID: Integer); safecall;
//打开一个通道,通道号取值0-7
 
    function ComportInit(port: Integer): Integer; safecall;
 end;//初始化串口和设备,为0表示成功。Port为串口号
 
    function CancelSend(smsID: Integer): Integer; safecall;
//取消发送,smsID为短信序号,返回0表示取消成功。注意:只有尚未发送到通道的短信才能取消
 
    function ReadBoxOption(Extcmd: Integer;
      out OptionStr: WideString): Integer; safecall;
//读取设备设置
 
2006-2-16增加:
function Reset: Integer; safecall;
//用于底层模块复位,返回0表示复位成功。注意:复位结束(不管成功与否)后,需对底层模块做初始化,故必须再等待延时(一般15″)后才能继续做其他处理;
    此函数针对2006-2-14后底层芯片升级后的八口短信设备。
事件
本组件提供事件回调,不需要客户端轮询。
    procedure OnNewMsg(Sender:TObject);
当有新来信时触发这一事件,客户端应在这一事件中调用GetNewMsg函数取得具体内容
 
    procedure OnNewCall(Sender:TObject);
当有来电时触发这一消息,客户端应在这一事件中调用GetNewCall函数取得具体内容
 
    procedure OnSent(Sender:TObject ;smsID: Integer; status: Integer);
当提交的短信发送成功或失败时触发这一事件,smsID为当初分配的序号,Status=2表示成功,3表示短信盒返回失败(08 02),4表示短信盒返回超时失败,176开始为BB后的失败原因(见协议)
    procedure OnSending(smsID: Integer; Channelid: Integer);
//当提交的短信分配到通道号,开始发送时触发。smsID为当初分配的序号,Channelid表示通道号
 
    Procedure OnChannelChanged(ChannelID,Status:Integer);
//当通道状态改变时触发这一事件,Status取值如下:0 关闭 1 就绪 2 忙
 
属性
通道连续失败到达一定次数,则自动关闭:AutoCloseCount,默认20,为0则不关闭,具体用法见Demo源码。
 
配置及开发
针对Delphi的使用说明(C++Builder类似)
首先运行一次 Engine.exe /regserver 以进行注册
如果有以前版本的控件,则在Install Package中remove以卸载
其次在开发环境中选 Project-Import Type Library
出现下述对话框
点Add,选择Engine.tlb
 
 
确保选择了 Generate Component Wrapper 选项,然后点Install
 
此时该组件会出现于ActiveX组件板上,您可以像其他VCL组件一样使用
该组件支持的前述事件可以在Object Inspector中看到
 
 
安装成功后就可以打开所附的Demo查看源代码
 
注意:一个通道连续发送失败20次(默认)将自动关闭。
在托盘图标点右键或双击可以打开监视窗口。该监视界面仅作为现阶段调试之用。
其他说明:
八路短信和以前的单路最主要的不同在于发送的异步性。客户提交一条短信后只要接收到缓存就马上返回,发送情况稍后再通过事件返回。所以在Demo中可以看到只要按下“发送”,调用几乎没有延迟地马上返回,而提交的短信在监视窗口中可以看到已进入待处理队列。
另外,当COM服务重新启动时,分配的短信编号总是重新从1开始,所以您不能将返回的短信编号作为数据表主键。
当短信发送失败时,收发引擎并不会自动转发到其他通道。
还有,收发引擎并不会对送来的号码和内容进行检查,所以客户端需要自行处理。比如:同一条短信的接收方不能超过5个号码,中间用‘#’分隔,号码中不能含有数字之外的其他字符;针对手机,每条短信的最大长度是70个字;对于小灵通,则各地都有不同,需要根据当地情况自行处理分拆
对于客户端使用VB,VC等其他开发工具的,可以使用运行时创建COM服务器的办法进行与收发引擎的互动。收发引擎的事件是采用ConnectionPoint技术实现的,客户端如何应用请参阅有关COM和ActiveX编程资料。
 
 
 
 
南京昆鹰通信技术有限公司
二○○五年十二月