写此博客意为抛砖引玉,希望能和博客园的朋友们探讨一下关于.NET 在工业方面的应用,包括:物联网、无线通信、嵌入式开发、工业控制等等。欢迎探讨,多多指教!^_^
下面是我在开发中,使用C#代码实现对安装在COM 串行端口上的SIM卡拨号器的拨号调度程序。
应用场景:
在使用新能源的风光互补路灯远程管理系统中,通信服务器需要通过无线通信方式唤醒上位机。
> 上位机中内置GPRS 无线上网卡,被安装在风光互补路灯中。
> 通信服务器上扩展出4个COM 串行端口,分别安装有:西门子C35TS 拨号器和西门子MC52I 拨号器。
使用需求:
> 监控中心跟上位机进行通信前,对没有连接上的上位机先使用拨号器唤醒;
> 由于长时间连续使用拨号器进行拨号,将导致拨号器的宕机情况,所以采用轮番调用的线性方式使用4个拨号器;
> 实现自动检测服务器上的COM 串行端口,并自动识别可使用的拨号器;
> 增加拨号器后,程序能自动识别并添加使用;
> 拔出拨号器后,程序能自动识别并停止使用;
> 能克服拨号器的宕机、假死等异常情况,并在指定的间隔时间重新检测拨号器,并添加到服务器中使用;
> 让拨号器通过SIM卡,实现对上位机的拨号,挂机等功能;
程序实现:
程序中应用到AT 指令集,详细介绍请看百度百科。这里附上一些简单的AT 指令集:
在程序项目中,需要引用如下程序集:
并使用到了.NET 的串行端口资源 SerialPort 类。
MySerialPort 类
对每一个连接到COM 串行端口的拨号器实例化 MySerialPort 对象,代码如下:
SerialPortList 类
定义一个 SerialPortList 类,实现对所有连接上的拨号器 MySerialPort 对象进行管理和调度使用。代码如下:
测试代码如下:
测试结果:
参考资源:
<a href="http://blog.csdn.net/cy757/article/details/4474930">在C# 中使用SerialPort 类实现串口通信(陆续更新)</a>
<a href="http://blog.csdn.net/linfeng999/article/details/6121003">AT 指令发送短信流程</a>
<a href="http://blog.csdn.net/linfeng999/article/details/6601328">短信 PDU 解码</a>