HP\李良庭
2025-07-08 868daf94f29ce1ffdd799a68c07bb668cd373bcd
1
2
3
4
5
6
7
8
9
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
{------------------------------------------------------------------------------}
{ÏîÄ¿Ãû³Æ£ºactuatorlib¶¯Ì¬¿â                                                   }
{µ¥ÔªÃû³Æ£ºactuatorlib.pas                                                     }
{°æ±¾°æ´Î£º3.2.1                                                               }
{¹¦ÄÜÃèÊö£º»ùÓÚÁ¸Ê³Ë®·ÖÒÇActuatorÇý¶¯·â×°µÄ Dll½Ó¿ÚͨѶ¿â                      }
{½¨Á¢ÈÕÆÚ£º2023-10-27                                                          }
{ÐÞ¸ÄÐ޸ģº2025-01-20                                                          }
{°æÈ¨ËùÓУºÀîÁ¼Í¥ liangtingli@outlook.com                                      }
{------------------------------------------------------------------------------}
 
unit ActuatorLib;
 
interface
 
//¾²Ì¬ÉùÃ÷ lib¿â
const
  actuator_dll = 'core\Actuator.dll'; {×Ô¶¨Òå¿â}
 
//Ǥ¼ñϵͳָÁî´úÂë
const
  PLC_READY_GRAIN = $01;        //Á¸ÖÖ×¼±¸ÃüÁî´úÂ루Á¸ÖÖÒÑÐ޸ģ©
  PLC_READY_FINISH = $02;       //·µ»Ø×¼±¸Íê³É
  PLC_DETECT_START = $03;       //¼ì²âÆô¶¯ÃüÁî
  PLC_DETECT_FINISH = $04;      //·µ»Ø¼ì²âÍê±Ï
  PLC_DEVICE_WR_RESET = $FE;    //É豸ˮ·ÖÒǸ´Î»ÃüÁî
  PLC_DEVICE_WR_FAULT = $FF;    //·µ»ØË®·ÖÒǹÊÕÏ´úÂë
 
//WRË®·ÖÒÇÖ¸Áî´úÂë
const
  WR_READY = $01;               //Ë®·ÖÒÇ×¼±¸Ö¸Áî
  WR_DETECT = $02;              //Ë®·ÖÒǼì²âÖ¸Áî
  WR_VERIFY = $03;              //Ë®·ÖÒÇУÑéÖ¸Áî
  WR_RESET = $04;               //Ë®·ÖÒǸ´Î»Ö¸Áî
  WR_GOODS = $05;               //Á¸ÖÖ±ä¸üÖ¸Áî
 
  WR_VALV01 = $07;              //ÉÏ·§ÃÅ¿ª
  WR_VALV02 = $08;              //ÉÏ·§ÃŹØ
  WR_VALV03 = $09;              //Ï·§ÃÅ¿ª
  WR_VALV04 = $0A;              //Ï·§ÃŹØ
  WR_VALV05 = $0B;              //Ë«·§ÃÅ¿ª
  WR_VALV06 = $0C;              //Ë«·§ÃŹØ
  WR_VIBRATE_01 = $0D;          //Õñ¶¯¿ª
  WR_VIBRATE_02 = $0E;          //Õñ¶¯¹Ø
 
