//////////////////////////////////////////////////////////////////////////
// [压溃机项目] - 控制逻辑模块 based on adcard.dll - by romi01 -
//////////////////////////////////////////////////////////////////////////
// EXPORTS
#pragma comment(linker, "/export:_YkjStartTest@12,@1")
#pragma comment(linker, "/export:_YkjStopTest@0,@2")
#pragma comment(linker, "/export:_YkjStepTest@8,@3")
#pragma comment(linker, "/export:_YkjStopDO@0,@4")
#pragma comment(linker, "/export:_YkjADResult@0,@5")
#pragma comment(linker, "/export:_YkjGetVx@8,@6")
//////////////////////////////////////////////////////////////////////////
#pragma comment(linker, "/filealign:0x200")
#pragma comment(linker, "/entry:main")
#include "jkY.H"
//////////////////////////////////////////////////////////////////////////
// imports from adcard.dll
typedef int (__stdcall *PInitial)(WORD, WORD, DWORD, WORD);
typedef int (__stdcall *PRegisterNotify)(UINT, HWND, UINT, UINT, LONG);
typedef DWORD (__stdcall *PStartIntr)(WORD, DWORD, WORD, WORD, DWORD, DWORD, WORD);
typedef int (__stdcall *PStopIntr)();
typedef int (__stdcall *PADResult)(PVOID);
typedef void (__stdcall *PConfigInfo)(char*, int*, int*, int*, int*, float*, float*, int*);
typedef int (__stdcall *PRbh_DI)(WORD, WORD*);
typedef int (__stdcall *PRbh_DO)(WORD, WORD);
PInitial Initial;
PRegisterNotify RegisterNotify;
PStartIntr StartIntr;
PStopIntr StopIntr;
PADResult ADResult;
PConfigInfo ConfigInfo;
PRbh_DI Rbh_DI;
PRbh_DO Rbh_DO;
//////////////////////////////////////////////////////////////////////////
// TEST_STEP
typedef struct _TEST_STEP {
BYTE DOValue;
BYTE DIValue;
} TEST_STEP;
const TEST_STEP g_step[8] =
{
{MOTION_CCUF, DI_1}, // step 1
{MOTION_CCD, DI_2}, // step 2
{MOTION_MCF, DI_6}, // step 3
{MOTION_MCB, DI_4}, // step 4
{DO_1, DI_7}, // step 5
{MOTION_MCF, DI_5}, // step 6
{MOTION_CCUF, DI_3}, // step 7
{MOTION_CCUT, DI_1} // step 8
};
//////////////////////////////////////////////////////////////////////////
// global
HMODULE g_hAdcardDll = NULL;
HANDLE g_hTestThread = NULL;
PVOID g_pADBuf = NULL;
//////////////////////////////////////////////////////////////////////////
// 得到Vzero和Vmax
VOID WINAPI YkjGetVx(float *pVzero, float *pVmax)
{
int x;
char DrvName[20];
ConfigInfo(DrvName, &x, &x, &x, &x, pVzero, pVmax, &x);
}
// 得到缓冲区中的采集结果
PVOID WINAPI YkjADResult()
{
if (g_pADBuf != NULL) {
// 把最先有采集结果的那个缓冲区拷贝到g_pADBuf,并释放此缓冲区。
ADResult(g_pADBuf);
}
return g_pADBuf;
}
//////////////////////////////////////////////////////////////////////////
// 虚拟数字量输入输出
#define _YKJVDIO
#ifdef _YKJVDIO
HANDLE g_hYkjThread;
LONG ykj_x, ykj_y;
BYTE ykj_di = 0, ykj_do = 0xFF;
BYTE WINAPI YkjDI()
{
return ykj_di;
}
VOID WINAPI YkjDO(BYTE DOValue)
{
ykj_do = DOValue;
}
DWORD WINAPI YkjThread(LPVOID lpParameter)
{
ykj_x = 30;
ykj_y = 0;
while (TRUE)
{
if (ykj_do == MOTION_NONE)
{
ykj_di = 0;
ykj_do = 0xFF;
break;
}
switch (ykj_do)
{
case MOTION_MCF:
if (ykj_y == 0)
{
if (ykj_x == 60) {
ykj_di = DI_6;
}
else
{
if (ykj_x == 30)
{
ykj_di = DI_5;
Sleep(200);
}
ykj_x++;
}
}
break;
case MOTION_MCB:
if (ykj_y == 0)
{
if (ykj_x == 0) {
ykj_di = DI_4;
}
else {
ykj_x--;
}
}
break;
case MOTION_CCD:
if (ykj_x == 30)
{
if (ykj_y == 0) {
ykj_di = DI_2;
}
else {
ykj_y -= 2;
}
}
break;
case MOTION_CCUT:
/*
if (ykj_x == 30)
{
if (ykj_y == 100) {
ykj_di = DI_1;
}
else {
ykj_y++;
}
}
*/
break;
case MOTION_CCUF:
if (ykj_x == 31) {
ykj_x--;
}
if (ykj_x == 30)
{
if (ykj_y == 100) {
ykj_di = DI_1;
}
else
{
if (ykj_y == 80)
{
ykj_di = DI_3;
Sleep(200);
}
ykj_y += 2;
}
}
break;
case DO_1:
Sleep(2000);
ykj_di = DI_7;
break;
}
Sleep(100);
}
CloseHandle(g_hYkjThread);
return 0;
}
#else
/* 数字量输入 (DI)
LOBYTE (low-order byte)
BIT 0 - 上限位置开关
BIT 1 - 下限位置开关
BIT 2 - 小球接触开关
BIT 3 - 进料位置传感器
BIT 4 - 测试位置传感器
BIT 5 - 清扫位置传感器
BIT 6 - 小球进料传感器
BIT 7 - 电气保护开关
HIBYTE (high-order byte)
BIT 0 - 紧急开关
WORD WINAPI YkjDIW()
{
WORD DIValue[2];
Rbh_DI(2, DIValue);
return (DIValue[0] | (DIValue[1] << 8));
}
*/
BYTE WINAPI YkjDI()
{
WORD DIValue;
Rbh_DI(1, &DIValue);
return (BYTE)DIValue;
}
/* 数字量输出 (DO)
BIT 0 - 螺旋振动进料
BIT 1 - 阻塞螺线管, (SVB)
BIT 2 - 快速螺线管, (SVARC)
BIT 3 - 向上螺线管, (SVSC)
BIT 4 - 向后螺线管, (SVRP)
BIT 5 - 向前螺线管, (SVAP)
BIT 6 - 向下螺线管, (SVDC)
BIT 7 - 报警
*/
VOID WINAPI YkjDO(BYTE DOValue)
{
Rbh_DO(0, DOValue);
}
#endif // _YKJVDIO
//////////////////////////////////////////////////////////////////////////
VOID WINAPI Xstep(HWND hWnd, BYTE DOValue, BYTE DIValue)
{
YkjDO(DOValue);
PostMessage(hWnd, WM_DORESULT, DOValue, DIValue);
BYTE ykjdi;
while (TRUE)
{
ykjdi = YkjDI();
PostMessage(hWnd, WM_DIRESULT, ykjdi, 0);
if (ykjdi & DIValue) {
break;
}
else {
Sleep(100);
}
}
}
DWORD WINAPI StopTest(HWND hWnd)
{
YkjDO(MOTION_NONE);
PostMessage(hWnd, WM_DORESULT, MOTION_NONE, 0);
CloseHandle(g_hTestThread);
g_hTestThread = NULL;
return 0;
}
DWORD WINAPI StepTest(LPVOID lpParameter)
{
PULONG pParameter = (PULONG)lpParameter;
HWND hWnd = (HWND)pParameter[0];
ULONG xstep = pParameter[1];
Xstep(hWnd, g_step[xstep-1].DOValue, g_step[xstep-1].DIValue);
return StopTest(hWnd);
}
DWORD WINAPI StartTest(LPVOID lpParameter)
{
PULONG pParameter = (PULONG)lpParameter;
HWND hWnd = (HWND)pParameter[0];
ULONG pellets = pParameter[1];
Xstep(hWnd, g_step[0].DOValue, g_step[0].DIValue); // step 1
for (ULONG i = 0; i < pellets; i++)
{
// step 2..7
for (ULONG j = 1; j < 7; j++) {
Xstep(hWnd, g_step[j].DOValue, g_step[j].DIValue);
}
// step 8
YkjDO(MOTION_CCUT);
PostMessage(hWnd, WM_DORESULT, g_step[7].DOValue, g_step[7].DIValue);
while (TRUE)
{
PostMessage(hWnd, WM_DIRESULT, YkjDI(), 0);
// 曲线判断
if (TRUE) {
Sleep(2000);
break;
}
else {
Sleep(100);
}
}
}
return StopTest(hWnd);
}
HANDLE WINAPI CreateTestThread(LPTHREAD_START_ROUTINE lpStartAddress, HWND hWnd, ULONG x)
{
#ifdef _YKJVDIO
g_hYkjThread = CreateThread(NULL, 0, YkjThread, NULL, 0, NULL);
#endif // _YKJVDIO
ULONG parameter[2];
parameter[0] = (ULONG)hWnd;
parameter[1] = x;
return CreateThread(NULL, 0, lpStartAddress, parameter, 0, NULL);
}
// 输出停止
VOID WINAPI YkjStopDO()
{
if (g_hTestThread != NULL)
{
TerminateThread(g_hTestThread, 0);
CloseHandle(g_hTestThread);
g_hTestThread = NULL;
}
YkjDO(MOTION_NONE);
}
// 诊断试验
VOID WINAPI YkjStepTest(HWND hWnd, ULONG xstep)
{
if ((xstep < 1) || (xstep > 8)) {
return;
}
YkjStopDO();
g_hTestThread = CreateTestThread(StepTest, hWnd, xstep);
}
// 停止压溃试验
VOID WINAPI YkjStopTest()
{
YkjStopDO();
// 取消通告
RegisterNotify(0, 0, 0, 0, 0);
if (g_pADBuf != NULL)
{
VirtualFree(g_pADBuf, 0, MEM_RELEASE);
g_pADBuf = NULL;
}
StopIntr();
}
// 开始压溃试验 (pellets: 小球数目, FrqSamp: 采集频率)
VOID WINAPI YkjStartTest(HWND hWnd, ULONG pellets, ULONG FrqSamp)
{
if (pellets == 0) {
return;
}
MessageBox(NULL, TEXT("开始压溃试验,按停止按钮停止试验。"), TEXT("压溃试验"), MB_OK);
// 初始化硬件和采集卡
Initial(0, 0, 0, 0);
DWORD dwSize = StartIntr(10, NumSamp, 0, 2, FrqSamp, 0, 1);
没有合适的资源?快使用搜索试试~ 我知道了~
jkY.rar_底层 驱动_检测设备
共21个文件
pdb:2个
obj:1个
h:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 3 浏览量
2022-09-14
17:23:51
上传
评论
收藏 1.95MB RAR 举报
温馨提示
港口检测设备驱动控制系统的源程序代码,底层代码程序
资源推荐
资源详情
资源评论
收起资源包目录
jkY.rar (21个子文件)
jkY
jkY.cpP 9KB
jkY.dsw 529B
jkY.opt 48KB
jkY.plg 1KB
jkY.rC 3KB
jkY.dsp 4KB
jkY.H 6KB
jkY.aps 17KB
Debug
jkY.ilk 279KB
jkY.dll 212KB
jkY.obj 29KB
jkY.exp 1KB
vc60.idb 217KB
jkY.pdb 545KB
jkY.res 836B
vc60.pdb 76KB
jkY.pch 4.25MB
jkY.bsc 1.84MB
jkY.sbr 0B
jkY.lib 3KB
jkY.ncb 57KB
共 21 条
- 1
资源评论
JaniceLu
- 粉丝: 85
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功