{------------------------------------------------------------------------------} {ÏîÄ¿Ãû³Æ£º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.