////////////////////////////////////////////////////////////////////////////////
type
  {¶¨Ò廨µ÷º¯ÊýÀàÐÍ}
 
  //Êý¾Ý»Øµ÷º¯Êý
  //typedef void(__stdcall* MESSAGE_HANDLER)(unsigned short *data, int nsize);
  TMessageCallBack = procedure(Data: PWord; Size: Integer); stdcall;
 
  //´ò¿ª·þÎñ¶Ë
  //int __stdcall StartTcpSlave(int nSlavePort, const char* szDevPort, int baud,
  //                            char parity, int data_bit, int stop_bit, int detectTimeout = 60,
  //                            int resetTimeout = 10, MESSAGE_HANDLER handler = NULL);
  function StartTcpSlave(nSlavePort: Integer;
                         szSerialPort: PChar; baud: Integer;
                         parity: Char; data_bit: Integer; stop_bit: Integer;
                         detectTimeout: Integer; resetTimeout: Integer;
                         handler: TMessageCallBack): Integer; stdcall; external actuator_dll;
  //ACTUATOR_API int __stdcall StartTcpSlave(void* waterDev, int nSlavePort,
  //                                        int detectTimeout = 60, int resetTimeout = 10, MESSAGE_HANDLER handler = NULL);
  function StartTcpSlaveEx(waterDev:Pointer; nSlavePort: Integer;
                         detectTimeout: Integer=60; resetTimeout: Integer=10;
                         handler: TMessageCallBack=nil ): Integer; stdcall; external actuator_dll;
 
  //¹Ø±Õ·þÎñ¶Ë
  //int __stdcall StopTcpSlave();
  function StopTcpSlave: Integer; stdcall; external actuator_dll;
