CCO4動態(tài)鏈接庫使用說明
(版本:1.0.2.0)
編寫: 王瑞恩 ?
審核: ?
二○二○年五月二十日
一、動態(tài)庫文件:
1、CC04Sdk.dll 動態(tài)庫主文件(32位);
2、CC04Sdk.key 控制器授權(quán)文件;
* 調(diào)用時必須把兩個文件同時復(fù)制到與項目主程序同一目錄下,否則動態(tài)庫將調(diào)用失敗。
二、函數(shù)說明:
1、函數(shù)名:OpenCom
功能說明:初始化通信串口
函數(shù)原型:int __stdcall OpenCom(DWORD dwPort)
輸入?yún)?shù):dwPort:通信串口號(1~1024)
輸出參數(shù):無
返 回 值:0:初始化失敗
1:初始化成功
2、函數(shù)名:CloseCom
功能說明:關(guān)閉通信串口
函數(shù)原型:void __stdcall CloseCom(void)
輸入?yún)?shù):無
輸出參數(shù):無
返 回 值:無
3、函數(shù)名:DllBind
功能說明:綁定控制器授權(quán)文件
函數(shù)原型:int __stdcall DllBind(unsigned int nSlaver)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):無
返 回 值:1:綁定成功
-1:通信串口未初始化
-2:制器地址無效
-3:控制器通信失敗
-4:未找到授權(quán)文件
-5:授權(quán)文件無效
-6:授權(quán)文件與控制器不匹配
-7:系統(tǒng)時間異常
-8:授權(quán)文件已過期
-99:未知錯誤
* 初始化通信串口后,必須先調(diào)用此函數(shù),綁定成功后,其他函數(shù)才能使用。
4、函數(shù)名:IsComOpen
功能說明:檢查通信串口是否初始化
函數(shù)原型:int __stdcall IsComOpen(void)
輸入?yún)?shù):無
輸出參數(shù):無
返 回 值:0:未初始化
1:已初始化
5、函數(shù)名:SetDefault
功能說明:控制器恢復(fù)出廠設(shè)置
函數(shù)原型:int __stdcall SetDefault(unsigned int nSlaver)
輸入?yún)?shù):nSlaver:控制器地址(0-16)[0為廣播模式,慎用!]
輸出參數(shù):無
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
* nSlaver參數(shù)為0時,函數(shù)執(zhí)行為廣播模式,既連接在同一總線上的所有控制器將同時被恢復(fù)出廠設(shè)置;執(zhí)行此函數(shù)成功后,被恢復(fù)出廠設(shè)置的控制器地址同時被恢復(fù)為1。
6、函數(shù)名:GetSerial
功能說明:獲取控制器序列號
函數(shù)原型:int __stdcall GetSerial(unsigned int nSlaver,
char** szID)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):szID:控制器序列號
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
7、函數(shù)名:GetSwichState
功能說明:獲取控制器開關(guān)狀態(tài)
函數(shù)原型:int __stdcall GetSwichState(unsigned int nSlaver,
char** szSwichState)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):szSwichState:控制器開關(guān)狀態(tài)(順序:從“左→右” 對應(yīng)
“開關(guān)1→開關(guān)6”;0:關(guān);1:開)
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
8、函數(shù)名:GetRightExtremity
功能說明:獲取控制器右極限狀態(tài)
函數(shù)原型:int __stdcall GetRightExtremity(unsigned int nSlaver,
int* nLimit)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):nLimit:控制器右極限狀態(tài)(0:斷開;1:閉合)
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
9、函數(shù)名:GetLeftExtremity
功能說明:獲取控制器左極限狀態(tài)
函數(shù)原型:int __stdcall GetLeftExtremity(unsigned int nSlaver,
int* nLimit)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):nLimit:控制器左極限狀態(tài)(0:斷開;1:閉合)
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
10、函數(shù)名:GetRightLimit
功能說明:獲取控制器右限狀態(tài)
函數(shù)原型:int __stdcall GetRightLimit(unsigned int nSlaver,
int* nLimit)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):nLimit:控制器右限狀態(tài)(0:斷開;1:閉合)
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
11、函數(shù)名:GetLeftLimit
功能說明:獲取控制器左限狀態(tài)
函數(shù)原型:int __stdcall GetLeftLimit(unsigned int nSlaver,
int* nLimit)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):nLimit:控制器左限狀態(tài)(0:斷開;1:閉合)
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
12、函數(shù)名:GetRunState
功能說明:獲取控制器運行狀態(tài)
函數(shù)原型:int __stdcall GetRunState(unsigned int nSlaver,
int* nRunState)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):nRunState:控制器運行狀態(tài)(0-停止;1-自動;2-左移;3-右移)
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
13、函數(shù)名:GetRemoteKeyState
功能說明:獲取控制器遙控器按鍵狀態(tài)
函數(shù)原型:int __stdcall GetRemoteKeyState(unsigned int nSlaver,
int* nKeyState)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):nKeyState:控制器按鍵狀態(tài)(0-無按鍵;1-后退鍵;2-前進鍵;
3-自動鍵;4-停止鍵)
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
* 每次遙控器按鈕新狀態(tài)只存在3秒時間,3秒后自動恢復(fù)為0。
14、函數(shù)名:GetBiosDate
功能說明:獲取控制器BIOS日期
函數(shù)原型:int __stdcall GetBiosDate(unsigned int nSlaver,
char** szDate)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):szDate:控制器BIOS日期
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
15、函數(shù)名:GetFactroyDate
功能說明:獲取控制器出廠日期
函數(shù)原型:int __stdcall GetFactroyDate(unsigned int nSlaver,
char** szDate)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):szDate:控制器出廠日期
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
16、函數(shù)名:GetCurrentPoint
功能說明:獲取當(dāng)前坐標(biāo)(cm)
函數(shù)原型:int __stdcall GetCurrentPoint(unsigned int nSlaver,
float* fPoint)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):fPoint:當(dāng)前坐標(biāo)(cm)
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
17、函數(shù)名:SetInit
功能說明:初始化控制器(開關(guān)全關(guān),停止移動)
函數(shù)原型:int __stdcall SetInit(unsigned int nSlaver)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):無
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
18、函數(shù)名:SetMoveLeft
功能說明:發(fā)送向左移動指令
函數(shù)原型:int __stdcall SetMoveLeft(unsigned int nSlaver)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):無
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
19、函數(shù)名:SetMoveRight
功能說明:發(fā)送向右移動指令
函數(shù)原型:int __stdcall SetMoveRight(unsigned int nSlaver)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):無
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
20、函數(shù)名:SetMoveAuto
功能說明:發(fā)送自動移動指令
函數(shù)原型:int __stdcall SetMoveAuto(unsigned int nSlaver)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):無
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
21、函數(shù)名:SetMoveStop
功能說明:發(fā)送停止移動指令
函數(shù)原型:int __stdcall SetMoveStop(unsigned int nSlaver)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):無
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
22、函數(shù)名:SetSwichAllOff
功能說明:發(fā)送控制器開關(guān)全關(guān)指令
函數(shù)原型:int __stdcall SetSwichAllOff(unsigned int nSlaver)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):無
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
23、函數(shù)名:SetSwichAllOn
功能說明:發(fā)送控制器開關(guān)全開指令
函數(shù)原型:int __stdcall SetSwichAllOn(unsigned int nSlaver)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
輸出參數(shù):無
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
24、函數(shù)名:SetSwichState
功能說明:設(shè)置控制器開關(guān)狀態(tài)
函數(shù)原型:int __stdcall SetSwichState(unsigned int nSlaver,
unsigned int nSwich,
unsigned int nState)
輸入?yún)?shù):nSlaver:控制器地址(1-16)
nSwich:開關(guān)順序號(1-6)
nState:開關(guān)狀態(tài)(0:關(guān);1:開)
輸出參數(shù):無
返 回 值:0:調(diào)用失敗
1:調(diào)用成功
三、動態(tài)庫調(diào)用流程:
1、初始化通信串口(OpenCom);
2、綁定控制器授權(quán)文件(DllBind);
3、調(diào)用函數(shù)(…);
4、調(diào)用函數(shù)(…);
5、……
6、關(guān)閉通信串口(CloseCom)。
四、調(diào)用示例(C#)
1、函數(shù)聲明:
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "OpenCom")]
public static extern int OpenCom(int iPort);
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "CloseCom")]
public static extern void CloseCom();
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "DllBind")]
public static extern int DllBind(uint iSlaver);
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "IsComOpen")]
public static extern int IsComOpen();
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "GetSerial")]
public static extern int GetSerial(uint iSlaver, ref string strId);
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "GetRunState")]
public static extern int GetRunState(uint iSlaver, ref int iRunState);
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "GetCurrentPoint")]
public static extern int GetCurrentPoint(uint iSlaver, ref float fPoint);
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "SetInit")]
public static extern int SetInit(uint iSlaver);
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "SetMoveLeft")]
public static extern int SetMoveLeft(uint iSlaver);
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "SetMoveRight")]
public static extern int SetMoveRight(uint iSlaver);
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "SetMoveAuto")]
public static extern int SetMoveAuto(uint iSlaver);
[DllImport("CC04Sdk.dll", CharSet = CharSet.Ansi, EntryPoint = "SetMoveStop")]
public static extern int SetMoveStop(uint iSlaver);
2、調(diào)用示例:
var iRet = CC04Sdk.OpenCom(7);
if (iRet != 1)
{
MessageBox.Show(@"通信串口初始化失?。?/span>", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
MessageBox.Show(@"通信串口初始化成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
iRet = CC04Sdk.DllBind(1);
if (iRet == 1)
{
timer1.Enabled = true;
MessageBox.Show(@"綁定控制器授權(quán)文件成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(@"綁定控制器授權(quán)文件失敗!返回碼:" + iRet, @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
iRet = CC04Sdk.SetInit(1);
if (iRet == 1)
{
MessageBox.Show(@"初始化控制器成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(@"初始化控制器失?。?/span>", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
var str = "";
iRet = CC04Sdk.GetSerial(1, ref str);
if (iRet == 1)
{
MessageBox.Show(@"獲取控制器序列號成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show(@"序列號:" + str, @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(@"獲取控制器序列號失敗!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
var iRun = -1;
iRet = CC04Sdk.GetRunState(1, ref iRun);
if (iRet == 1)
{
MessageBox.Show(@"獲取控制器運行狀態(tài)成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show(@"運行狀態(tài):" + iRun, @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(@"獲取控制器運行狀態(tài)失??!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
float fRet = 0;
iRet = CC04Sdk.GetCurrentPoint(1, ref fRet);
if (iRet == 1)
{
MessageBox.Show(@"獲取當(dāng)前坐標(biāo)成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show(@"當(dāng)前坐標(biāo):" + fRet.ToString("0.0"), @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(@"獲取當(dāng)前坐標(biāo)失??!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
iRet = CC04Sdk.SetMoveLeft(1);
if (iRet == 1)
{
MessageBox.Show(@"發(fā)送向左移動指令成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(@"發(fā)送向左移動指令失敗!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
iRet = CC04Sdk.SetMoveRight(1);
if (iRet == 1)
{
MessageBox.Show(@"發(fā)送向右移動指令成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(@"發(fā)送向右移動指令失??!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
iRet = CC04Sdk.SetMoveAuto(1);
if (iRet == 1)
{
MessageBox.Show(@"發(fā)送自動動指令成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(@"發(fā)送自動動指令失??!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
iRet = CC04Sdk.SetMoveStop(1);
if (iRet == 1)
{
MessageBox.Show(@"發(fā)送停止動指令成功!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(@"發(fā)送停止動指令失敗!", @"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
CC04Sdk.CloseCom();