//文件名:RS232_x.C -
//原因:用於VIGOR PLC modbus與PC圖形控制軟件之間的RS232連接。
//使用說明:
//
/*
01:讀取線圈狀態
02:讀取輸入狀態
03:讀取保持寄存器
04:讀取輸入寄存器
05:強制單線圈
06:預設單寄存器
15:強制多個線圈
16:預置多個寄存器
22:屏蔽寫寄存器
23:讀/寫寄存器
*/
#pragma選項w32
#包含“msvcrt.h -”
#包含“windows.h -”
#包括“wingdi.h -”
//2006/65438
#包含“winbase.h -”
#包括“winerror.h -”
#包含" advapi.h -"
#包含“winuser.h -”
#定義編號50
#定義編號_1編號+1
#定義PI 3.141592654
#定義ID_TIMER 1
Byte Text= "歡迎使用RS232 MODBUS測試程序2006/10/19 ";
//最好選擇壹個好記的名字,避免用A、B、C作為名字。
WNDCLASS wc
//WNDCLASSEX WC;
HWND hwnd
DCB dcb//2006年9月29日香港
//以小寫p開頭的變量多為指針函數。
//站號為1,Y0,Y0設置為開。
byte spd[8]={1,5,0,0,255,0,140,58 };//1,5,0,0,ff,0,8c,3a
//站號為1,Y0,Y0設置為OFF。
byte spdx[8]={1,5,0,0,0,0,205,202 };//1,5,0,0,0,0,cd,ca
字節ABCD[8];
味精味精;
HDC hdc
HMENU hMenu
處理hFile
void main()
{
/*
WC . CB size = sizeof(WNDCLASSEX);//如果沒有這壹行,RegisterClassEx將看不到窗口。
*/
WC . h instance = hth isinst;
WC . lpsz class name = " Hi ";
wc.lpfnWndProc = # WndProc
WC . style = CS _ HREDRAW | CS _ VREDRAW;
WC . hbrbackground = GetStockObject(WHITE _ BRUSH);
wc.hCursor = LoadCursor(0,IDC _ CROSS);
register class(# WC);
hwnd=CreateWindowEx(0," Hi ",#Text,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
0,0,hThisInst,0);
SetTimer (hwnd,ID_TIMER,1000,NULL);
hFile=CreateFile("Com4 ",
泛型_ READ |泛型_WRITE,
0,
空,
開放_現有,
文件_屬性_正常,
0);
if(hfile = = invalid _ handle _ value)//判斷COM是否打開成功。
{
MessageBox(0,"打開端口時出錯!!",“通訊錯誤”,MB _ OK);
返回;
}
//傳入dcb地址打開序列參數。
GetCommState(hFile,# dcb);//知道COM的當前狀態
dcb。波德拉特= 19200;//設置鮑魚率19200。
dcb。ByteSize = 8;// 8位字節
dcb。奇偶性= NOPARITY//奇偶校驗是無。
dcb。StopBits = ONESTOPBIT//停止位=1
//設置端口
如果(!SetCommState(hFile,#dcb))
{
MessageBox(0,"串口設置錯誤!!!",“設置錯誤”,MB _ OK);
close handle(hFile);
返回;
}
ShowWindow(hwnd,1);
while (GetMessage(#msg,0,0,0))
調度消息(# msg);
}
點pt[50];
Long wndproc (hwnd hwnd,uintmsg,wparam wparam,lparam lparam)//窗口函數
{
static int cxClient,cyClient
靜態點pt[NUM _ 1];
靜態BOOL fFlipFlop = FALSE
HBRUSH hBrush
int I;
浮動f;
PAINTSTRUCT ps
RECT矩形;
開關(消息)
{
案例WM_TIMER:
!fFlipFlop
invalidate estrupter(hwnd,NULL,FALSE);
if(fFlipFlop)
WriteFile(hFile,#spd,8,#abcd,NULL);
其他
WriteFile(hFile,#spdx,8,#abcd,NULL);
返回0;
案例WM_SIZE:
CX client = LOWORD(lparam);
cyClient = hi word(lparam);
打破;
案例WM_PAINT:
hdc = BeginPaint (hwnd,# PS);
GetClientRect (hwnd,# rect);
if(fFlipFlop)
{
HB rush = CreateSolidBrush(RGB(255,0,0));
FillRect (hdc,#rect,hBrush);
DrawText (hdc,"站號為1,Y0設置為on ",16,#rect,
DT _ single line | DT _ CENTER | DT _ VCENTER);
}
其他
{
hBrush = CreateSolidBrush ( RGB(0,255,0));
FillRect (hdc,#rect,hBrush);
DrawText (hdc,"站號為1,Y0設置為OFF ",17,#rect,
DT _ single line | DT _ CENTER | DT _ VCENTER);
}
MoveToEx (hdc,0,cyClient / 2,NULL);
LineTo(hdc,cxClient,cyClient/2);
for(I = 0;我& lt= NUMi++)
{
pt[i]。x = I * CX client/NUM;
f = sin(PI * 2/NUM * I);
pt[i]。y = float 1-f * cyClient/2;
}
多段線(hdc,#pt,NUM _ 1);
EndPaint (hwnd,# PS);//這壹行本來就是錯的!妳可以通過改變變量的名字來判斷
delete object(HB rush);
打破;
案例WM_DESTROY:
KillTimer (hwnd,ID _ TIMER);
PostQuitMessage(0);
打破;
}
返回DefWindowProc(hwnd,msg,wparam,lparam);
}