////////////////////////////////////////////////////////////////////////////////
 
  {¶¨Òå Dllº¯Êýµ÷ÓÃÉêÃ÷}
  //´´½¨³õʼ»¯¿Í»§PLCÉ豸¾ä±úctx
  //strIp:   IPµØÖ·
  //nPort:   ÍøÂç¶Ë¿Ú
  //ACTUATOR_API void* CreatePlcDevice(const char* strIp, int nPort);
  function CreatePlcDevice(strIp:PChar; nPort:Integer):Pointer; stdcall; external actuator_dll;
 
  //´´½¨Ë®·ÖÒǾä±úctx
  //szSerialPort:   ´®¿ÚÃû
  //baud:       ²¨ÌØÂÊ
  //parity:     Ð£ÑéÀàÐÍ
  //data_bit:   Êý¾Ýλ
  //stop_bit:   Í£Ö¹Î»
  //ACTUATOR_API void* CreateWrDevice(const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit);
  function CreateWrDevice(szSerialPort:PChar; baud:Integer; parity:Char; data_bit:Integer; stop_bit:Integer):Pointer; stdcall; external actuator_dll;
 
  //Á¬½Ó¿Í»§É豸»òË®·ÖÒÇ×°ÖÃ
  //ctxDev : É豸¾ä±ú
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int ConnectDevice(void* ctxDev);
  function ConnectDevice(ctxDev:Pointer):Integer; stdcall; external actuator_dll;
 
  //»ñȡ״̬»òÁ¸ÖÖ¸ü¸ÄÐÅÏ¢
  //ctxDev : É豸¾ä±ú
  //nState £º×´Ì¬×Ö£¬ÈçÏÂ״̬²»»áÖØ¸´
  //         0x01:  Á¸ÖÖÒÑÐÞ¸Ä
  //         0x03:  ¿ªÊ¼²âÊÔ
  //         0xFE:  ¸´Î»ÃüÁÓÅÏȼ¶×î¸ß
  //         ÆäËû£º ÎªÐ´Èë״̬
  //nGoodType: Á¸ÖÖ±àºÅ
  //         0x01:  Ð¡Âó,
  //         0x02:  Ë®µ¾
  //         0x03:  »Æ¶¹
  //         0x04:  ÓñÃ×
  //·µ»ØÖµ£º´ÓÈë²Î·µ»Ø ×´Ì¬×Ö¡¢Á¸ÖÖ±àºÅ¡¢Ö´Ðнá¹û(СÓÚ0--´íÎó)
  //ACTUATOR_API int ReadState(void* ctxDev, unsigned short* nState, unsigned short* nGrainType);
  function ReadState(ctxDev:Pointer; nState:PWord; nGrainType:PWord):Integer; stdcall; external actuator_dll;
 
  //д»Ø×´Ì¬
  //ctxDev : É豸¾ä±ú
  //nState £º×´Ì¬×Ö£¬ÈçÏÂ״̬²»»áÖØ¸´
  //         0x02:  ×¼±¸ÒÑÍê³É
  //         0x04:  ¼ì²âÍê³É
  //         0xFF:  Ë®·ÖÒǹÊÕÏ
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int WriteState(void* ctxDev, unsigned short nState);
  function ResponseState(ctxDev:Pointer; nState:Word):Integer; stdcall; external actuator_dll;
 
  //»Ø´«¼ì²âÊý¾Ý
  //ctxDev : É豸¾ä±ú
  //nDatas £ºÊý×飬Êý¾Ý˳ÐòÈçÏÂ
  //         Á¸ÖÖ±àÂë
  //         º¬Ë®ÂÊ£¬  È¡Õû = Ô­Öµ*100
  //         ÈÝÖØ±È£¬  È¡Õû = Ô­Öµ*100
  //nSize  : Êý¾Ý¸öÊý
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int UploadData(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 3);
  function UploadData(ctxDev:Pointer; nDatas:PWord; nSize:Word=3):Integer; stdcall; external actuator_dll;
 
  //Ï·¢ÃüÁîÐÅÏ¢
  //ctxDev : É豸¾ä±ú
  //nCmdType £ºÃüÁî×Ö£¬ÈçÏÂÃèÊö
  //         0x01:  Á¸ÖÖÒÑÐÞ¸Ä
  //         0x02:  ¿ªÊ¼²âÊÔ
  //         0x03:  Ð£×¼ÃüÁ¼´Îª±ê¶¨Ò³Ãæ¼ì²â°´Å¥ÃüÁ
  //nGoodType: Á¸ÖÖ±àºÅ
  //         0x01:  Ð¡Âó,
  //         0x02:  Ë®µ¾
  //         0x03:  »Æ¶¹
  //         0x04:  ÓñÃ×
  //         µ±nCmdType Îª0x02£¬0x03ʱ£¬²»Óÿ¼ÂÇÁ¸ÖÖ±àºÅ
  // nResponseSeconds: ÏìӦʱ¼ä£¬ÒÔÃë¼ÆËã
  // nResponseUSeconds: ÏìӦʱ¼ä£¬ÒÔ΢Ãî¼ÆË㣬ÈôСÓÚÃ룬ȫ²¿ÓÃ΢Ãî±íʾ¡£
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int SendCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType = 0, unsigned int nResponseSeconds = 0, unsigned int nResponseUSeconds = 500000);
  function SendCommands(ctxDev:Pointer; nCmdType:Word; nGrainType:Word=0; nResponseSeconds:Integer=20; nResponseUSeconds:Integer=0):Integer; stdcall; external actuator_dll;
 
  //¸´Î»ÃüÁî
  //ctxDev : É豸¾ä±úÖ¸Õë
  //·µ»ØÖµ£ºÎÞ£¬
  //ACTUATOR_API int __stdcall ResetCommand(void* ctxDev);
  function ResetCommand(ctxDev:Pointer):Integer;stdcall; external actuator_dll;
 
  //Ï·¢²ÎÊý
  //ctxDev : É豸¾ä±ú
  //nStartFreq £ºÆðʼƵÂÊ
  //nStopFreq £º ÖÕֹƵÂÊ
  //nStepFreq £º ²½³¤
  //nDecayCode £ºË¥¼õÂë
  //nAscValid £º ASC ÄÚ²¿/ÍⲿÓÐЧ£¬ È¡ÖµÎª 0£ºÄÚ²¿ÓÐЧ£¬ 1£ºÍⲿÓÐЧ
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int WriteParams(void* ctxDev,   unsigned short nStartFreq, unsigned short nStopFreq,
  //                          unsigned short nStepFreq,  unsigned short nDecayCode, unsigned short nAscValid);
  function WriteParams(ctxDev:Pointer; nStartFreq,nStopFreq,nStepFreq,nDecayCode,nAscValid:Word):Integer; stdcall; external actuator_dll;
 
  //¶ÁÈ¡¼ì²âÐÅÏ¢
  //ctxDev : É豸¾ä±ú
  //nDatas £ºÊý×飬Êý¾Ý˳ÐòÈçÏÂ
  //         µçѹֵ
  //         ÖØÁ¿ /100
  //         Î¶Ƞ/100
  //         Êª¶È /100
  // nSize : ¶ÁÈ¡4¸ö¼Ä´æÆ÷
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int ReadDatas(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 4);
  function ReadDatas(ctxDev:Pointer; nDatas:PWord; nSize:Word=4):Integer; stdcall; external actuator_dll;
 
  //¶ÁȡɨƵֵ,ÆäʵΪµçƽֵ£¬
  //ctxDev : É豸¾ä±ú
  //nVcc   £ºµçƽֵָÕë
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int ReadVcc(void* ctxDev, unsigned short* nVcc);
  function ReadVcc(ctxDev:Pointer; nVcc:PWord):Integer; stdcall; external actuator_dll;
  function ReadWeight(ctxDev:Pointer; nWg:PWord):Integer; stdcall; external actuator_dll;   
  function CalcValue(nDValue:Word; Coef0,Coef1,Coef2,Coef3,Coef4:double):double; stdcall; external actuator_dll;
 
  //Ïú»ÙË®·ÖÒÇ»òPLCÉ豸
  //ctxDev : É豸¾ä±úÖ¸Õë
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int DestroyDevice(void* ctxDev);
  function DestroyDevice(ctxDev:Pointer):Integer; stdcall; external actuator_dll;
 
  //¶Ï¿ªË®·ÖÒÇ»òPLCÉ豸Á¬½Ó
  //ctxDev : É豸¾ä±úÖ¸Õë
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int __stdcall Disconnect(void* ctxDev)
  function Disconnect(ctxDev:Pointer):Integer; stdcall; external actuator_dll;
 
 
  //Ëã·¨º¯Êý
  //x Îª²âÁ¿Öµ
  //y ÎªÊµ¼ÊÖµ
  //n ÎªÄâºÏ´ÎÊý
  //nSampleNumber Ñù±¾ÊýÁ¿
  //·µ»ØÖµ£ºÐ¡ÓÚ0 ±íʾ ´íÎó£¬
  //ACTUATOR_API int Linearize(float x[], float y[], double Coefficient[], const int n = 2, const int nSampleNumber = 5);
  function Linearize(x,y:PSingle; Coefficient:PDouble; n:integer=2; nSampleNumber:integer=5):Integer; stdcall; external actuator_dll;
  //ACTUATOR_API int __stdcall PolyNomialFit(double x[], double y[], double Coefficient[], const int nDegree = 3, const int nSampleNumber = 5);
  function PolyNomialFit(x,y:PDouble; Coefficient:PDouble; n:integer=2; nSampleNumber:integer=5):Integer; stdcall; external actuator_dll;
 
  //¶Á¹Ì¼þ°æ±¾ºÅ
  function ReadVersion(ctxDev:Pointer; Version:PWord; nSize:Word=2):Integer; stdcall; external actuator_dll;
 
  //¶ÁÈ¡¹ÊÕÏÂ룬
  //ctxDev :É豸¾ä±ú
  //nFaultCode :¹ÊÕÏÂë
  //0-Õý³£
  //1-ÉÏ·§ÃÅ¿¨×¡
  //2-Ï·§ÃÅ¿¨×¡
  //3-(䶨Òå)ÒÔ´ËÀàÍÆ
  //·µ»ØÖµ:СÓÚ0 ±íʾ ´íÎó
  //ACTUATOR API int stdcall ReadFaultCode(void* ctxDev, unsigned short* nFaultCode);
  function ReadFaultCode(ctxDev:Pointer; nFaultCode:PWord):Integer; stdcall; external actuator_dll;
 
implementation
 
end.