找传奇、传世资源到传世资源站!

仰邦LED控制卡Demo

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

该程序是一个仰邦LED卡的Demo,主要是有连接控制卡、通过控制卡向LED发送文字、通过控制卡展示表格,注意该程序使用的是LedDynamicArea.dll动态链接库实现的,如果你有什么新的想法,可以在https://xian689.com沟通
from clipboard
from clipboardusing System;using System.Runtime.InteropServices;namespace OnbonLed{ public class Handler { #region DLL引入 /// <summary> /// 初始化动态库 /// </summary> /// <returns>详见返回状态代码定义</returns> /// <remarks>初始化动态库;该函数不与显示屏通讯</remarks> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "Initialize", CallingConvention = CallingConvention.StdCall)] public static extern int Initialize(); /// <summary> /// 释放动态库;该函数不与显示屏通讯 /// </summary> /// <returns></returns> /// <remarks>详见返回状态代码定义</remarks> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "Uninitialize", CallingConvention = CallingConvention.StdCall)] public static extern int Uninitialize(); //释放动态库 /// <summary> /// 向动态库中添加显示屏信息;该函数不与显示屏通讯 /// </summary> /// <param name="nControlType">显示屏的控制器型号,目前该动态区域动态库只支持BX-5E1、BX-5E2、BX-5E3等BX-5E系列控制器</param> /// <param name="nScreenNo">显示屏屏号;该参数与LedshowTW 2013软件中"设置屏参"模块的"屏号"参数一致</param> /// <param name="nSendMode">通讯模式;目前动态库中支持0:串口通讯;2:网络通讯(只支持固定IP模式);5:保存到文件等三种通讯模式</param> /// <param name="nWidth">显示屏宽度;单位:像素</param> /// <param name="nHeight">显示屏高度;单位:像素</param> /// <param name="nScreenType">显示屏类型;1:单基色;2:双基色</param> /// <param name="nPixelMode">点阵类型,只有显示屏类型为双基色时有效;1:R G;2:G R</param> /// <param name="pCom">通讯串口,只有在串口通讯时该参数有效;例:"COM1"</param> /// <param name="nBaud">通讯串口波特率,只有在串口通讯时该参数有效;目前只支持9600、57600两种波特率</param> /// <param name="pSocketIp">控制器的IP地址;只有在网络通讯(固定IP模式)模式下该参数有效,例:"192.168.0.199"</param> /// <param name="nSocketPort">控制器的端口地址;只有在网络通讯(固定IP模式)模式下该参数有效,例:5005</param> /// <param name="nStaticIpMode"></param> /// <param name="nServerMode">0:服务器模式未启动;1:服务器模式启动</param> /// <param name="pBarcode">设备条形码,用于服务器模式和中转服务器</param> /// <param name="pNetworkId">网络ID编号,用于服务器模式和中转服务器</param> /// <param name="pServerIp">中转服务器IP地址</param> /// <param name="nServerPort">中转服务器网络端口</param> /// <param name="pServerAccessUser">中转服务器访问用户名</param> /// <param name="pServerAccessPassword">中转服务器访问密码</param> /// <param name="pCommandDataFile">保存到文件方式时,命令保存命令文件名称。只有在保存到文件模式下该参数有效,例:"curCommandData.dat"</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "AddScreen_Dynamic",CallingConvention = CallingConvention.StdCall)] public static extern int AddScreen_Dynamic(int nControlType, int nScreenNo, int nSendMode, int nWidth, int nHeight, int nScreenType, int nPixelMode, string pCom, int nBaud, string pSocketIp, int nSocketPort, int nStaticIpMode, int nServerMode, string pBarcode, string pNetworkId, string pServerIp, int nServerPort, string pServerAccessUser, string pServerAccessPassword, string pCommandDataFile); /// <summary> /// 查询中转服务器设备的列表信息。 该函数与显示屏进行通讯 /// </summary> /// <param name="pTransitDeviceType">中转设备类型 BX-3GPRS,BX-3G</param> /// <param name="pServerIp">中转服务器IP地址</param> /// <param name="nServerPort">中转服务器网络端口</param> /// <param name="pServerAccessUser">中转服务器访问用户名</param> /// <param name="pServerAccessPassword">中转服务器访问密码</param> /// <param name="pDeviceList"> /// 保存查询的设备列表信息 /// 将设备的信息用组成字符串, 比如: /// 设备1:名称 条形码 状态 类型 网络ID /// 设备2:名称 条形码 状态 类型 网络ID /// 组成字符串为:'设备1名称,设备1条形码,设备1状态,设备1类型,设备1网络ID;设备2名称,设备2条形码,设备2状态,设备2类型,设备2网络ID' /// 设备状态(Byte) : /// $10:设备未知 /// $11:设备在线 /// $12:设备不在线 /// 设备类型(Byte): /// $16:设备为2G /// $17:设备为3G /// </param> /// <param name="nDeviceCount">查询的设备个数</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "QuerryServerDeviceList", CallingConvention = CallingConvention.StdCall)] public static extern int QueryServerDeviceList(string pTransitDeviceType, string pServerIp, int nServerPort, string pServerAccessUser, string pServerAccessPassword, byte[] pDeviceList, ref int nDeviceCount); /// <summary> /// 向动态库中指定显示屏添加动态区域;该函数不与显示屏通讯 /// </summary> /// <param name="nScreenNo">显示屏屏号</param> /// <param name="nDyAreaId">动态区域编号</param> /// <param name="nRunMode"> /// 动态区域运行模式: /// 0:动态区数据循环显示; /// 1:动态区数据显示完成后静止显示最后一页数据; /// 2:动态区数据循环显示,超过设定时间后数据仍未更新时不再显示; /// 3:动态区数据循环显示,超过设定时间后数据仍未更新时显示Logo信息,Logo 信息即为动态区域的最后一页信息 /// 4:动态区数据顺序显示,显示完最后一页后就不再显示 /// </param> /// <param name="nTimeOut">动态区数据超时时间;单位:秒 </param> /// <param name="nAllProRelate"> /// 节目关联标志; /// 1:所有节目都显示该动态区域; /// 0:在指定节目中显示该动态区域,如果动态区域要独立于节目显示,则下一个参数为空。 /// </param> /// <param name="pProRelateList">节目关联列表,用节目编号表示;节目编号间用","隔开,节目编号定义为LedshowTW 2013软件中"P***"中的"***"</param> /// <param name="nPlayImmediately">动态区域是否立即播放0:该动态区域与异步节目一起播放;1:异步节目停止播放,仅播放该动态区域</param> /// <param name="nAreaX">动态区域起始横坐标;单位:像素</param> /// <param name="nAreaY">动态区域起始纵坐标;单位:像素</param> /// <param name="nAreaWidth">动态区域宽度;单位:像素</param> /// <param name="nAreaHeight">动态区域高度;单位:像素</param> /// <param name="nAreaFMode">动态区域边框显示标志;0:纯色;1:花色;255:无边框</param> /// <param name="nAreaFLine">动态区域边框类型, 纯色最大取值为FRAME_SINGLE_COLOR_COUNT=23;花色最大取值为:FRAME_MULI_COLOR_COUNT=47</param> /// <param name="nAreaFColor">边框显示颜色;选择为纯色边框类型时该参数有效</param> /// <param name="nAreaFStunt"> /// 边框运行特技; /// 0:闪烁; /// 1:顺时针转动; /// 2:逆时针转动; /// 3:闪烁加顺时针转动; /// 4:闪烁加逆时针转动; /// 5:红绿交替闪烁; /// 6:红绿交替转动; /// 7:静止打出 /// </param> /// <param name="nAreaFRunSpeed">边框运行速度</param> /// <param name="nAreaFMoveStep">边框移动步长;该值取值范围:1~8</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "AddScreenDynamicArea", CallingConvention = CallingConvention.StdCall)] public static extern int AddScreenDynamicArea(int nScreenNo, int nDyAreaId, int nRunMode, int nTimeOut, int nAllProRelate, string pProRelateList, int nPlayImmediately, int nAreaX, int nAreaY, int nAreaWidth, int nAreaHeight, int nAreaFMode, int nAreaFLine, int nAreaFColor, int nAreaFStunt, int nAreaFRunSpeed, int nAreaFMoveStep); /// <summary> /// 删除动态库中指定显示屏指定的动态区域信息;该函数不与显示屏通讯 /// </summary> /// <param name="nScreenNo">显示屏屏号</param> /// <param name="nDyAreaId">动态区域编号</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", CallingConvention = CallingConvention.StdCall)] public static extern int DeleteScreenDynamicArea(int nScreenNo, int nDyAreaId); /// <summary> /// 向动态库中指定显示屏的指定动态区域添加信息文件;该函数不与显示屏通讯 /// </summary> /// <param name="nScreenNo">显示屏屏号</param> /// <param name="nDyAreaId">动态区域编号</param> /// <param name="pFileName">添加的信息文件名称</param> /// <param name="nShowSingle">文字信息是否单行显示;0:多行显示;1:单行显示</param> /// <param name="pFontName">文字信息显示字体</param> /// <param name="nFontSize">文字信息显示字体的字号</param> /// <param name="nBold">文字信息是否粗体显示;0:正常;1:粗体显示 </param> /// <param name="nFontColor">文字信息显示颜色;红255 绿65280 黄65535</param> /// <param name="nStunt"> /// ///动态区域信息运行特技; /// 00:随机显示 /// 01:静止显示 /// 02:快速打出 /// 03:向左移动 /// 04:向左连移 /// 05:向上移动 /// 06:向上连移 /// 07:闪烁 /// 08:飘雪 /// 09:冒泡 /// 10:中间移出 /// 11:左右移入 /// 12:左右交叉移入 /// 13:上下交叉移入 /// 14:画卷闭合 /// 15:画卷打开 /// 16:向左拉伸 /// 17:向右拉伸 /// 18:向上拉伸 /// 19:向下拉伸 /// 20:向左镭射 /// 21:向右镭射 /// 22:向上镭射 /// 23:向下镭射 /// 24:左右交叉拉幕 /// 25:上下交叉拉幕 /// 26:分散左拉 /// 27:水平百页 /// 28:垂直百页 /// 29:向左拉幕 /// 30:向右拉幕 /// 31:向上拉幕 /// 32:向下拉幕 /// 33:左右闭合 /// 34:左右对开 /// 35:上下闭合 /// 36:上下对开 /// 37:向右移动 /// 38:向右连移 /// 39:向下移动 /// 40:向下连移 /// </param> /// <param name="nRunSpeed">动态区域信息运行速度</param> /// <param name="nShowTime">动态区域信息显示时间;单位:10ms</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "AddScreenDynamicAreaFile", CallingConvention = CallingConvention.StdCall)] public static extern int AddScreenDynamicAreaFile(int nScreenNo, int nDyAreaId, string pFileName, int nShowSingle, string pFontName, int nFontSize, int nBold, int nFontColor, int nStunt, int nRunSpeed, int nShowTime); /// <summary> /// 向动态库中指定显示屏的指定动态区域添加信息文件;该函数不与显示屏通讯 /// </summary> /// <param name="nScreenNo">显示屏屏号;该参数与AddScreen函数中的nScreenNo参数对应</param> /// <param name="nDyAreaId">动态区域编号;该参数与AddScreenDynamicArea函数中的nDYAreaID参数对应</param> /// <param name="pText">添加的信息文本字符串</param> /// <param name="nShowSingle">文字信息是否单行显示;0:多行显示;1:单行显示;</param> /// <param name="pFontName">文字信息显示字体;</param> /// <param name="nFontSize">文字信息显示字体的字号;</param> /// <param name="nBold">文字信息是否粗体显示;0:正常;1:粗体显示;</param> /// <param name="nFontColor">文字信息显示颜色;红255 绿65280 黄65535</param> /// <param name="nStunt"> /// ///动态区域信息运行特技; /// 00:随机显示 /// 01:静止显示 /// 02:快速打出 /// 03:向左移动 /// 04:向左连移 /// 05:向上移动 /// 06:向上连移 /// 07:闪烁 /// 08:飘雪 /// 09:冒泡 /// 10:中间移出 /// 11:左右移入 /// 12:左右交叉移入 /// 13:上下交叉移入 /// 14:画卷闭合 /// 15:画卷打开 /// 16:向左拉伸 /// 17:向右拉伸 /// 18:向上拉伸 /// 19:向下拉伸 /// 20:向左镭射 /// 21:向右镭射 /// 22:向上镭射 /// 23:向下镭射 /// 24:左右交叉拉幕 /// 25:上下交叉拉幕 /// 26:分散左拉 /// 27:水平百页 /// 28:垂直百页 /// 29:向左拉幕 /// 30:向右拉幕 /// 31:向上拉幕 /// 32:向下拉幕 /// 33:左右闭合 /// 34:左右对开 /// 35:上下闭合 /// 36:上下对开 /// 37:向右移动 /// 38:向右连移 /// 39:向下移动 /// 40:向下连移 /// </param> /// <param name="nRunSpeed">动态区域信息运行速度</param> /// <param name="nShowTime">动态区域信息显示时间;单位:10ms</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "AddScreenDynamicAreaText", CallingConvention = CallingConvention.StdCall)] public static extern int AddScreenDynamicAreaText(int nScreenNo, int nDyAreaId, string pText, int nShowSingle, string pFontName, int nFontSize, int nBold, int nFontColor, int nStunt, int nRunSpeed, int nShowTime); /// <summary> /// 删除动态库中指定显示屏的所有信息;该函数不与显示屏通讯 /// </summary> /// <param name="nScreenNo">显示屏屏号;该参数与AddScreen函数中的nScreenNo参数对应</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "DeleteScreen_Dynamic", CallingConvention = CallingConvention.StdCall)] public static extern int DeleteScreen_Dynamic(int nScreenNo); /// <summary> /// 删除动态库中指定显示屏指定的动态区域指定文件信息;该函数不与显示屏通讯 /// </summary> /// <param name="nScreenNo">显示屏屏号;该参数与AddScreen函数中的nScreenNo参数对应</param> /// <param name="nDyAreaId">动态区域编号;该参数与AddScreenDynamicArea函数中的nDYAreaID参数对应</param> /// <param name="nFileOrd">动态区域的指定文件的文件序号;该序号按照文件添加顺序,从0顺序递增,如删除中间的文件,后面的文件序号自动填充</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "DeleteScreenDynamicAreaFile", CallingConvention = CallingConvention.StdCall)] public static extern int DeleteScreenDynamicAreaFile(int nScreenNo, int nDyAreaId, int nFileOrd); /// <summary> /// 发送动态库中指定显示屏指定的动态区域信息到显示屏;该函数与显示屏通讯 /// </summary> /// <param name="nScreenNo">显示屏屏号;该参数与AddScreen函数中的nScreenNo参数对应</param> /// <param name="nDelAllDyArea">动态区域编号列表;1:同时发送多个动态区域,0:发送单个动态区域</param> /// <param name="pDyAreaIdList">动态区域编号;当nDelAllDYArea为1时,其值为"";当nDelAllDYArea为0时,该参数与AddScreenDynamicArea函数中的nDYAreaID参数对应,发送相应动态区域</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "SendDynamicAreasInfoCommand", CallingConvention = CallingConvention.StdCall)] public static extern int SendDynamicAreasInfoCommand(int nScreenNo, int nDelAllDyArea, string pDyAreaIdList); /// <summary> /// 删除动态库中指定显示屏指定的动态区域信息;同时向显示屏通讯删除指定的动态区域信息。该函数与显示屏通讯 /// </summary> /// <param name="nScreenNo">显示屏屏号;该参数与AddScreen函数中的nScreenNo参数对应</param> /// <param name="nDelAllDyArea">动态区域编号列表;1:同时删除多个动态区域,0:删除单个动态区域</param> /// <param name="pDyAreaIdList">动态区域编号;当nDelAllDYArea为1时,其值为"";当nDelAllDYArea为0时,该参数与AddScreenDynamicArea函数中的nDYAreaID参数对应,删除相应动态区域</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "SendDeleteDynamicAreasCommand", CallingConvention = CallingConvention.StdCall)] public static extern int SendDeleteDynamicAreasCommand(int nScreenNo, int nDelAllDyArea, string pDyAreaIdList); //删除指定动态区域的信息 /// <summary> /// 启动服务器,用于网络模式下的服务器模式和GPRS通讯模式 /// </summary> /// <param name="nSendMode"> /// 与显示屏的通讯模式; /// 0:串口模式、BX-5A2 & RF、BX-5A4 & RF 等控制器为RF串口无线模式; /// 1:GPRS模式 /// 2:网络模式 /// 4:WiFi模式 /// 5:ONBON服务器-GPRS /// 6:ONBON服务器-3G /// </param> /// <param name="pServerIp">中转服务器IP地址</param> /// <param name="nServerPort">中转服务器网络端口</param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "StartServer", CallingConvention = CallingConvention.StdCall)] public static extern int StartServer(int nSendMode, string pServerIp, int nServerPort); /// <summary> /// 关闭服务器,用于网络模式下的服务器模式和GPRS通讯模式 /// </summary> /// <param name="nSendMode"> /// 与显示屏的通讯模式; /// 0:串口模式、BX-5A2 & RF、BX-5A4 & RF等控制器为RF串口无线模式; /// 1:GPRS模式 /// 2:网络模式 /// 4:WiFi模式 /// 5:ONBON 服务器 -GPRS /// 6:ONBON 服务器-3G /// </param> /// <returns></returns> [DllImport("dll/LedDynamicArea.dll", EntryPoint = "StopServer", CallingConvention = CallingConvention.StdCall)] public static extern int StopServer(int nSendMode); #endregion #region 常量定义 /// <summary> /// 动态区域运行模式: /// 0:动态区数据循环显示; /// 1:动态区数据显示完成后静止显示最后一页数据; /// 2:动态区数据循环显示,超过设定时间后数据仍未更新时不再显示; /// 3:动态区数据循环显示,超过设定时间后数据仍未更新时显示Logo信息,Logo 信息即为动态区域的最后一页信息 /// 4:动态区数据顺序显示,显示完最后一页后就不再显示 /// </summary> private const int RunModel = 0; //RUN_MODE_CYCLE_SHOW /// <summary> /// 返回状态代码定义,现在为没有错误 /// </summary> private const int ReturnNoError = 0; /// <summary> /// 动态区域编号 /// </summary> private const int ScreenDyAreaId = 0; /// <summary> /// 显示屏宽度 /// </summary> private const int ScreenWidth = 96; /// <summary> /// 显示器高度 /// </summary> private const int ScreenHeight = 32; #endregion public static string GetLedResultMsg(int code) { switch (code) { case 0xE1: return "没有找到有效的动态区域"; case 0xE2: return "在指定的动态区域没有找到指定的文件序号"; case 0xE3: return "在指定的动态区域没有找到指定的页序号"; case 0xE4: return "动态库不支持该文件类型"; case 0xF8: return "系统中已经有该显示屏信息。如要重新设定请先执行DeleteScreen函数删除该显示屏后再添加"; case 0xFA: return "系统中没有找到有效的动态区域;可以先执行AddScreenDynamicArea函数添加动态区域信息后再添加"; case 0xFC: return "系统内没有查找到该显示屏;可以使用AddScreen函数添加该显示屏"; case 0xFD: return "系统内正在向该显示屏通讯,请稍后再通讯"; case 0xFF: return "其它错误"; case 0: return "函数执行成功"; case 0xFE: return "通讯错误。"; default: return $"错误码未知,错误码为:{code}"; } } public static Action<string> Notify; private static readonly int ScreenNo = 1; private static readonly string HeadCommandDataFileName = "curCommandData"; /// <summary> /// 初始 /// </summary> /// <returns></returns> public static bool InitLed() { try { var nResult = Initialize(); //只需要一次 if (nResult != ReturnNoError) { var errorInfo = GetLedResultMsg(nResult); Notify?.Invoke(errorInfo); return false; } return true; } catch (Exception e) { Notify?.Invoke(e.ToString()); return false; } } public static bool Add(string ip, int port = 5005) { try { var commandDataFileName = HeadCommandDataFileName ScreenNo ".dat"; //向动态库中添加显示屏信息;该函数不与显示屏通讯,只用于动态库中的指定显示屏参数信息配置 var result = AddScreen_Dynamic( 0x0154, //显示屏的控制器型号,CONTROLLER_BX_5E1 ScreenNo, 2, //通讯模式;目前动态库中支持0:串口通讯;2:网络通讯;5:保存到文件等三种通讯模式 ScreenWidth, ScreenHeight, 1, // 显示屏类型;1:单基色;2:双基色 2, //点阵类型,只有显示屏类型为双基色时有效;1:R G;2:G R "", //通讯串口,只有在串口通讯时该参数有效;例:"COM1" 57600, //通讯串口波特率,只有在串口通讯时该参数有效;目前只支持9600、57600两种波特率 ip, //IP port, //端口号 0, //0:TCP模式 1:UDP模式 0, //0:服务器模式未启动;1:服务器模式启动。 "", // 服务器模式时的设备条形码 "", //服务器模式时的网络ID编号 "", //中转服务器IP地址 5008, //中转服务器网络端口 "", //中转服务器访问用户名 "", //中转服务器访问密码 commandDataFileName //保存到文件方式时,命令保存命令文件名称。只有在保存到文件模式下该参数有效,例:"curCommandData.dat" ); if (result != ReturnNoError) { var errorInfo = GetLedResultMsg(result); Notify?.Invoke(errorInfo); return false; } result = AddScreenDynamicArea( ScreenNo, ScreenDyAreaId, RunModel, 3, 1, "", 1, 0, 0, ScreenWidth, ScreenHeight, 255, 0, 255, 7, 1, 1 ); if (result != ReturnNoError) { var errorInfo = GetLedResultMsg(result); Notify?.Invoke(errorInfo); return false; } return true; } catch { return false; } } /// <summary> /// 向LED发送数据 /// </summary> /// <param name="ledMessage">消息内容</param> /// <returns></returns> public static bool SendDataToLed(string ledMessage) { var result = AddScreenDynamicAreaText( ScreenNo, ScreenDyAreaId, ledMessage, 0, "宋体", 12, 0, 65535, 2, 7, 15 ); if (result != ReturnNoError) { var errorInfo = GetLedResultMsg(result); Notify?.Invoke(errorInfo); return false; } result = SendDynamicAreasInfoCommand(ScreenNo, 1, ""); if (result != ReturnNoError) { var errorInfo = GetLedResultMsg(result); Notify?.Invoke(errorInfo); return false; } return true; } /// <summary> /// 向LED发送文件 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static bool SendFileToLed(string filePath) { var result = AddScreenDynamicAreaFile( ScreenNo, ScreenDyAreaId, filePath, 0, "宋体", 12, 0, 65535, 2, 7, 15 ); if (result != ReturnNoError) { var errorInfo = GetLedResultMsg(result); Notify?.Invoke(errorInfo); return false; } result = SendDynamicAreasInfoCommand(ScreenNo, 1, ""); if (result != ReturnNoError) { var errorInfo = GetLedResultMsg(result); Notify?.Invoke(errorInfo); return false; } return true; } public static void Close() { Uninitialize(); } }}

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复